From d9956ed549755028f0577b699dd80e1bc71f2a9d Mon Sep 17 00:00:00 2001 From: maxxkim Date: Tue, 7 May 2024 11:22:17 +0300 Subject: [PATCH] Data transfer and state control --- .../chat/chat_screen/bloc/chat_bloc.dart | 6 +- .../chat/chat_screen/chat_screen.dart | 86 ++++++------------- .../chat/chat_screen/models/chat_model.dart | 9 +- .../bloc/chat_select_bloc.dart | 1 - 4 files changed, 35 insertions(+), 67 deletions(-) diff --git a/lib/presentation/chat/chat_screen/bloc/chat_bloc.dart b/lib/presentation/chat/chat_screen/bloc/chat_bloc.dart index 0f4a2add..bc91ba8d 100644 --- a/lib/presentation/chat/chat_screen/bloc/chat_bloc.dart +++ b/lib/presentation/chat/chat_screen/bloc/chat_bloc.dart @@ -27,16 +27,16 @@ class ChatBloc extends Bloc { AppRoutes.authScreen, ); } - final int id = 1; + final String? id = state.chatModelObj?.chatID; final response = await http.get( - Uri.parse(dotenv.env['SERVER_ROOT']! + '/chat/$id/show'), + Uri.parse(dotenv.env['SERVER_ROOT']! + '/chat/show/$id'), headers: { 'Authorization': 'Bearer $token', }, ); if (response.statusCode == 200) { final data = jsonDecode(response.body); - print(data['chatRooms']); + print(data); if (data is Map && data.containsKey('chatRooms')) { if (state is ChatLoadedState) { var currentState = state as ChatLoadedState; diff --git a/lib/presentation/chat/chat_screen/chat_screen.dart b/lib/presentation/chat/chat_screen/chat_screen.dart index 6fa4071a..28c42e27 100644 --- a/lib/presentation/chat/chat_screen/chat_screen.dart +++ b/lib/presentation/chat/chat_screen/chat_screen.dart @@ -12,14 +12,37 @@ import 'package:eatvio_app/widgets/custom_text_form_field.dart'; class ChatScreen extends StatelessWidget { const ChatScreen({Key? key}) : super(key: key); static Widget builder(BuildContext context) { + final String chatID = ModalRoute.of(context)!.settings.arguments as String; return BlocProvider( - create: (context) => ChatBloc(ChatState(chatModelObj: ChatModel())) - ..add(ChatInitialEvent()), + create: (context) => + ChatBloc(ChatState(chatModelObj: ChatModel(chatID: chatID))) + ..add(ChatInitialEvent()), child: ChatScreen()); } - @override Widget build(BuildContext context) { + return BlocBuilder( + builder: (context, state) { + if (state is ChatInitialState) { + // Это начальное состояние, данные ещё не загружены. + return Container( + color: Colors.white, + ); + } else if (state is ChatLoadedState) { + // Данные загружены, можно строить экран. + return _buildChat(context, state); + } else if (state is ChatErrorState) { + // Произошла ошибка при загрузке данных. + return Center(child: Text(state.errorMessage)); + } else { + // Другие состояния, если они есть. + return Container(); // Пустой контейнер для необработанных состояний. + } + }, + ); + } + + _buildChat(BuildContext context, ChatLoadedState state) { mediaQueryData = MediaQuery.of(context); return Scaffold( resizeToAvoidBottomInset: false, @@ -51,9 +74,7 @@ class ChatScreen extends StatelessWidget { top: 18.v, bottom: 25.v, ), - onTap: () { - onTapArrowleftone(context); - }, + onTap: () => onTapArrowleftone(context), ), title: Padding( padding: EdgeInsets.only(left: 12.h), @@ -139,59 +160,6 @@ class ChatScreen extends StatelessWidget { ); } - /// Common widget - Widget _buildColumncheckmark( - BuildContext context, { - required String imageOne, - required String time, - }) { - return Container( - padding: EdgeInsets.all(9.h), - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage(ImageConstant.imageNotFound), - fit: BoxFit.cover, - ), - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - CustomImageView( - imagePath: imageOne, - height: 186.v, - width: 254.h, - radius: BorderRadius.circular( - 8.h, - ), - margin: EdgeInsets.only(right: 1.h), - ), - SizedBox(height: 10.v), - Row( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - time, - style: theme.textTheme.bodySmall!.copyWith( - color: appTheme.blueA400, - ), - ), - CustomImageView( - imagePath: ImageConstant.imageNotFound, - height: 7.v, - width: 14.h, - margin: EdgeInsets.only( - left: 3.h, - bottom: 4.v, - ), - ) - ], - ) - ], - ), - ); - } - /// Common widget ///Handling route based on bottom click actions diff --git a/lib/presentation/chat/chat_screen/models/chat_model.dart b/lib/presentation/chat/chat_screen/models/chat_model.dart index 0e74b3ee..4c6e566b 100644 --- a/lib/presentation/chat/chat_screen/models/chat_model.dart +++ b/lib/presentation/chat/chat_screen/models/chat_model.dart @@ -5,12 +5,13 @@ import 'package:equatable/equatable.dart'; /// This class defines the variables used in the [chat_screen], /// and is typically used to hold data that is passed between different parts of the application. class ChatModel extends Equatable { - ChatModel(); + String? chatID; + ChatModel({String? chatID}); - ChatModel copyWith() { - return ChatModel(); + ChatModel copyWith(String chatID) { + return ChatModel(chatID: chatID); } @override - List get props => []; + List get props => [chatID]; } diff --git a/lib/presentation/chat/chat_select_screen/bloc/chat_select_bloc.dart b/lib/presentation/chat/chat_select_screen/bloc/chat_select_bloc.dart index 740dbab7..f543c5aa 100644 --- a/lib/presentation/chat/chat_select_screen/bloc/chat_select_bloc.dart +++ b/lib/presentation/chat/chat_select_screen/bloc/chat_select_bloc.dart @@ -59,7 +59,6 @@ class ChatSelectBloc extends Bloc { ); if (response.statusCode == 200) { final data = jsonDecode(response.body); - print(data['chatRooms']); if (data is Map && data.containsKey('chatRooms')) { if (state is ChatSelectLoadedState) { var currentState = state as ChatSelectLoadedState;