//import 'package:eatvio_app/old/auth/auth_screen/auth_screen.dart'; import 'dart:async'; import 'dart:convert'; import 'package:eatvio_app/app_router.dart'; import 'package:eatvio_app/core/const.dart'; import 'package:eatvio_app/core/token_storage.dart'; import 'package:eatvio_app/old/users/subscribers_screen/models/subscribers_model.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:go_router/go_router.dart'; import 'package:http/http.dart' as http; part 'subscribers_event.dart'; part 'subscribers_state.dart'; /// A bloc that manages the state of a Subscribers according to the event that is dispatched to it. class SubscribersBloc extends Bloc { SubscribersBloc(SubscribersState initialState) : super(initialState) { on(_onInitialize); } Future _onInitialize( SubscribersInitialEvent event, Emitter emit, ) async { try { if (!await TokenStorage.haveTokenInStorage()) { AppRouter.navigatorKey.currentContext?.goNamed('authScreen'); } final response = await http.get( Uri.parse(baseUrl + '/api/profile/subscribers'), headers: { 'Authorization': 'Bearer ${await TokenStorage.getTokenFromStorage()}', }, ); if (response.statusCode == 200) { final data = jsonDecode(response.body); if (data is List) { if (state is SubscribersLoadedState) { var currentState = state as SubscribersLoadedState; emit((currentState).copyWith( subscribers: data, myProfileModelObj: currentState.myProfileModelObj, ),); } else { emit(SubscribersLoadedState( subscribers: data, ),); } } else { // Один или несколько ключевых полей отсутствуют, обрабатываем ошибку emit(SubscribersErrorState('Неверный формат ответа API.')); } } else { // Статус ответа не равен 200, обрабатываем ошибку emit(SubscribersErrorState('Ошибка сервера: ${response.statusCode}')); } } catch (e) { // Ошибка при декодировании JSON или другая ошибка выполнения emit(SubscribersErrorState('Ошибка при получении данных ленты: $e')); } } }