diff --git a/lib/pages/home/direct/direct_state.dart b/lib/pages/home/direct/direct_state.dart index 2365545..bfe16f2 100644 --- a/lib/pages/home/direct/direct_state.dart +++ b/lib/pages/home/direct/direct_state.dart @@ -88,11 +88,12 @@ class DirectState extends CoreProvier { } Future sendMessage() async { - if (text == null || text!.isEmpty && recordedFile == null) return; + if ((text == null || text!.isEmpty) && recordedFile == null) return; final body = {}; if (text != null) { body.addAll({'text': text}); - messages.add( + messages.insert( + 0, MessageData( id: 0, writedByAdmin: false, @@ -115,6 +116,10 @@ class DirectState extends CoreProvier { notifyListeners(); final service = RequestService(RequestHelper.sendDirectMessage(typeId), body: body); - await service.post(); + if (recordedFile == null) { + await service.post(); + } else { + await service.multipart(recordedFile, 'POST'); + } } } diff --git a/lib/pages/home/direct/widgets/message.dart b/lib/pages/home/direct/widgets/message.dart index 1f4c1d5..9c4171c 100644 --- a/lib/pages/home/direct/widgets/message.dart +++ b/lib/pages/home/direct/widgets/message.dart @@ -19,7 +19,7 @@ class Message extends StatelessWidget { Widget build(BuildContext context) { final firstMessageOfGroupId = context .read() - .dailyMessages[message.createdAt.split('T').first]! + .dailyMessages[message.createdAt.replaceAll('T', ' ').split(' ').first]! .last; return Column( crossAxisAlignment: message.writedByAdmin @@ -156,9 +156,9 @@ class _MessageContainer extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - padding: const EdgeInsets.all(16), + padding: const EdgeInsets.symmetric(vertical: 4, horizontal: 16), decoration: BoxDecoration( - borderRadius: DesignConfig.highBorderRadius.copyWith( + borderRadius: DesignConfig.mediumBorderRadius.copyWith( bottomLeft: writedByAdmin ? Radius.zero : null, bottomRight: !writedByAdmin ? Radius.zero : null, ), diff --git a/lib/pages/home/direct/widgets/message_box.dart b/lib/pages/home/direct/widgets/message_box.dart index 17fb9cf..8583234 100644 --- a/lib/pages/home/direct/widgets/message_box.dart +++ b/lib/pages/home/direct/widgets/message_box.dart @@ -84,7 +84,7 @@ class _TypingState extends State<_Typing> { flex: 15, child: Form( key: _formKey, - child: TextField( + child: TextFormField( textInputAction: TextInputAction.send, style: Theme.of(context).textTheme.bodyText2, decoration: InputDecoration( @@ -147,7 +147,7 @@ class _RecordChecking extends StatelessWidget { children: [ DidvanIconButton( icon: DidvanIcons.send_solid, - onPressed: () => state.stopRecording(sendImidiately: true), + onPressed: state.sendMessage, color: Theme.of(context).colorScheme.focusedBorder, ), Expanded( diff --git a/lib/pages/home/settings/direct_list/widgets/chat_room_item.dart b/lib/pages/home/settings/direct_list/widgets/chat_room_item.dart index a451a86..5fc6f34 100644 --- a/lib/pages/home/settings/direct_list/widgets/chat_room_item.dart +++ b/lib/pages/home/settings/direct_list/widgets/chat_room_item.dart @@ -55,10 +55,19 @@ class ChatRoomItem extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - DidvanText( - chatRoom.lastMessage.text ?? '', - maxLines: 1, - overflow: TextOverflow.ellipsis, + Row( + children: [ + if (chatRoom.lastMessage.text == null) + const Icon( + DidvanIcons.mic_light, + size: 18, + ), + DidvanText( + chatRoom.lastMessage.text ?? 'پیام صوتی', + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ], ), DidvanText( DateTimeUtils.momentGenerator(chatRoom.updatedAt), diff --git a/lib/providers/user_provider.dart b/lib/providers/user_provider.dart index 3be9ea5..3c1da30 100644 --- a/lib/providers/user_provider.dart +++ b/lib/providers/user_provider.dart @@ -20,6 +20,7 @@ class UserProvider extends CoreProvier { return token; } await StorageService.setValue(key: 'token', value: newToken); + return null; } Future getUserInfo() async { @@ -36,7 +37,7 @@ class UserProvider extends CoreProvier { appState = AppState.isolatedBusy; final RequestService service = RequestService(RequestHelper.updateUserProfile); - await service.multipart(file); + await service.multipart(file, 'PUT'); if (service.isSuccess) { user = user.copyWith(photo: service.result['photo']); appState = AppState.idle; diff --git a/lib/services/network/request.dart b/lib/services/network/request.dart index 1b11098..037fc71 100644 --- a/lib/services/network/request.dart +++ b/lib/services/network/request.dart @@ -2,7 +2,6 @@ import 'dart:convert'; import 'dart:developer'; import 'package:http/http.dart' as http; import 'package:http_parser/http_parser.dart' as parser; -import 'package:image_picker/image_picker.dart'; class RequestService { static late String token; @@ -100,12 +99,17 @@ class RequestService { } } - Future multipart(XFile file) async { + Future multipart(dynamic file, String method) async { try { - final request = http.MultipartRequest('PUT', Uri.parse(url)); + final request = http.MultipartRequest(method, Uri.parse(url)); _headers.update('Content-Type', (_) => 'multipart/form-data'); request.headers.addAll(_headers); final length = await file.length(); + if (_requestBody != null) { + _requestBody!.forEach((key, value) { + request.fields.addAll({key.toString(): value.toString()}); + }); + } request.files.add( http.MultipartFile( 'photo',