fix: nav and local selection

This commit is contained in:
J. A. Messias 2024-11-11 13:46:42 -03:00
parent 82b716a0e6
commit 77397e0f92
4 changed files with 52 additions and 29 deletions

View File

@ -14,7 +14,8 @@ import '/backend/api_requests/api_calls.dart';
import '/flutter_flow/flutter_flow_theme.dart'; import '/flutter_flow/flutter_flow_theme.dart';
class BottomArrowLinkedLocalsComponentWidget extends StatefulWidget { class BottomArrowLinkedLocalsComponentWidget extends StatefulWidget {
const BottomArrowLinkedLocalsComponentWidget({super.key}); const BottomArrowLinkedLocalsComponentWidget({super.key, required this.response});
final ApiCallResponse? response;
@override @override
State<BottomArrowLinkedLocalsComponentWidget> createState() => _BottomArrowLinkedLocalsComponentWidgetState(); State<BottomArrowLinkedLocalsComponentWidget> createState() => _BottomArrowLinkedLocalsComponentWidgetState();
@ -71,16 +72,15 @@ class _BottomArrowLinkedLocalsComponentWidgetState extends State<BottomArrowLink
Future<ApiCallResponse?> _fetchLocals() async { Future<ApiCallResponse?> _fetchLocals() async {
try { try {
setState(() => _loading = true); setState(() => _loading = true);
var response = await PhpGroup.getLocalsCall.call(); final bool isError = widget.response?.jsonBody['error'];
final bool isError = response.jsonBody['error'];
if (isError) { if (isError) {
final String errorMsg = response.jsonBody['error_msg']; final String errorMsg = widget.response?.jsonBody['error_msg'];
_handleError(context, errorMsg); _handleError(context, errorMsg);
return response; return widget.response;
} }
final List<dynamic> locals = response.jsonBody['locais'] ?? []; final List<dynamic> locals = widget.response?.jsonBody['locais'] ?? [];
final bool isEmpty = locals.isEmpty; final bool isEmpty = locals.isEmpty;
final bool isUnique = locals.length == 1; final bool isUnique = locals.length == 1;
@ -99,7 +99,7 @@ class _BottomArrowLinkedLocalsComponentWidgetState extends State<BottomArrowLink
if (isDisabled) { if (isDisabled) {
context.go('/receptionPage'); context.go('/receptionPage');
return response; return widget.response;
} }
if (isEnabled) { if (isEnabled) {
final local = locals[0]; final local = locals[0];
@ -109,10 +109,10 @@ class _BottomArrowLinkedLocalsComponentWidgetState extends State<BottomArrowLink
await StorageHelper().set(SQLiteStorageKey.ownerUUID.value, local['CLU_OWNER_ID'], Storage.SQLiteStorage); await StorageHelper().set(SQLiteStorageKey.ownerUUID.value, local['CLU_OWNER_ID'], Storage.SQLiteStorage);
context.pop(); context.pop();
return response; return widget.response;
} }
return response; return widget.response;
} }
_showNoMoreDataSnackBar(context); _showNoMoreDataSnackBar(context);
setState(() { setState(() {

View File

@ -39,9 +39,11 @@ class _LocalProfileComponentWidgetState extends State<LocalProfileComponentWidge
WidgetsBinding.instance.addPostFrameCallback((_) async{ WidgetsBinding.instance.addPostFrameCallback((_) async{
final String? cliUUID = await StorageHelper().get(SQLiteStorageKey.clientUUID.value, Storage.SQLiteStorage); final String? cliUUID = await StorageHelper().get(SQLiteStorageKey.clientUUID.value, Storage.SQLiteStorage);
if(cliUUID == null || cliUUID.isEmpty) { bool initialized = false;
if(cliUUID == null || cliUUID.isEmpty && !initialized)
initialized = true;
await LocalizationService.processLocals(context).then((value) => value == true ? onUpdate() : null); await LocalizationService.processLocals(context).then((value) => value == true ? onUpdate() : null);
}
}); });
} }
@ -96,8 +98,8 @@ class _LocalProfileComponentWidgetState extends State<LocalProfileComponentWidge
hoverColor: Colors.transparent, hoverColor: Colors.transparent,
highlightColor: Colors.transparent, highlightColor: Colors.transparent,
onTap: () async { onTap: () async {
await LocalizationService.selectLocal(context) await StorageHelper().set(SQLiteStorageKey.clientUUID.value, '', Storage.SQLiteStorage);
.then((value) => value == true ? onUpdate() : null); await LocalizationService.processLocals(context).then((value) => value == true ? onUpdate() : null);
}, },
child: ClipRRect( child: ClipRRect(
borderRadius: BorderRadius.circular(200.0), borderRadius: BorderRadius.circular(200.0),

View File

@ -278,10 +278,11 @@ class _AppState extends State<App> with WidgetsBindingObserver {
@override @override
void didChangeAppLifecycleState(AppLifecycleState state) async { void didChangeAppLifecycleState(AppLifecycleState state) async {
if (state == AppLifecycleState.detached) { if (state == AppLifecycleState.detached) {
await LocalizationService.processLocals(context); await LocalizationService.processLocals(context);
FirebaseMessagingService().updateDeviceToken(); FirebaseMessagingService().updateDeviceToken();
} }
} }
@override @override

View File

@ -3,6 +3,8 @@
import 'dart:developer'; import 'dart:developer';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/src/response.dart';
import 'package:hub/backend/api_requests/api_manager.dart';
import 'package:hub/flutter_flow/nav/nav.dart'; import 'package:hub/flutter_flow/nav/nav.dart';
import 'package:hub/shared/helpers/base_storage.dart'; import 'package:hub/shared/helpers/base_storage.dart';
import 'package:hub/shared/helpers/storage_helper.dart'; import 'package:hub/shared/helpers/storage_helper.dart';
@ -27,12 +29,12 @@ class LocalizationService {
_handleError(context, response.jsonBody['error_msg']); _handleError(context, response.jsonBody['error_msg']);
return; return;
} }
if (isError == null) { if (response.jsonBody == null) {
final String errorMsg = FFLocalizations.of(context).getVariableText( final String errorMsg = FFLocalizations.of(context).getVariableText(
enText: 'Verify your connection', enText: 'Verify your connection',
ptText: 'Verifique sua conexão', ptText: 'Verifique sua conexão',
); );
DialogUtil.error(context, errorMsg).whenComplete(() => selectLocal(context)); DialogUtil.error(context, errorMsg).whenComplete(() => selectLocal(context, response));
return; return;
} }
@ -58,13 +60,22 @@ class LocalizationService {
try { try {
final GetLocalsCall callback = PhpGroup.getLocalsCall; final GetLocalsCall callback = PhpGroup.getLocalsCall;
final ApiCallResponse response = await callback.call(); final ApiCallResponse response = await callback.call();
final bool isError = response.jsonBody['error']; final bool? isError = response.jsonBody['error'];
if (isError) { if (isError == true) {
final String errorMsg = response.jsonBody['error_msg']; final String errorMsg = response.jsonBody['error_msg'];
_handleError(context, errorMsg); _handleError(context, errorMsg);
return false; return false;
} }
if (response.jsonBody == null) {
final String errorMsg = FFLocalizations.of(context).getVariableText(
enText: 'Verify your connection',
ptText: 'Verifique sua conexão',
);
DialogUtil.error(context, errorMsg).whenComplete(() => selectLocal(context, response));
return false;
}
final List<dynamic> locals = response.jsonBody['locais'].toList() ?? []; final List<dynamic> locals = response.jsonBody['locais'].toList() ?? [];
_logLocalsStatus(locals); _logLocalsStatus(locals);
@ -90,7 +101,7 @@ class LocalizationService {
return await _handleEnabled(context, locals[0]); return await _handleEnabled(context, locals[0]);
} else if (isUnselected) { } else if (isUnselected) {
log('() => isUnselected'); log('() => isUnselected');
return await selectLocal(context); return await selectLocal(context, response);
} else if (isSelected) { } else if (isSelected) {
log('() => isSelected'); log('() => isSelected');
return await processData(context); return await processData(context);
@ -103,7 +114,7 @@ class LocalizationService {
if (!isUnique && isPending) log('() => not unique and pending'); if (!isUnique && isPending) log('() => not unique and pending');
if (!isUnique && isBlocked) log('() => not unique and blocked'); if (!isUnique && isBlocked) log('() => not unique and blocked');
log('() => else'); log('() => else');
return await selectLocal(context); return await selectLocal(context, response);
} }
} catch (e, s) { } catch (e, s) {
log('() => stack: $s'); log('() => stack: $s');
@ -113,7 +124,7 @@ class LocalizationService {
enText: 'Error getting locals, verify your connection', enText: 'Error getting locals, verify your connection',
ptText: 'Erro ao obter locais, verifique sua conexão', ptText: 'Erro ao obter locais, verifique sua conexão',
); );
DialogUtil.error(context, errorMsg).whenComplete(() => selectLocal(context)); DialogUtil.error(context, errorMsg).whenComplete(() => selectLocal(context, null));
return false; return false;
} }
} }
@ -122,13 +133,22 @@ class LocalizationService {
try { try {
final GetDadosCall callback = PhpGroup.getDadosCall; final GetDadosCall callback = PhpGroup.getDadosCall;
var response = await callback.call(); var response = await callback.call();
final bool error = response.jsonBody['error']; final bool? isError = response.jsonBody['error'];
if (error == true || error == 'true') { if (isError == true || isError == 'true') {
final String errorMsg = response.jsonBody['error_msg']; final String errorMsg = response.jsonBody['error_msg'];
DialogUtil.error(context, errorMsg).whenComplete(() => selectLocal(context)); DialogUtil.error(context, errorMsg).whenComplete(() => selectLocal(context, response));
return false; return false;
} else { }
else if (response.jsonBody == null) {
final String errorMsg = FFLocalizations.of(context).getVariableText(
enText: 'Verify your connection',
ptText: 'Verifique sua conexão',
);
DialogUtil.error(context, errorMsg).whenComplete(() => selectLocal(context, response));
return false ;
}
else {
await _updateStorageUtil(response.jsonBody); await _updateStorageUtil(response.jsonBody);
return true; return true;
} }
@ -139,12 +159,12 @@ class LocalizationService {
enText: 'Error getting data, verify your connection', enText: 'Error getting data, verify your connection',
ptText: 'Erro ao obter dados, verifique sua conexão', ptText: 'Erro ao obter dados, verifique sua conexão',
); );
DialogUtil.error(context, errorMsg).whenComplete(() => selectLocal(context)); DialogUtil.error(context, errorMsg).whenComplete(() => selectLocal(context, null));
return false; return false;
} }
} }
static Future<bool> selectLocal(BuildContext context) async { static Future<bool> selectLocal(BuildContext context, ApiCallResponse? response) async {
return await showModalBottomSheet( return await showModalBottomSheet(
isScrollControlled: true, isScrollControlled: true,
backgroundColor: Colors.transparent, backgroundColor: Colors.transparent,
@ -157,7 +177,7 @@ class LocalizationService {
canPop: false, canPop: false,
child: Padding( child: Padding(
padding: MediaQuery.viewInsetsOf(context), padding: MediaQuery.viewInsetsOf(context),
child: const BottomArrowLinkedLocalsComponentWidget(), child: BottomArrowLinkedLocalsComponentWidget(response: response),
), ),
), ),
).then((_) async => await processData(context)); ).then((_) async => await processData(context));
@ -230,7 +250,7 @@ class LocalizationService {
await DialogUtil.warning(context, errorMsg); await DialogUtil.warning(context, errorMsg);
return; return;
} }
await DialogUtil.error(context, errorMsg).whenComplete(() async => await selectLocal(context)); await DialogUtil.error(context, errorMsg).whenComplete(() async => await selectLocal(context, null));
} }
static Future<bool> _handleUnavailable(BuildContext context, List<dynamic> locals) async { static Future<bool> _handleUnavailable(BuildContext context, List<dynamic> locals) async {