diff --git a/lib/api/marianumcloud/talk/sendMessage/sendMessage.dart b/lib/api/marianumcloud/talk/sendMessage/sendMessage.dart new file mode 100644 index 0000000..f692779 --- /dev/null +++ b/lib/api/marianumcloud/talk/sendMessage/sendMessage.dart @@ -0,0 +1,25 @@ +import 'package:http/http.dart' as http; +import 'package:http/src/response.dart'; +import 'package:marianum_mobile/api/marianumcloud/talk/sendMessage/sendMessageParams.dart'; +import 'package:marianum_mobile/api/marianumcloud/talk/talkApi.dart'; + +import '../../../apiParams.dart'; + +class SendMessage extends TalkApi { + String chatToken; + SendMessage(this.chatToken, SendMessageParams params) : super("v1/chat/$chatToken", params); + + @override + assemble(String raw) { + + } + + @override + Future? request(Uri uri, ApiParams? body, Map? headers) { + if(body is SendMessageParams) { + return http.post(uri, headers: headers, body: body.toJson()); + } + return null; + } + +} \ No newline at end of file diff --git a/lib/api/marianumcloud/talk/sendMessage/sendMessageParams.dart b/lib/api/marianumcloud/talk/sendMessage/sendMessageParams.dart new file mode 100644 index 0000000..a4c7e51 --- /dev/null +++ b/lib/api/marianumcloud/talk/sendMessage/sendMessageParams.dart @@ -0,0 +1,15 @@ +import 'package:json_annotation/json_annotation.dart'; +import 'package:marianum_mobile/api/apiParams.dart'; + +part 'sendMessageParams.g.dart'; + +@JsonSerializable(explicitToJson: true, includeIfNull: false) +class SendMessageParams extends ApiParams { + String message; + int? replyTo; + + SendMessageParams(this.message, {this.replyTo}); + + factory SendMessageParams.fromJson(Map json) => _$SendMessageParamsFromJson(json); + Map toJson() => _$SendMessageParamsToJson(this); +} \ No newline at end of file diff --git a/lib/api/marianumcloud/talk/sendMessage/sendMessageParams.g.dart b/lib/api/marianumcloud/talk/sendMessage/sendMessageParams.g.dart new file mode 100644 index 0000000..50255b4 --- /dev/null +++ b/lib/api/marianumcloud/talk/sendMessage/sendMessageParams.g.dart @@ -0,0 +1,28 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'sendMessageParams.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +SendMessageParams _$SendMessageParamsFromJson(Map json) => + SendMessageParams( + json['message'] as String, + replyTo: json['replyTo'] as int?, + ); + +Map _$SendMessageParamsToJson(SendMessageParams instance) { + final val = { + 'message': instance.message, + }; + + void writeNotNull(String key, dynamic value) { + if (value != null) { + val[key] = value; + } + } + + writeNotNull('replyTo', instance.replyTo); + return val; +} diff --git a/lib/api/marianumcloud/talk/sendMessage/sendMessageResponse.dart b/lib/api/marianumcloud/talk/sendMessage/sendMessageResponse.dart new file mode 100644 index 0000000..384e95d --- /dev/null +++ b/lib/api/marianumcloud/talk/sendMessage/sendMessageResponse.dart @@ -0,0 +1,5 @@ +import 'package:marianum_mobile/api/apiResponse.dart'; + +class SendMessageResponse extends ApiResponse { + +} \ No newline at end of file diff --git a/lib/api/marianumcloud/talk/talkApi.dart b/lib/api/marianumcloud/talk/talkApi.dart index b1a3e4a..6e86b04 100644 --- a/lib/api/marianumcloud/talk/talkApi.dart +++ b/lib/api/marianumcloud/talk/talkApi.dart @@ -1,4 +1,5 @@ import 'package:http/http.dart' as http; +import 'package:marianum_mobile/api/apiError.dart'; import 'package:marianum_mobile/api/apiRequest.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -21,7 +22,7 @@ abstract class TalkApi extends ApiRequest { TalkApi(this.path, this.body, {this.headers, this.getParameters}); - Future request(Uri uri, Object? body, Map? headers); + Future? request(Uri uri, ApiParams? body, Map? headers); T assemble(String raw); Future run() async { @@ -37,7 +38,10 @@ abstract class TalkApi extends ApiRequest { headers?.putIfAbsent("Accept", () => "application/json"); headers?.putIfAbsent("OCS-APIRequest", () => "true"); - http.Response data = await request(endpoint, body, headers); + http.Response? data = await request(endpoint, body, headers); + if(data == null) { + throw ApiError("Request could not be dispatched!"); + } //dynamic jsonData = jsonDecode(data.body); diff --git a/lib/screen/pages/talk/chatView.dart b/lib/screen/pages/talk/chatView.dart index b3ba238..76a4b4b 100644 --- a/lib/screen/pages/talk/chatView.dart +++ b/lib/screen/pages/talk/chatView.dart @@ -4,6 +4,8 @@ import 'package:flutter/material.dart'; import 'package:jiffy/jiffy.dart'; import 'package:marianum_mobile/api/marianumcloud/talk/chat/richObjectStringProcessor.dart'; import 'package:marianum_mobile/api/marianumcloud/talk/room/getRoomResponse.dart'; +import 'package:marianum_mobile/api/marianumcloud/talk/sendMessage/sendMessage.dart'; +import 'package:marianum_mobile/api/marianumcloud/talk/sendMessage/sendMessageParams.dart'; import 'package:marianum_mobile/data/chatList/chatProps.dart'; import 'package:provider/provider.dart'; @@ -46,6 +48,7 @@ class _ChatViewState extends State { ); final ScrollController _listController = ScrollController(); + final TextEditingController _textBoxController = TextEditingController(); @override void initState() { @@ -151,17 +154,23 @@ class _ChatViewState extends State { padding: const EdgeInsets.all(10), child: Row( children: [ - const Expanded( + Expanded( child: TextField( + controller: _textBoxController, maxLines: null, - decoration: InputDecoration( + decoration: const InputDecoration( hintText: "Nachricht", border: OutlineInputBorder(), labelText: "", ), ), ), - IconButton(onPressed: () {}, icon: const Icon(Icons.send)) + IconButton(onPressed: () { + SendMessage(widget.user.token, SendMessageParams(_textBoxController.text)).run().then((value) => { + Provider.of(context, listen: false).run(), + _textBoxController.text = "", + }); + }, icon: const Icon(Icons.send)) ], ), )