From 5d5251a89cfb28b5cb0fb8005b42c9c5f528b5fc Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Wed, 6 Nov 2024 15:10:50 -0300 Subject: [PATCH] =?UTF-8?q?fix:=20velocidade=20da=20navega=C3=A7=C3=A3o=20?= =?UTF-8?q?e=20webview=20clean=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu_button_item_widget.dart | 16 +- .../menu_card_item/menu_card_item.dart | 16 +- .../fast_pass_page/fast_pass_page_widget.dart | 158 +++++++++-------- .../reservation_page_widget.dart | 161 ++++++++---------- lib/pages/test_page/test_page.dart | 62 ------- 5 files changed, 156 insertions(+), 257 deletions(-) delete mode 100644 lib/pages/test_page/test_page.dart diff --git a/lib/components/atomic_components/menu_button_item/menu_button_item_widget.dart b/lib/components/atomic_components/menu_button_item/menu_button_item_widget.dart index a95d4de8..68c1ae18 100644 --- a/lib/components/atomic_components/menu_button_item/menu_button_item_widget.dart +++ b/lib/components/atomic_components/menu_button_item/menu_button_item_widget.dart @@ -40,19 +40,9 @@ class _MenuButtonWidgetState extends State { onTap: _isProcessing ? null : () async { - setState(() { - _isProcessing = true; - }); - await LocalizationService.processLocals(context).then((value) async { - if (value) { - await widget.action.call(); - } else { - DialogUnavailable.unavailableCredentials(context); - } - }); - setState(() { - _isProcessing = false; - }); + setState(() { _isProcessing = true; }); + await widget.action.call(); + setState(() { _isProcessing = false; }); }, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 0), diff --git a/lib/components/atomic_components/menu_card_item/menu_card_item.dart b/lib/components/atomic_components/menu_card_item/menu_card_item.dart index 0bd0b0f3..f066b36d 100644 --- a/lib/components/atomic_components/menu_card_item/menu_card_item.dart +++ b/lib/components/atomic_components/menu_card_item/menu_card_item.dart @@ -40,19 +40,9 @@ class _MenuCardItemState extends State { onTap: _isProcessing ? null : () async { - setState(() { - _isProcessing = true; - }); - await LocalizationService.processLocals(context).then((value) async { - if (value) { - await widget.action.call(); - } else { - DialogUnavailable.unavailableCredentials(context); - } - }); - setState(() { - _isProcessing = false; - }); + setState(() { _isProcessing = true; }); + await widget.action.call(); + setState(() { _isProcessing = false; }); }, child: Card( elevation: 0, diff --git a/lib/pages/fast_pass_page/fast_pass_page_widget.dart b/lib/pages/fast_pass_page/fast_pass_page_widget.dart index 58906122..a8ce35df 100644 --- a/lib/pages/fast_pass_page/fast_pass_page_widget.dart +++ b/lib/pages/fast_pass_page/fast_pass_page_widget.dart @@ -23,20 +23,14 @@ class _FastPassPageWidgetState extends State { late InAppWebViewController _controllerIOS; Future> initVariables() async { - final email = (await StorageHelper().get(hub.SecureStorageKey.email.value, hub.Storage.SecureStorage)) ?? ''; - final name = - (await StorageHelper().get(hub.SQLiteStorageKey.userName.value, hub.Storage.SQLiteStorage)) ?? ''; - final devUUID = - (await StorageHelper().get(hub.SQLiteStorageKey.devUUID.value, hub.Storage.SQLiteStorage)) ?? ''; - final userUUID = - (await StorageHelper().get(hub.SQLiteStorageKey.userUUID.value, hub.Storage.SQLiteStorage)) ?? ''; - final cliUUID = - (await StorageHelper().get(hub.SQLiteStorageKey.clientUUID.value, hub.Storage.SQLiteStorage)) ?? ''; + final email = await StorageHelper().get(hub.SecureStorageKey.email.value, hub.Storage.SecureStorage) ?? ''; + final name = await StorageHelper().get(hub.SQLiteStorageKey.userName.value, hub.Storage.SQLiteStorage) ?? ''; + final devUUID = await StorageHelper().get(hub.SQLiteStorageKey.devUUID.value, hub.Storage.SQLiteStorage) ?? ''; + final userUUID = await StorageHelper().get(hub.SQLiteStorageKey.userUUID.value, hub.Storage.SQLiteStorage) ?? ''; + final cliUUID = await StorageHelper().get(hub.SQLiteStorageKey.clientUUID.value, hub.Storage.SQLiteStorage) ?? ''; const createdAt = '0000-00-00 00:00:00'; final url = 'https://hub.freaccess.com.br/hub/fast-pass/$cliUUID'; - final freUserData = - "{\"name\": \"$name\", \"email\": \"$email\",\"dev_id\": \"$devUUID\",\"created_at\":\"$createdAt\",\"updated_at\": \"0000-00-00 00:00:00\",\"status\": \"A\" }"; - + final freUserData = "{\"name\": \"$name\", \"email\": \"$email\",\"dev_id\": \"$devUUID\",\"created_at\":\"$createdAt\",\"updated_at\": \"0000-00-00 00:00:00\",\"status\": \"A\" }"; return { 'url': url, 'name': name, @@ -57,84 +51,84 @@ class _FastPassPageWidgetState extends State { future: initVariables(), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { - return Center(child: CircularProgressIndicator()); - } else if (snapshot.hasError || snapshot.hasData == false || snapshot.data!.isEmpty) { - return Center( - child: Text(FFLocalizations.of(context) - .getVariableText(enText: 'Unexpected error', ptText: 'Erro inesperado'))); - } else if (snapshot.hasData) { + return const Center(child: CircularProgressIndicator()); + } else if (snapshot.hasError || !snapshot.hasData || snapshot.data!.isEmpty) { + return Center(child: Text(FFLocalizations.of(context).getVariableText(enText: 'Unexpected error', ptText: 'Erro inesperado'))); + } else { final data = snapshot.data!; final url = data['url']!; final userUUID = data['userUUID']!; final freUserData = data['freUserData']!; - return Platform.isIOS - ? InAppWebView( - initialUrlRequest: URLRequest(url: WebUri(url)), - initialSettings: InAppWebViewSettings( - allowsBackForwardNavigationGestures: true, - javaScriptEnabled: true, - ), - onWebViewCreated: (controller) async => _controllerIOS = controller, - onLoadStop: (controller, url) async { - await controller.evaluateJavascript( - source: "window.localStorage.setItem('fre-token', '\"$userUUID\"')"); - await controller.evaluateJavascript( - source: "window.localStorage.setItem('fre-user-data', '$freUserData')"); - await controller.evaluateJavascript( - source: "window.localStorage.setItem('enableBackButton', 'true')"); - }, - onUpdateVisitedHistory: (controller, uri, isVisited) { - if (uri.toString().contains('/hub/home')) context.pop(); - }, - ) - : WebViewWidget( - controller: _controllerAndroid = WebViewController() - ..clearCache() - ..clearLocalStorage() - ..setJavaScriptMode(JavaScriptMode.unrestricted) - ..setBackgroundColor(const Color(0x00000000)) - ..setNavigationDelegate( - NavigationDelegate( - onProgress: (int progress) {}, - onPageStarted: (String url) { - final String token = "localStorage.setItem('fre-token', '\"$userUUID\"');"; - final String data = "localStorage.setItem('fre-user-data', '$freUserData');"; - const String backNavigation = "localStorage.setItem('enableBackButton', 'true');"; - - _controllerAndroid.runJavaScript(token); - _controllerAndroid.runJavaScript(data); - _controllerAndroid.runJavaScript(backNavigation); - }, - onPageFinished: (String url) { - bool isDarkMode = - SchedulerBinding.instance.platformDispatcher.platformBrightness == Brightness.dark; - - if (isDarkMode) { - _controllerAndroid.runJavaScript(WebviewUtil.jsEnableDarkMode); - } - }, - onNavigationRequest: (NavigationRequest request) { - if (request.url.startsWith('http') || - request.url.startsWith('https://api.whatsapp.com/send') || - request.url.startsWith('https://wa.me')) { - launchUrlString(request.url); - return NavigationDecision.prevent; - } - return NavigationDecision.prevent; - }, - onUrlChange: (url) { - if (url.url.toString().contains('/hub/home')) context.pop(); - }), - ) - ..loadRequest(Uri.parse(url)), - ); - } else { - return const Center(child: Text('Unexpected error')); + ? _buildIOSWebView(url, userUUID, freUserData) + : _buildAndroidWebView(url, userUUID, freUserData); } }, ), ), ); } -} + + Widget _buildIOSWebView(String url, String userUUID, String freUserData) { + return InAppWebView( + initialUrlRequest: URLRequest(url: WebUri(url)), + onLoadStart: (controller, url) {}, + initialSettings: InAppWebViewSettings( + allowsBackForwardNavigationGestures: true, + javaScriptEnabled: true, + ), + onWebViewCreated: (controller) async => _controllerIOS = controller, + onLoadStop: (controller, url) async { + await controller.evaluateJavascript(source: "window.localStorage.setItem('fre-token', '\"$userUUID\"')"); + await controller.evaluateJavascript(source: "window.localStorage.setItem('fre-user-data', '$freUserData')"); + await controller.evaluateJavascript(source: "window.localStorage.setItem('enableBackButton', 'true')"); + }, + onUpdateVisitedHistory: (controller, uri, isVisited) { + if (uri.toString().contains('/hub/home')) context.pop(); + }, + ); + } + + Widget _buildAndroidWebView(String url, String userUUID, String freUserData) { + return WebViewWidget( + controller: _controllerAndroid = WebViewController() + ..clearCache() + ..clearLocalStorage() + ..setJavaScriptMode(JavaScriptMode.unrestricted) + ..setBackgroundColor(const Color(0x00000000)) + ..setNavigationDelegate( + NavigationDelegate( + onPageStarted: (String url) { + final String token = "localStorage.setItem('fre-token', '\"$userUUID\"');"; + final String data = "localStorage.setItem('fre-user-data', '$freUserData');"; + const String backNavigation = "localStorage.setItem('enableBackButton', 'true');"; + + _controllerAndroid.runJavaScript(token); + _controllerAndroid.runJavaScript(data); + _controllerAndroid.runJavaScript(backNavigation); + }, + onPageFinished: (String url) { + bool isDarkMode = SchedulerBinding.instance.platformDispatcher.platformBrightness == Brightness.dark; + + if (isDarkMode) { + _controllerAndroid.runJavaScript(WebviewUtil.jsEnableDarkMode); + } + }, + onNavigationRequest: (NavigationRequest request) { + if (request.url.startsWith('http') || + request.url.startsWith('https://api.whatsapp.com/send') || + request.url.startsWith('https://wa.me')) { + launchUrlString(request.url); + return NavigationDecision.prevent; + } + return NavigationDecision.prevent; + }, + onUrlChange: (url) { + if (url.url.toString().contains('/hub/home')) context.pop(); + }, + ), + ) + ..loadRequest(Uri.parse(url)), + ); + } +} \ No newline at end of file diff --git a/lib/pages/reservation_page/reservation_page_widget.dart b/lib/pages/reservation_page/reservation_page_widget.dart index 246b8b48..2cc86d47 100644 --- a/lib/pages/reservation_page/reservation_page_widget.dart +++ b/lib/pages/reservation_page/reservation_page_widget.dart @@ -22,22 +22,14 @@ class _ReservationPageWidgetState extends State { late WebViewController _controllerAll; Future> initVariables() async { - final email = (await StorageHelper().get(hub.SecureStorageKey.email.value, hub.Storage.SecureStorage)) ?? ''; - final name = - (await StorageHelper().get(hub.SQLiteStorageKey.userName.value, hub.Storage.SQLiteStorage)) ?? ''; - final devUUID = - (await StorageHelper().get(hub.SQLiteStorageKey.devUUID.value, hub.Storage.SQLiteStorage)) ?? ''; - final userUUID = - (await StorageHelper().get(hub.SQLiteStorageKey.userUUID.value, hub.Storage.SQLiteStorage)) ?? ''; - final clientId = - (await StorageHelper().get(hub.SQLiteStorageKey.clientUUID.value, hub.Storage.SQLiteStorage)) ?? ''; + final email = await StorageHelper().get(hub.SecureStorageKey.email.value, hub.Storage.SecureStorage) ?? ''; + final name = await StorageHelper().get(hub.SQLiteStorageKey.userName.value, hub.Storage.SQLiteStorage) ?? ''; + final devUUID = await StorageHelper().get(hub.SQLiteStorageKey.devUUID.value, hub.Storage.SQLiteStorage) ?? ''; + final userUUID = await StorageHelper().get(hub.SQLiteStorageKey.userUUID.value, hub.Storage.SQLiteStorage) ?? ''; + final clientId = await StorageHelper().get(hub.SQLiteStorageKey.clientUUID.value, hub.Storage.SQLiteStorage) ?? ''; const createdAt = '0000-00-00 00:00:00'; - final url = 'https://hub.freaccess.com.br/hub/reservation/$clientId'; - - final freUserData = - "{\"name\": \"$name\", \"email\": \"$email\",\"dev_id\": \"$devUUID\",\"created_at\": \"0000-00-00 00:00:00\",\"updated_at\": \"0000-00-00 00:00:00\",\"status\": \"A\" }"; - + final freUserData = "{\"name\": \"$name\", \"email\": \"$email\",\"dev_id\": \"$devUUID\",\"created_at\": \"$createdAt\",\"updated_at\": \"0000-00-00 00:00:00\",\"status\": \"A\" }"; return { 'url': url, 'name': name, @@ -59,87 +51,82 @@ class _ReservationPageWidgetState extends State { builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Center(child: CircularProgressIndicator()); - } else if (snapshot.hasError || snapshot.hasData == false || snapshot.data!.isEmpty) { - return Center( - child: Text(FFLocalizations.of(context) - .getVariableText(enText: 'Unexpected error', ptText: 'Erro inesperado'))); - } else if (snapshot.hasData) { + } else if (snapshot.hasError || !snapshot.hasData || snapshot.data!.isEmpty) { + return Center(child: Text(FFLocalizations.of(context).getVariableText(enText: 'Unexpected error', ptText: 'Erro inesperado'))); + } else { final data = snapshot.data!; final url = data['url']!; final userUUID = data['userUUID']!; final freUserData = data['freUserData']!; - return Platform.isIOS - ? InAppWebView( - initialUrlRequest: URLRequest(url: WebUri(url)), - initialSettings: InAppWebViewSettings( - allowsBackForwardNavigationGestures: true, - javaScriptEnabled: true, - ), - onWebViewCreated: (controller) async {}, - onLoadStop: (controller, url) async { - await controller.evaluateJavascript( - source: "window.localStorage.setItem('fre-token', '\"$userUUID\"')"); - await controller.evaluateJavascript( - source: "window.localStorage.setItem('fre-user-data', '$freUserData')"); - await controller.evaluateJavascript( - source: "window.localStorage.setItem('enableBackButton', 'true')"); - }, - onUpdateVisitedHistory: (controller, uri, isVisited) { - if (uri.toString().contains('/hub/home')) { - context.pop(); - } - }, - ) - : WebViewWidget( - controller: _controllerAll = WebViewController() - ..clearCache() - ..clearLocalStorage() - ..setJavaScriptMode(JavaScriptMode.unrestricted) - ..setBackgroundColor(const Color(0x00000000)) - ..setNavigationDelegate( - NavigationDelegate( - onProgress: (int progress) {}, - onPageStarted: (String url) { - final String token = "localStorage.setItem('fre-token', '\"$userUUID\"');"; - final String data = "localStorage.setItem('fre-user-data', '$freUserData');"; - const String backNavigation = "localStorage.setItem('enableBackButton', 'true');"; - - _controllerAll.runJavaScript(token); - _controllerAll.runJavaScript(data); - _controllerAll.runJavaScript(backNavigation); - }, - onPageFinished: (String url) { - bool isDarkMode = - SchedulerBinding.instance.platformDispatcher.platformBrightness == Brightness.dark; - - if (isDarkMode) { - _controllerAll.runJavaScript(WebviewUtil.jsEnableDarkMode); - } - }, - onNavigationRequest: (NavigationRequest request) { - if (request.url.startsWith('http') || - request.url.startsWith('https://api.whatsapp.com/send') || - request.url.startsWith('https://wa.me')) { - launchUrlString(request.url); - return NavigationDecision.prevent; - } - return NavigationDecision.prevent; - }, - onUrlChange: (url) { - if (url.url.toString().contains('/hub/home')) { - context.pop(); - } - }), - ) - ..loadRequest(Uri.parse(url)), - ); - } else { - return const Center(child: Text('Unexpected error')); + ? _buildIOSWebView(url, userUUID, freUserData) + : _buildAndroidWebView(url, userUUID, freUserData); } }, ), ), ); } -} + + Widget _buildIOSWebView(String url, String userUUID, String freUserData) { + return InAppWebView( + initialUrlRequest: URLRequest(url: WebUri(url)), + initialSettings: InAppWebViewSettings( + allowsBackForwardNavigationGestures: true, + javaScriptEnabled: true, + ), + onWebViewCreated: (controller) async {}, + onLoadStop: (controller, url) async { + await controller.evaluateJavascript(source: "window.localStorage.setItem('fre-token', '\"$userUUID\"')"); + await controller.evaluateJavascript(source: "window.localStorage.setItem('fre-user-data', '$freUserData')"); + await controller.evaluateJavascript(source: "window.localStorage.setItem('enableBackButton', 'true')"); + }, + onUpdateVisitedHistory: (controller, uri, isVisited) { + if (uri.toString().contains('/hub/home')) context.pop(); + }, + ); + } + + Widget _buildAndroidWebView(String url, String userUUID, String freUserData) { + return WebViewWidget( + controller: _controllerAll = WebViewController() + ..clearCache() + ..clearLocalStorage() + ..setJavaScriptMode(JavaScriptMode.unrestricted) + ..setBackgroundColor(const Color(0x00000000)) + ..setNavigationDelegate( + NavigationDelegate( + onPageStarted: (String url) { + final String token = "localStorage.setItem('fre-token', '\"$userUUID\"');"; + final String data = "localStorage.setItem('fre-user-data', '$freUserData');"; + const String backNavigation = "localStorage.setItem('enableBackButton', 'true');"; + + _controllerAll.runJavaScript(token); + _controllerAll.runJavaScript(data); + _controllerAll.runJavaScript(backNavigation); + }, + onPageFinished: (String url) { + bool isDarkMode = SchedulerBinding.instance.platformDispatcher.platformBrightness == Brightness.dark; + + if (isDarkMode) { + _controllerAll.runJavaScript(WebviewUtil.jsEnableDarkMode); + } + }, + onNavigationRequest: (NavigationRequest request) { + if (request.url.startsWith('http') || + request.url.startsWith('https://api.whatsapp.com/send') || + request.url.startsWith('https://wa.me')) { + launchUrlString(request.url); + return NavigationDecision.prevent; + } + return NavigationDecision.prevent; + }, + onUrlChange: (url) { + if (url.url.toString().contains('/hub/home')) context.pop(); + }, + ), + ) + ..loadRequest(Uri.parse(url)), + ); + } +} \ No newline at end of file diff --git a/lib/pages/test_page/test_page.dart b/lib/pages/test_page/test_page.dart deleted file mode 100644 index b7a0e8db..00000000 --- a/lib/pages/test_page/test_page.dart +++ /dev/null @@ -1,62 +0,0 @@ -// import 'dart:developer'; - -// import 'package:f_r_e_hub/components/templates_components/card_item_template_component/card_item_template_component_widget.dart'; -// import 'package:f_r_e_hub/flutter_flow/flutter_flow_theme.dart'; -// import 'package:flutter/material.dart'; - -// class TestPage extends StatelessWidget { -// const TestPage({Key? key}) : super(key: key); - -// @override -// Widget build(BuildContext context) { -// // Exemplo de dados para os HashMaps -// final Map labelsHashMap = { -// 'Nome:': 'Gabriel da Silva', -// 'Entrada:': '08:00 AM 01/01/2022', -// 'Saída:': '17:00 PM 01/01/2022', -// }; - -// // Ajuste para o novo tipo esperado pelo componente -// final Map statusHashMap = { -// 'Ativo': FlutterFlowTheme.of(context).success, -// }; - -// // função set statusHashMap que recebe um String status faz um switch case e retorna um Map -// Map getStatusHashMap(String status) { -// switch (status) { -// case 'Ativo': -// return {'Ativo': FlutterFlowTheme.of(context).success}; -// case 'Inativo': -// return {'Inativo': FlutterFlowTheme.of(context).error}; -// default: -// return {'Desconhecido': FlutterFlowTheme.of(context).primaryColor}; -// } -// } - -// // Ajuste para passar os valores corretos para a URL da imagem -// final Map imageKeyValue = { -// 'key': 'docID', -// 'value': 'imageType', -// }; - -// return Scaffold( -// appBar: AppBar( -// title: const Text('Test Page'), -// ), -// body: Center( -// child: ListView.builder( -// itemCount: 10, -// itemBuilder: (context, index) { -// return CardItemTemplateComponentWidget( -// labelsHashMap: labelsHashMap, -// statusHashMap: statusHashMap, -// imageHashMap: imageKeyValue, -// onTapCardItemAction: () async { -// // Ação ao tocar no card -// }, -// ); -// }), -// ), -// ); -// } -// }