// home_page_bloc.dart import 'package:bloc/bloc.dart'; import 'package:flutter/material.dart'; import 'package:hub/app_state.dart'; import 'package:hub/backend/api_requests/api_calls.dart'; import 'package:hub/components/organism_components/bottom_arrow_linked_locals_component/bottom_arrow_linked_locals_component_widget.dart'; import 'package:hub/shared/utils/dialog_util.dart'; import 'home_page_event.dart'; import 'home_page_state.dart'; class HomePageBloc extends Bloc { HomePageBloc() : super(HomePageInitial()) { on(_onLoadData); on(_onToggleGrid); } Future _onLoadData(LoadData event, Emitter emit) async { emit(HomePageLoading()); try { final response = await PhpGroup.getDadosCall.call( devUUID: AppState().devUUID, userUUID: AppState().userUUID, cliUUID: AppState().cliUUID, atividade: 'getDados', ); if (response.statusCode == 200) { final error = response.jsonBody['error']; final errorMsg = response.jsonBody['error_msg']; if (error == false) { AppState().whatsapp = response.jsonBody['whatsapp']; AppState().provisional = response.jsonBody['provisional']; AppState().name = response.jsonBody['visitado']['VDO_NOME']; emit(HomePageLoaded()); } else { await DialogUtil.warningDefault(AppState().context!) .whenComplete(() => _checkLocal()); } } else { await DialogUtil.warningDefault(AppState().context!) .whenComplete(() => _checkLocal()); } } catch (e) { emit(HomePageError(message: 'Error in checkData: $e')); } } Future _onToggleGrid( ToggleGrid event, Emitter emit) async { if (state is HomePageLoaded) { final currentState = state as HomePageLoaded; emit(const HomePageLoaded()); } } Future _checkLocal() async { try { final response = await PhpGroup.getLocalsCall.call( devUUID: AppState().devUUID, userUUID: AppState().userUUID, ); List locals = response.jsonBody['locais'] ?? []; final activeLocals = locals.where((local) => local['CLU_STATUS'] == 'A').toList(); if (activeLocals.isEmpty || AppState().cliUUID.isEmpty) { await _showBottomSheet(); } else { add(LoadData()); } } catch (e) { await _showBottomSheet(); } } Future _showBottomSheet() async { await showModalBottomSheet( isScrollControlled: true, backgroundColor: Colors.transparent, enableDrag: false, isDismissible: false, context: AppState().context!, builder: (context) => Padding( padding: MediaQuery.viewInsetsOf(context), child: const BottomArrowLinkedLocalsComponentWidget(), ), ).then((_) async { add(LoadData()); }); } }