forked from eatvio/eatvio_app
feat(chat): Messages list fill, message model
This commit is contained in:
@@ -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<ChatEvent, ChatState> {
|
||||
);
|
||||
}
|
||||
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<ChatEvent, ChatState> {
|
||||
);
|
||||
if (response.statusCode == 200) {
|
||||
final data = jsonDecode(response.body);
|
||||
print(data);
|
||||
if (data is Map<String, dynamic> && data.containsKey('chatRooms')) {
|
||||
if (data is Map<String, dynamic> &&
|
||||
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<ChatEvent, ChatState> {
|
||||
emit(ChatErrorState('Ошибка при получении данных о чатах: $e'));
|
||||
}
|
||||
}
|
||||
|
||||
List<ChatMessageModel> fillMessages(List<dynamic> messagesJSON) {
|
||||
List<ChatMessageModel> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<ChatMessageModel>? messages;
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
selectedDropDownValue,
|
||||
chatModelObj,
|
||||
];
|
||||
ChatState copyWith({
|
||||
SelectionPopupModel? selectedDropDownValue,
|
||||
ChatModel? chatModelObj,
|
||||
}) {
|
||||
return ChatState(
|
||||
List<Object?> get props => [chatModelObj, messages];
|
||||
ChatLoadedState copyWith(
|
||||
{ChatModel? chatModelObj, List<ChatMessageModel>? messages}) {
|
||||
return ChatLoadedState(
|
||||
chatModelObj: chatModelObj ?? this.chatModelObj,
|
||||
messages: messages ?? this.messages,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<ChatBloc>(
|
||||
create: (context) => ChatBloc(
|
||||
ChatState(chatModelObj: ChatModel(chatID: chatID.toString())))
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
|
||||
class ChatMessageModel extends Equatable {
|
||||
final int id;
|
||||
final String data;
|
||||
final List<dynamic> 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<dynamic>? 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<Object?> get props => [id, data, mediaData, authorId, updatedAt];
|
||||
}
|
||||
Reference in New Issue
Block a user