diff --git a/lib/presentation/chat/chat_screen/bloc/chat_bloc.dart b/lib/presentation/chat/chat_screen/bloc/chat_bloc.dart index c53410db..f621d783 100644 --- a/lib/presentation/chat/chat_screen/bloc/chat_bloc.dart +++ b/lib/presentation/chat/chat_screen/bloc/chat_bloc.dart @@ -3,9 +3,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:hive/hive.dart'; import 'package:http/http.dart' as http; +import 'package:intl/intl.dart'; import 'dart:convert'; import '/core/app_export.dart'; import 'package:eatvio_app/presentation/chat/chat_screen/models/chat_model.dart'; +import 'package:eatvio_app/presentation/chat/chat_screen/models/chat_message_model.dart'; part 'chat_event.dart'; part 'chat_state.dart'; @@ -28,7 +30,6 @@ class ChatBloc extends Bloc { ); } final String? chatID = state.chatModelObj?.chatID; - print(chatID); final response = await http.get( Uri.parse(dotenv.env['SERVER_ROOT']! + '/chat/show/$chatID'), headers: { @@ -37,13 +38,17 @@ class ChatBloc extends Bloc { ); if (response.statusCode == 200) { final data = jsonDecode(response.body); - print(data); - if (data is Map && data.containsKey('chatRooms')) { + if (data is Map && + data.containsKey('chatRoom') && + data['chatRoom'].containsKey('messages')) { if (state is ChatLoadedState) { var currentState = state as ChatLoadedState; - emit(currentState.copyWith()); + emit(currentState.copyWith( + chatModelObj: currentState.chatModelObj, + messages: currentState.messages)); } else { - emit(ChatLoadedState()); + emit(ChatLoadedState( + messages: fillMessages(data['chatRoom']['messages']))); } } else { // Один или несколько ключевых полей отсутствуют, обрабатываем ошибку @@ -58,4 +63,18 @@ class ChatBloc extends Bloc { emit(ChatErrorState('Ошибка при получении данных о чатах: $e')); } } + + List fillMessages(List messagesJSON) { + List messages = []; + for (int i = 0; i < messagesJSON.length; i++) { + messages.add(ChatMessageModel( + id: messagesJSON[i]['id'], + data: messagesJSON[i]['data'], + mediaData: messagesJSON[i]['mediaData'] ?? [], + updatedAt: messagesJSON[i]['updated_at'], + authorId: messagesJSON[i]['author_id'])); + } + + return messages; + } } diff --git a/lib/presentation/chat/chat_screen/bloc/chat_state.dart b/lib/presentation/chat/chat_screen/bloc/chat_state.dart index aae133dc..6f5718d1 100644 --- a/lib/presentation/chat/chat_screen/bloc/chat_state.dart +++ b/lib/presentation/chat/chat_screen/bloc/chat_state.dart @@ -22,26 +22,18 @@ class ChatState extends Equatable { } class ChatLoadedState extends ChatState { - ChatLoadedState({ - this.selectedDropDownValue, - this.chatModelObj, - }); - - SelectionPopupModel? selectedDropDownValue; + ChatLoadedState({this.chatModelObj, this.messages}); ChatModel? chatModelObj; + List? messages; @override - List get props => [ - selectedDropDownValue, - chatModelObj, - ]; - ChatState copyWith({ - SelectionPopupModel? selectedDropDownValue, - ChatModel? chatModelObj, - }) { - return ChatState( + List get props => [chatModelObj, messages]; + ChatLoadedState copyWith( + {ChatModel? chatModelObj, List? messages}) { + return ChatLoadedState( chatModelObj: chatModelObj ?? this.chatModelObj, + messages: messages ?? this.messages, ); } } diff --git a/lib/presentation/chat/chat_screen/chat_screen.dart b/lib/presentation/chat/chat_screen/chat_screen.dart index 0a7e8c29..37c3df52 100644 --- a/lib/presentation/chat/chat_screen/chat_screen.dart +++ b/lib/presentation/chat/chat_screen/chat_screen.dart @@ -13,7 +13,6 @@ class ChatScreen extends StatelessWidget { const ChatScreen({Key? key}) : super(key: key); static Widget builder(BuildContext context) { final chatID = ModalRoute.of(context)!.settings.arguments; - print(chatID.toString()); return BlocProvider( create: (context) => ChatBloc( ChatState(chatModelObj: ChatModel(chatID: chatID.toString()))) diff --git a/lib/presentation/chat/chat_screen/models/chat_message_model.dart b/lib/presentation/chat/chat_screen/models/chat_message_model.dart new file mode 100644 index 00000000..e91596f3 --- /dev/null +++ b/lib/presentation/chat/chat_screen/models/chat_message_model.dart @@ -0,0 +1,36 @@ +import 'package:equatable/equatable.dart'; + +class ChatMessageModel extends Equatable { + final int id; + final String data; + final List mediaData; + final int authorId; + final String updatedAt; + + ChatMessageModel({ + required this.id, + required this.data, + required this.mediaData, + required this.authorId, + required this.updatedAt, + }); + + ChatMessageModel copyWith({ + int? id, + String? data, + List? mediaData, + int? authorId, + String? updatedAt, + }) { + return ChatMessageModel( + id: id ?? this.id, + data: data ?? this.data, + mediaData: mediaData ?? this.mediaData, + authorId: authorId ?? this.authorId, + updatedAt: updatedAt ?? this.updatedAt, + ); + } + + @override + List get props => [id, data, mediaData, authorId, updatedAt]; +}