Update direct section

This commit is contained in:
Amir Hossein Mousavi 2024-05-22 13:37:27 +03:30
parent 6520dc89c5
commit b61305e71c
4 changed files with 40 additions and 26 deletions

View File

@ -29,9 +29,12 @@ class DirectState extends CoreProvier {
Future<void> getMessages() async { Future<void> getMessages() async {
appState = AppState.busy; appState = AppState.busy;
final RequestService service = RequestService(RequestHelper.direct(typeId)); final RequestService service = RequestService(RequestHelper.direct(typeId));
await service.httpGet(); await service.httpGet();
if (service.isSuccess) { if (service.isSuccess) {
messages.clear();
final messageDatas = service.result['messages']; final messageDatas = service.result['messages'];
for (var i = 0; i < messageDatas.length; i++) { for (var i = 0; i < messageDatas.length; i++) {
messages.add(MessageData.fromJson(messageDatas[i])); messages.add(MessageData.fromJson(messageDatas[i]));
@ -96,33 +99,17 @@ class DirectState extends CoreProvier {
String createdAt = message.createdAt.replaceAll('T', ' ').split(' ').first; String createdAt = message.createdAt.replaceAll('T', ' ').split(' ').first;
if (!dailyMessages.containsKey(createdAt)) { if (!dailyMessages.containsKey(createdAt)) {
dailyMessages.addAll({ dailyMessages.addAll({
createdAt: [messages.last.id] createdAt: [message.id]
}); });
} else { } else {
dailyMessages[createdAt]!.add(messages.last.id); dailyMessages[createdAt]!.add(message.id);
} }
} }
Future<void> sendMessage() async { Future<void> sendMessage() async {
if ((text == null || text!.isEmpty) && recordedFile == null) return; if ((text == null || text!.isEmpty) && recordedFile == null) return;
MediaService.audioPlayer.stop(); 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 = {}; final body = {};
if (text != null) { if (text != null) {
@ -145,8 +132,20 @@ class DirectState extends CoreProvier {
notifyListeners(); notifyListeners();
final service = final service =
RequestService(RequestHelper.sendDirectMessage(typeId), body: body); RequestService(RequestHelper.sendDirectMessage(typeId), body: body);
if (uploadFile == null) { 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 { } else {
service.multipart( service.multipart(
file: Platform.isIOS file: Platform.isIOS

View File

@ -128,8 +128,9 @@ class _TypingState extends State<_Typing> {
child: state.text != null && state.text!.isNotEmpty child: state.text != null && state.text!.isNotEmpty
? DidvanIconButton( ? DidvanIconButton(
icon: DidvanIcons.send_solid, icon: DidvanIcons.send_solid,
onPressed: () { onPressed: () async {
state.sendMessage(); await state.sendMessage();
state.update();
_formKey.currentState!.reset(); _formKey.currentState!.reset();
}, },
size: 32, size: 32,
@ -212,7 +213,10 @@ class _RecordChecking extends StatelessWidget {
children: [ children: [
DidvanIconButton( DidvanIconButton(
icon: DidvanIcons.send_solid, icon: DidvanIcons.send_solid,
onPressed: state.sendMessage, onPressed: () async {
await state.sendMessage();
state.update();
},
color: Theme.of(context).colorScheme.focusedBorder, color: Theme.of(context).colorScheme.focusedBorder,
), ),
Expanded( Expanded(

View File

@ -52,6 +52,10 @@ class _DirectListState extends State<DirectList> {
placeholder: const _ChatRoomPlaceholder(), placeholder: const _ChatRoomPlaceholder(),
builder: (context, state, index) => ChatRoomItem( builder: (context, state, index) => ChatRoomItem(
chatRoom: state.chatRooms[index], chatRoom: state.chatRooms[index],
onBackButtonPressed: () {
state.chatRooms.clear();
state.getDirectsList();
},
), ),
childCount: state.chatRooms.length, childCount: state.chatRooms.length,
enableEmptyState: state.chatRooms.isEmpty, enableEmptyState: state.chatRooms.isEmpty,

View File

@ -13,7 +13,11 @@ import 'package:provider/provider.dart';
class ChatRoomItem extends StatelessWidget { class ChatRoomItem extends StatelessWidget {
final ChatRoom chatRoom; 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 @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -21,8 +25,11 @@ class ChatRoomItem extends StatelessWidget {
onTap: () { onTap: () {
Navigator.of(context).pushNamed( Navigator.of(context).pushNamed(
Routes.direct, Routes.direct,
arguments: {'type': chatRoom.type}, arguments: {
); 'type': chatRoom.type,
},
).then((value) => {onBackButtonPressed?.call()});
final state = context.read<DirectListState>(); final state = context.read<DirectListState>();
int unreadCount = chatRoom.unread; int unreadCount = chatRoom.unread;
chatRoom.unread = 0; chatRoom.unread = 0;