Data transfer and state control

This commit is contained in:
2024-05-07 11:22:17 +03:00
parent 150e6dc1f9
commit d9956ed549
4 changed files with 35 additions and 67 deletions

View File

@@ -27,16 +27,16 @@ class ChatBloc extends Bloc<ChatEvent, ChatState> {
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<String, dynamic> && data.containsKey('chatRooms')) {
if (state is ChatLoadedState) {
var currentState = state as ChatLoadedState;

View File

@@ -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<ChatBloc>(
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<ChatBloc, ChatState>(
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

View File

@@ -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<Object?> get props => [];
List<Object?> get props => [chatID];
}

View File

@@ -59,7 +59,6 @@ class ChatSelectBloc extends Bloc<ChatSelectEvent, ChatSelectState> {
);
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
print(data['chatRooms']);
if (data is Map<String, dynamic> && data.containsKey('chatRooms')) {
if (state is ChatSelectLoadedState) {
var currentState = state as ChatSelectLoadedState;