fix: velocidade da navegação e webview clean code

This commit is contained in:
J. A. Messias 2024-11-06 15:10:50 -03:00
parent efb79d2ed8
commit 5d5251a89c
5 changed files with 156 additions and 257 deletions

View File

@ -40,19 +40,9 @@ class _MenuButtonWidgetState extends State<MenuButtonWidget> {
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),

View File

@ -40,19 +40,9 @@ class _MenuCardItemState extends State<MenuCardItem> {
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,

View File

@ -23,20 +23,14 @@ class _FastPassPageWidgetState extends State<FastPassPageWidget> {
late InAppWebViewController _controllerIOS;
Future<Map<String, String>> 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<FastPassPageWidget> {
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)),
);
}
}

View File

@ -22,22 +22,14 @@ class _ReservationPageWidgetState extends State<ReservationPageWidget> {
late WebViewController _controllerAll;
Future<Map<String, String>> 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<ReservationPageWidget> {
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)),
);
}
}

View File

@ -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<String, String> 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<String, Color> statusHashMap = {
// 'Ativo': FlutterFlowTheme.of(context).success,
// };
// // função set statusHashMap que recebe um String status faz um switch case e retorna um Map<String, Color>
// Map<String, Color> 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<String, String> 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
// },
// );
// }),
// ),
// );
// }
// }