//import 'package:eatvio_app/presentation/auth/auth_screen/auth_screen.dart'; import 'dart:async'; import 'package:equatable/equatable.dart'; import 'package:flutter/material.dart'; import '/core/app_export.dart'; import 'package:eatvio_app/presentation/feed/feed_screen/models/feed_model.dart'; import 'package:http/http.dart' as http; import 'dart:convert'; import 'package:hive/hive.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:image_picker/image_picker.dart'; part 'feed_event.dart'; part 'feed_state.dart'; /// A bloc that manages the state of a Feed according to the event that is dispatched to it. class FeedBloc extends Bloc { FeedBloc(FeedState initialState) : super(initialState) { on(_onInitialize); } Future _onInitialize( FeedInitialEvent event, Emitter emit, ) async { try { final box = await Hive.openBox('token'); final token = box.get('token'); if (token == null) { NavigatorService.popAndPushNamed( AppRoutes.authScreen, ); // Если токен есть, запускаем приложение } final response = await http.get( Uri.parse(dotenv.env['SERVER_ROOT']! + '/feed/index'), ); print('Got response'); if (response.statusCode == 200) { print('Got 200'); final data = jsonDecode(response.body); if (data is List) { print('Got List'); if (state is FeedLoadedState) { print('Got loaded'); var currentState = state as FeedLoadedState; emit((currentState).copyWith( posts: data, myProfileModelObj: currentState.myProfileModelObj, )); } else { print('Got unloaded'); emit(FeedLoadedState( posts: data, )); } } else { // Один или несколько ключевых полей отсутствуют, обрабатываем ошибку emit(FeedErrorState('Неверный формат ответа API.')); } } else { // Статус ответа не равен 200, обрабатываем ошибку emit(FeedErrorState('Ошибка сервера: ${response.statusCode}')); } } catch (e) { // Ошибка при декодировании JSON или другая ошибка выполнения emit(FeedErrorState('Ошибка при получении данных ленты: $e')); } } }