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 { ChatBloc(ChatState initialState) : super(initialState) { on(_onInitialize); } _onInitialize( ChatInitialEvent event, Emitter 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 && 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')); } } }