flutter-freaccess-hub/lib/pages/home_page/home_page_bloc.dart

95 lines
2.9 KiB
Dart

// 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<HomePageEvent, HomePageState> {
HomePageBloc() : super(HomePageInitial()) {
on<LoadData>(_onLoadData);
on<ToggleGrid>(_onToggleGrid);
}
Future<void> _onLoadData(LoadData event, Emitter<HomePageState> 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<void> _onToggleGrid(
ToggleGrid event, Emitter<HomePageState> emit) async {
if (state is HomePageLoaded) {
final currentState = state as HomePageLoaded;
emit(const HomePageLoaded());
}
}
Future<void> _checkLocal() async {
try {
final response = await PhpGroup.getLocalsCall.call(
devUUID: AppState().devUUID,
userUUID: AppState().userUUID,
);
List<dynamic> 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<void> _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());
});
}
}