diff --git a/lib/actions/actions.dart b/lib/actions/actions.dart index 1d454af9..a2b47feb 100644 --- a/lib/actions/actions.dart +++ b/lib/actions/actions.dart @@ -373,47 +373,54 @@ Future checkLocals({ required HomePageModel model, required void Function(void Function()) safeSetState, }) async { - // A chamada para a API permanece a mesma, assumindo que é necessária sempre. - final response = await PhpGroup.getLocalsCall.call( - devUUID: AppState().devUUID, - userUUID: AppState().userUUID, - ); + bool itemFound = false; + var modalResult; - // Verificação rápida de erro para evitar processamento desnecessário. - if (response.jsonBody['error']) { - return false; - } - - // Uso eficiente de coleções para verificar a condição desejada. - final String uuid = cliUUID ?? AppState().cliUUID; - final bool itemFound = response.jsonBody['locais'].any( - (local) => local['CLI_ID'] == uuid && local['CLU_STATUS'] == "A", - ); - - // Log e retorno condicional baseado no resultado da busca. - if (itemFound) { - return true; - } else { - // A chamada para showModalBottomSheet permanece, mas a atualização da UI é otimizada. - await showModalBottomSheet( - isScrollControlled: true, - backgroundColor: Colors.transparent, - enableDrag: false, - context: context, - builder: (context) => GestureDetector( - onTap: () => model.unfocusNode.canRequestFocus - ? FocusScope.of(context).requestFocus(model.unfocusNode) - : FocusScope.of(context).unfocus(), - child: Padding( - padding: MediaQuery.viewInsetsOf(context), - child: const BottomArrowLinkedLocalsComponentWidget(), - ), - ), + do { + // A chamada para a API permanece a mesma, assumindo que é necessária sempre. + final response = await PhpGroup.getLocalsCall.call( + devUUID: AppState().devUUID, + userUUID: AppState().userUUID, ); - safeSetState( - () {}); // Chamada otimizada fora do then para evitar encadeamentos desnecessários. - return false; - } + + // Verificação rápida de erro para evitar processamento desnecessário. + if (response.jsonBody['error']) { + return false; + } + + // Uso eficiente de coleções para verificar a condição desejada. + final String uuid = cliUUID ?? AppState().cliUUID; + itemFound = response.jsonBody['locais'].any( + (local) => local['CLI_ID'] == uuid && local['CLU_STATUS'] == "A", + ); + + // Log e retorno condicional baseado no resultado da busca. + if (itemFound) { + return true; + } else { + // A chamada para showModalBottomSheet permanece, mas a atualização da UI é otimizada. + modalResult = await showModalBottomSheet( + isScrollControlled: true, + backgroundColor: Colors.transparent, + enableDrag: false, + isDismissible: false, + context: context, + builder: (context) => GestureDetector( + onTap: () => model.unfocusNode.canRequestFocus + ? FocusScope.of(context).requestFocus(model.unfocusNode) + : FocusScope.of(context).unfocus(), + child: Padding( + padding: MediaQuery.viewInsetsOf(context), + child: const BottomArrowLinkedLocalsComponentWidget(), + ), + ), + ); + safeSetState( + () {}); // Chamada otimizada fora do then para evitar encadeamentos desnecessários. + } + } while (modalResult != true); + + return false; } Future answersRequest(BuildContext context, String? ref, String? task, diff --git a/lib/pages/home_page/home_page_widget.dart b/lib/pages/home_page/home_page_widget.dart index 139ac6fc..15880855 100644 --- a/lib/pages/home_page/home_page_widget.dart +++ b/lib/pages/home_page/home_page_widget.dart @@ -41,51 +41,26 @@ class _HomePageWidgetState extends State { void fetchData() async { bool success = false; while (!success) { - await PhpGroup.getDadosCall - .call( - devUUID: AppState().devUUID, - userUUID: AppState().userUUID, - cliUUID: AppState().cliUUID, - atividade: 'getDados') - .then((value) async { - switch (value.statusCode) { - case 200: - if (value.jsonBody['error'] == false) { - success = true; - AppState().whatsapp = value.jsonBody['whatsapp']; - AppState().provisional = value.jsonBody['provisional']; - } else if (value.jsonBody['error_msg'] == - 'O seu vinculo nao esta ativo.') { - success = true; - showModalBottomSheet( - isScrollControlled: true, - backgroundColor: Colors.transparent, - enableDrag: false, - isDismissible: false, - context: context, - builder: (context) { - return GestureDetector( - onTap: () => _model.unfocusNode.canRequestFocus - ? FocusScope.of(context) - .requestFocus(_model.unfocusNode) - : FocusScope.of(context).unfocus(), - child: Padding( - padding: MediaQuery.viewInsetsOf(context), - child: const BottomArrowLinkedLocalsComponentWidget(), - ), - ); - }, - ).then((value) => safeSetState(() { - success = true; - })); - } - break; - default: - await DialogUtil.warningDefault(context); - safeSetState(() {}); - break; - } - }); + final response = await PhpGroup.getDadosCall.call( + devUUID: AppState().devUUID, + userUUID: AppState().userUUID, + cliUUID: AppState().cliUUID, + atividade: 'getDados', + ); + + switch (response.statusCode) { + case 200: + if (response.jsonBody['error'] == false) { + success = true; + AppState().whatsapp = response.jsonBody['whatsapp']; + AppState().provisional = response.jsonBody['provisional']; + } + break; + default: + await DialogUtil.warningDefault(context); + safeSetState(() {}); + break; + } } }