diff --git a/lib/views/direct/direct_state.dart b/lib/views/direct/direct_state.dart index 9a0d28c..6f5725b 100644 --- a/lib/views/direct/direct_state.dart +++ b/lib/views/direct/direct_state.dart @@ -29,9 +29,12 @@ class DirectState extends CoreProvier { Future getMessages() async { appState = AppState.busy; + final RequestService service = RequestService(RequestHelper.direct(typeId)); await service.httpGet(); if (service.isSuccess) { + messages.clear(); + final messageDatas = service.result['messages']; for (var i = 0; i < messageDatas.length; i++) { messages.add(MessageData.fromJson(messageDatas[i])); @@ -96,33 +99,17 @@ class DirectState extends CoreProvier { String createdAt = message.createdAt.replaceAll('T', ' ').split(' ').first; if (!dailyMessages.containsKey(createdAt)) { dailyMessages.addAll({ - createdAt: [messages.last.id] + createdAt: [message.id] }); } else { - dailyMessages[createdAt]!.add(messages.last.id); + dailyMessages[createdAt]!.add(message.id); } } Future sendMessage() async { if ((text == null || text!.isEmpty) && recordedFile == null) return; MediaService.audioPlayer.stop(); - messages.insert( - 0, - MessageData( - id: 0, - writedByAdmin: false, - readed: false, - createdAt: - DateTime.now().subtract(const Duration(minutes: 210)).toString(), - text: text, - audio: null, - audioFile: recordedFile, - radar: replyRadar, - news: replyNews, - audioDuration: audioDuration, - ), - ); - _addToDailyGrouped(messages.first); + final body = {}; if (text != null) { @@ -145,8 +132,20 @@ class DirectState extends CoreProvier { notifyListeners(); final service = RequestService(RequestHelper.sendDirectMessage(typeId), body: body); + if (uploadFile == null) { - service.post(); + await service.post(); + + if (service.isSuccess) { + final message = service.result['message']; + messages.insert(0, MessageData.fromJson(message)); + + dailyMessages.clear(); + + for (var i = 0; i < messages.length; i++) { + _addToDailyGrouped(messages[i]); + } + } } else { service.multipart( file: Platform.isIOS diff --git a/lib/views/direct/widgets/message_box.dart b/lib/views/direct/widgets/message_box.dart index 4bf9a67..5143b8d 100644 --- a/lib/views/direct/widgets/message_box.dart +++ b/lib/views/direct/widgets/message_box.dart @@ -128,8 +128,9 @@ class _TypingState extends State<_Typing> { child: state.text != null && state.text!.isNotEmpty ? DidvanIconButton( icon: DidvanIcons.send_solid, - onPressed: () { - state.sendMessage(); + onPressed: () async { + await state.sendMessage(); + state.update(); _formKey.currentState!.reset(); }, size: 32, @@ -212,7 +213,10 @@ class _RecordChecking extends StatelessWidget { children: [ DidvanIconButton( icon: DidvanIcons.send_solid, - onPressed: state.sendMessage, + onPressed: () async { + await state.sendMessage(); + state.update(); + }, color: Theme.of(context).colorScheme.focusedBorder, ), Expanded( diff --git a/lib/views/profile/direct_list/direct_list.dart b/lib/views/profile/direct_list/direct_list.dart index fe66eeb..0ec59bb 100644 --- a/lib/views/profile/direct_list/direct_list.dart +++ b/lib/views/profile/direct_list/direct_list.dart @@ -52,6 +52,10 @@ class _DirectListState extends State { placeholder: const _ChatRoomPlaceholder(), builder: (context, state, index) => ChatRoomItem( chatRoom: state.chatRooms[index], + onBackButtonPressed: () { + state.chatRooms.clear(); + state.getDirectsList(); + }, ), childCount: state.chatRooms.length, enableEmptyState: state.chatRooms.isEmpty, diff --git a/lib/views/profile/direct_list/widgets/direct_item.dart b/lib/views/profile/direct_list/widgets/direct_item.dart index 33acc62..5665763 100644 --- a/lib/views/profile/direct_list/widgets/direct_item.dart +++ b/lib/views/profile/direct_list/widgets/direct_item.dart @@ -13,7 +13,11 @@ import 'package:provider/provider.dart'; class ChatRoomItem extends StatelessWidget { final ChatRoom chatRoom; - const ChatRoomItem({Key? key, required this.chatRoom}) : super(key: key); + final VoidCallback? onBackButtonPressed; + + const ChatRoomItem( + {Key? key, required this.chatRoom, this.onBackButtonPressed}) + : super(key: key); @override Widget build(BuildContext context) { @@ -21,8 +25,11 @@ class ChatRoomItem extends StatelessWidget { onTap: () { Navigator.of(context).pushNamed( Routes.direct, - arguments: {'type': chatRoom.type}, - ); + arguments: { + 'type': chatRoom.type, + }, + ).then((value) => {onBackButtonPressed?.call()}); + final state = context.read(); int unreadCount = chatRoom.unread; chatRoom.unread = 0;