Multiple states for chatRoom select

This commit is contained in:
2024-04-25 14:13:52 +03:00
parent 6db3caf969
commit f5ac02c020
4 changed files with 120 additions and 92 deletions

View File

@@ -62,12 +62,17 @@ class ChatSelectBloc extends Bloc<ChatSelectEvent, ChatSelectState> {
);
if (response.statusCode == 200) {
final data = jsonDecode(response.body);
if (data is Map<String, dynamic>) {
if (data is Map<String, dynamic> && data.containsKey('chatRooms')) {
if (state is ChatSelectLoadedState) {
var currentState = state as ChatSelectLoadedState;
emit(currentState.copyWith());
emit(currentState.copyWith(
chatSelectModelObj: currentState.chatSelectModelObj,
chatRooms: currentState.chatRooms,
));
} else {
emit(ChatSelectLoadedState());
emit(ChatSelectLoadedState(
chatRooms: data['chatRooms'],
));
}
} else {
// Один или несколько ключевых полей отсутствуют, обрабатываем ошибку
@@ -80,7 +85,7 @@ class ChatSelectBloc extends Bloc<ChatSelectEvent, ChatSelectState> {
}
} catch (e) {
// Ошибка при декодировании JSON или другая ошибка выполнения
emit(ChatSelectErrorState('Ошибка при получении данных профиля: $e'));
emit(ChatSelectErrorState('Ошибка при получении данных о чатах: $e'));
}
}
}

View File

@@ -11,33 +11,39 @@ class ChatSelectState extends Equatable {
ChatSelectModel? chatSelectModelObj;
@override
List<Object?> get props => [
chatSelectModelObj,
];
ChatSelectState copyWith({
ChatSelectModel? chatSelectModelObj,
}) {
List<Object?> get props => [chatSelectModelObj];
ChatSelectState copyWith({ChatSelectModel? chatSelectModelObj}) {
return ChatSelectState(
chatSelectModelObj: chatSelectModelObj ?? this.chatSelectModelObj,
);
}
}
class ChatSelectInitialState extends ChatSelectState {
ChatSelectInitialState({required ChatSelectModel chatSelectModelObj})
: super(chatSelectModelObj: chatSelectModelObj);
}
class ChatSelectLoadedState extends ChatSelectState {
ChatSelectLoadedState({
this.chatRooms,
this.searchController,
this.chatSelectModelObj,
}) : super(chatSelectModelObj: null);
List<dynamic>? chatRooms;
TextEditingController? searchController;
ChatSelectModel? chatSelectModelObj;
@override
List<Object?> get props => [
chatSelectModelObj,
];
List<Object?> get props => [chatSelectModelObj, chatRooms, searchController];
ChatSelectLoadedState copyWith({
ChatSelectModel? chatSelectModelObj,
TextEditingController? searchController,
List<dynamic>? chatRooms,
}) {
return ChatSelectLoadedState(
chatSelectModelObj: chatSelectModelObj ?? this.chatSelectModelObj,
chatRooms: chatRooms ?? this.chatRooms,
searchController: searchController ?? this.searchController,
);
}
}