forked from eatvio/eatvio_app
61 lines
2.2 KiB
Dart
61 lines
2.2 KiB
Dart
import 'package:equatable/equatable.dart';
|
||
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 'dart:convert';
|
||
import '/core/app_export.dart';
|
||
import 'package:eatvio_app/presentation/chat/chat_screen/models/chat_model.dart';
|
||
part 'chat_event.dart';
|
||
part 'chat_state.dart';
|
||
|
||
/// A bloc that manages the state of a Chat according to the event that is dispatched to it.
|
||
class ChatBloc extends Bloc<ChatEvent, ChatState> {
|
||
ChatBloc(ChatState initialState) : super(initialState) {
|
||
on<ChatInitialEvent>(_onInitialize);
|
||
}
|
||
|
||
_onInitialize(
|
||
ChatInitialEvent event,
|
||
Emitter<ChatState> emit,
|
||
) async {
|
||
try {
|
||
final box = await Hive.openBox('token');
|
||
final token = box.get('token');
|
||
if (token == null) {
|
||
NavigatorService.popAndPushNamed(
|
||
AppRoutes.authScreen,
|
||
);
|
||
}
|
||
final int id = 1;
|
||
final response = await http.get(
|
||
Uri.parse(dotenv.env['SERVER_ROOT']! + '/chat/$id/show'),
|
||
headers: {
|
||
'Authorization': 'Bearer $token',
|
||
},
|
||
);
|
||
if (response.statusCode == 200) {
|
||
final data = jsonDecode(response.body);
|
||
print(data['chatRooms']);
|
||
if (data is Map<String, dynamic> && data.containsKey('chatRooms')) {
|
||
if (state is ChatLoadedState) {
|
||
var currentState = state as ChatLoadedState;
|
||
emit(currentState.copyWith());
|
||
} else {
|
||
emit(ChatLoadedState());
|
||
}
|
||
} else {
|
||
// Один или несколько ключевых полей отсутствуют, обрабатываем ошибку
|
||
emit(ChatErrorState('Некоторые необходимые данные отсутствуют.'));
|
||
}
|
||
} else {
|
||
// Статус ответа не равен 200, обрабатываем ошибку
|
||
emit(ChatErrorState('Ошибка сервера: ${response.statusCode}'));
|
||
}
|
||
} catch (e) {
|
||
// Ошибка при декодировании JSON или другая ошибка выполнения
|
||
emit(ChatErrorState('Ошибка при получении данных о чатах: $e'));
|
||
}
|
||
}
|
||
}
|