From 71aa651f4e96531e1502066c3b4c8ce8ce8acf8d Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Thu, 14 Nov 2024 14:54:07 -0300 Subject: [PATCH 01/22] fix: conflito entre getdevUUID e applinks --- lib/shared/helpers/storage_helper.dart | 2 +- lib/shared/utils/device_util.dart | 4 +++- pubspec.yaml | 11 +++-------- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/lib/shared/helpers/storage_helper.dart b/lib/shared/helpers/storage_helper.dart index 582a3b4b..033a3afd 100644 --- a/lib/shared/helpers/storage_helper.dart +++ b/lib/shared/helpers/storage_helper.dart @@ -24,7 +24,7 @@ class StorageHelper { String? isFirstRun = await SharedPreferencesStorage.instance.get(SharedPreferencesKey.isFirstRun.value); - if (isFirstRun == 'true') { + if (isFirstRun != 'false') { await SharedPreferencesStorage.instance.set(SharedPreferencesKey.isFirstRun.value, 'false'); await SecureStorage.instance.set(SecureStorageKey.isLogged.value, 'false'); } diff --git a/lib/shared/utils/device_util.dart b/lib/shared/utils/device_util.dart index 844a3c16..f56be566 100644 --- a/lib/shared/utils/device_util.dart +++ b/lib/shared/utils/device_util.dart @@ -1,3 +1,4 @@ +import 'dart:developer'; import 'dart:io'; import 'package:device_info_plus/device_info_plus.dart'; @@ -10,10 +11,11 @@ class DeviceUtil { static Future getAndroidId() async { try { final String? androidId = await _channel.invokeMethod('getAndroidId'); + log("secureAndroidId: $androidId"); return androidId; } on PlatformException catch (e) { - print("Failed to get Android ID: '${e.message}'."); + log("secureAndroidId Failed to get Android ID: '${e.message}'."); return null; } diff --git a/pubspec.yaml b/pubspec.yaml index 19780be7..1c073b80 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -112,16 +112,13 @@ dev_dependencies: flutter_lints: ^5.0.0 image: 4.2.0 lints: ^5.0.0 -# build_runner: ^2.4.13 -# mockito: ^5.4.4 + # build_runner: ^2.4.13 + # mockito: ^5.4.4 integration_test: sdk: flutter flutter_test: sdk: flutter - - - flutter_launcher_icons: android: "launcher_icon" ios: true @@ -131,8 +128,6 @@ flutter_launcher_icons: adaptive_icon_background: "assets/images/adaptive_background_icon.svg" adaptive_icon_foreground: "assets/images/adaptive_foreground_icon.svg" - - flutter: uses-material-design: true @@ -155,4 +150,4 @@ fonts: - asset: assets/fonts/icons.ttf - family: Menu fonts: - - asset: assets/fonts/menu.ttf \ No newline at end of file + - asset: assets/fonts/menu.ttf From dbac63d2ea4c4068afa36c78bdfa35d0101200cc Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Thu, 14 Nov 2024 15:33:30 -0300 Subject: [PATCH 02/22] WIP --- android/app/src/main/AndroidManifest.xml | 1 + android/app/src/main/res/xml/network_security_config.xml | 6 ++++++ android/app/src/profile/AndroidManifest.xml | 5 +++++ lib/shared/utils/device_util.dart | 3 +-- 4 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 android/app/src/main/res/xml/network_security_config.xml diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index f548d112..f73d395b 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -16,6 +16,7 @@ + + + freaccess.com.br + + \ No newline at end of file diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml index a402b78e..e641ac25 100644 --- a/android/app/src/profile/AndroidManifest.xml +++ b/android/app/src/profile/AndroidManifest.xml @@ -10,4 +10,9 @@ + + \ No newline at end of file diff --git a/lib/shared/utils/device_util.dart b/lib/shared/utils/device_util.dart index f56be566..da41877e 100644 --- a/lib/shared/utils/device_util.dart +++ b/lib/shared/utils/device_util.dart @@ -11,11 +11,10 @@ class DeviceUtil { static Future getAndroidId() async { try { final String? androidId = await _channel.invokeMethod('getAndroidId'); - log("secureAndroidId: $androidId"); return androidId; } on PlatformException catch (e) { - log("secureAndroidId Failed to get Android ID: '${e.message}'."); + log("Failed to get Android ID: '${e.message}'."); return null; } From c2d54b6b3f4b6d917712a98785ed23efb3acc6c9 Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Mon, 18 Nov 2024 09:05:27 -0300 Subject: [PATCH 03/22] WIP: debug tests --- android/app/src/profile/AndroidManifest.xml | 1 + lib/main.dart | 31 ++++++++++++++------- lib/shared/helpers/storage_helper.dart | 3 +- 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml index e641ac25..0e3250d7 100644 --- a/android/app/src/profile/AndroidManifest.xml +++ b/android/app/src/profile/AndroidManifest.xml @@ -10,6 +10,7 @@ + with WidgetsBindingObserver { }; Future initDeepLinks() async { - _appLinks = AppLinks(); - _linkSubscription = _appLinks.uriLinkStream.listen((uri) { - final bool isRecovered = StorageHelper().isRecovered; - if (!isRecovered) openAppLink(uri); - }); + try { + _appLinks = AppLinks(); + _linkSubscription = _appLinks.uriLinkStream.listen((uri) async { + final bool isRecovered = StorageHelper().isRecovered; + await DialogUtil.error(context, 'isRecovered: $isRecovered'); + if (!isRecovered) await openAppLink(uri); + }); + } catch (e) { + await DialogUtil.error(context, 'Erro ao tentar abrir o link'); + } } - void openAppLink(Uri uri) { + Future openAppLink(Uri uri) async { final bool isRecovered = StorageHelper().isRecovered; log('isRecovered: $isRecovered'); + await DialogUtil.warning(context, 'isRecovered: $isRecovered'); if (isRecovered) return; StorageHelper().isRecovered = true; final String email = uri.queryParameters['email'] ?? ''; @@ -201,7 +208,8 @@ class _AppState extends State with WidgetsBindingObserver { final FlutterFlowTheme theme = FlutterFlowTheme.of(context); final Widget screen = ForgotPasswordScreen(email: email, token: token); builder(context) => screen; - showModalBottomSheet( + await DialogUtil.warning(context, 'Builder: $builder'); + await showModalBottomSheet( context: context, builder: (context) => Padding(padding: MediaQuery.viewInsetsOf(context), child: builder(context)), isScrollControlled: true, @@ -211,7 +219,10 @@ class _AppState extends State with WidgetsBindingObserver { useSafeArea: true, enableDrag: true, // isDismissible: true, - ).whenComplete(() => StorageHelper().isRecovered = false); + ).whenComplete(() async { + StorageHelper().isRecovered = false; + await DialogUtil.success(context, 'isRecovered: ${StorageHelper().isRecovered}'); + }); } } @@ -266,7 +277,7 @@ class _AppState extends State with WidgetsBindingObserver { const Duration(milliseconds: 1000), () => setState(() => _appStateNotifier.stopShowingSplashImage())); _setupFirebaseMessaging(); - WidgetsBinding.instance.addPersistentFrameCallback((_) => initDeepLinks()); + WidgetsBinding.instance.addPersistentFrameCallback((_) async => await initDeepLinks()); } @override @@ -281,7 +292,7 @@ class _AppState extends State with WidgetsBindingObserver { if (state == AppLifecycleState.detached) { await LocalizationService.processLocals(context); FirebaseMessagingService().updateDeviceToken(); - } + } } @override diff --git a/lib/shared/helpers/storage_helper.dart b/lib/shared/helpers/storage_helper.dart index 033a3afd..a7aa9e84 100644 --- a/lib/shared/helpers/storage_helper.dart +++ b/lib/shared/helpers/storage_helper.dart @@ -10,10 +10,11 @@ class StorageHelper { StorageHelper._internal(); late BuildContext? _context; - late bool _isRecovered = false; + BuildContext? get context => _context; set context(BuildContext? context) => _context = context; + late bool _isRecovered = false; bool get isRecovered => _isRecovered; set isRecovered(bool isRecovered) => _isRecovered = isRecovered; From f59293da8039f1052cb33d4bf989ebe7a53b5ec0 Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Mon, 18 Nov 2024 09:42:24 -0300 Subject: [PATCH 04/22] WIP --- lib/main.dart | 24 ++++++++++++++++-------- lib/shared/utils/log_util.dart | 26 +++++++++++++++++++++++--- pubspec.yaml | 1 + 3 files changed, 40 insertions(+), 11 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 5669db47..c9a71851 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -23,6 +23,8 @@ import 'package:hub/shared/helpers/storage_helper.dart'; import 'package:hub/shared/services/localization/localization_service.dart'; import 'package:hub/shared/utils/device_util.dart'; import 'package:hub/shared/utils/dialog_util.dart'; +import 'package:hub/shared/utils/log_util.dart'; +import 'package:logging/logging.dart'; import 'package:responsive_framework/responsive_framework.dart'; import 'backend/notifications/firebase_messaging_service.dart'; @@ -37,6 +39,7 @@ void main() async { Future initializeApp() async { WidgetsFlutterBinding.ensureInitialized(); + LogUtil.setupLogging(); await _initializeTracking(); await StorageHelper().init(); @@ -182,33 +185,37 @@ class _AppState extends State with WidgetsBindingObserver { }; Future initDeepLinks() async { + final Logger logger = Logger('initDeepLinks'); try { _appLinks = AppLinks(); + logger.severe('initDeepLinks'); _linkSubscription = _appLinks.uriLinkStream.listen((uri) async { final bool isRecovered = StorageHelper().isRecovered; - await DialogUtil.error(context, 'isRecovered: $isRecovered'); + logger.severe('isRecovered: $isRecovered'); if (!isRecovered) await openAppLink(uri); }); } catch (e) { - await DialogUtil.error(context, 'Erro ao tentar abrir o link'); + logger.severe('initDeepLinks error: $e'); } } Future openAppLink(Uri uri) async { + final Logger logger = Logger('openAppLink'); + logger.severe('open app link: $uri'); final bool isRecovered = StorageHelper().isRecovered; - log('isRecovered: $isRecovered'); - await DialogUtil.warning(context, 'isRecovered: $isRecovered'); + logger.severe('isRecovered: $isRecovered'); if (isRecovered) return; StorageHelper().isRecovered = true; final String email = uri.queryParameters['email'] ?? ''; final String token = uri.queryParameters['token'] ?? ''; + logger.severe('email: $email, token: $token'); final bool isNotEmpty = email.isNotEmpty && token.isNotEmpty; if (isNotEmpty) { final BuildContext context = StorageHelper().context!; final FlutterFlowTheme theme = FlutterFlowTheme.of(context); final Widget screen = ForgotPasswordScreen(email: email, token: token); builder(context) => screen; - await DialogUtil.warning(context, 'Builder: $builder'); + logger.severe('showModalBottomSheet'); await showModalBottomSheet( context: context, builder: (context) => Padding(padding: MediaQuery.viewInsetsOf(context), child: builder(context)), @@ -219,9 +226,9 @@ class _AppState extends State with WidgetsBindingObserver { useSafeArea: true, enableDrag: true, // isDismissible: true, - ).whenComplete(() async { + ).whenComplete(() { StorageHelper().isRecovered = false; - await DialogUtil.success(context, 'isRecovered: ${StorageHelper().isRecovered}'); + logger.severe('showModalBottomSheet completed'); }); } } @@ -277,7 +284,8 @@ class _AppState extends State with WidgetsBindingObserver { const Duration(milliseconds: 1000), () => setState(() => _appStateNotifier.stopShowingSplashImage())); _setupFirebaseMessaging(); - WidgetsBinding.instance.addPersistentFrameCallback((_) async => await initDeepLinks()); + // WidgetsBinding.instance.addPersistentFrameCallback((_) async => await initDeepLinks()); + initDeepLinks(); } @override diff --git a/lib/shared/utils/log_util.dart b/lib/shared/utils/log_util.dart index 5b9e2dc2..c139c3e1 100644 --- a/lib/shared/utils/log_util.dart +++ b/lib/shared/utils/log_util.dart @@ -1,19 +1,39 @@ import 'dart:developer'; import 'package:firebase_crashlytics/firebase_crashlytics.dart'; +import 'package:flutter/foundation.dart'; import 'package:hub/backend/api_requests/api_calls.dart'; +import 'package:logging/logging.dart'; class LogUtil { static void requestAPIFailed(String url, String body, String reason, dynamic error, StackTrace stack) async { - log("URL: ${PhpGroup.getBaseUrl()}/$url"); + final fullUrl = "${PhpGroup.getBaseUrl()}/$url"; + log("URL: $fullUrl"); log("Body: $body"); - log("Motivo: $reason"); + log("Reason: $reason"); log("Error: ${error.toString()}"); log("Stack: ${stack.toString()}"); - FirebaseCrashlytics.instance.setCustomKey('URL', "${PhpGroup.getBaseUrl()}/$url"); + FirebaseCrashlytics.instance.setCustomKey('URL', fullUrl); FirebaseCrashlytics.instance.setCustomKey('Body', body); await FirebaseCrashlytics.instance.recordError(error, stack, reason: reason); } + + static void setupLogging() { + Logger.root.level = Level.ALL; + Logger.root.onRecord.listen((record) { + final logMessage = '${record.level.name}: ${record.time}: ${record.message}'; + if (kReleaseMode) { + log( + logMessage, + name: record.loggerName, + error: record.error, + stackTrace: record.stackTrace, + ); + } else { + print(logMessage); + } + }); + } } diff --git a/pubspec.yaml b/pubspec.yaml index 1c073b80..56479be6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -48,6 +48,7 @@ dependencies: flutter_svg: 2.0.10+1 font_awesome_flutter: 10.7.0 from_css_color: 2.0.0 + logging: ^1.3.0 go_router: ^14.3.0 google_fonts: 6.2.1 http: 1.2.1 From f4e8f9a80698ff48673787298ac29f79e78ba184 Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Mon, 18 Nov 2024 10:11:15 -0300 Subject: [PATCH 05/22] fix --- android/app/src/profile/AndroidManifest.xml | 1 - lib/main.dart | 28 ++++++++------------- lib/shared/utils/log_util.dart | 19 -------------- pubspec.lock | 4 +-- pubspec.yaml | 1 - 5 files changed, 13 insertions(+), 40 deletions(-) diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml index 0e3250d7..e641ac25 100644 --- a/android/app/src/profile/AndroidManifest.xml +++ b/android/app/src/profile/AndroidManifest.xml @@ -10,7 +10,6 @@ - initializeApp() async { WidgetsFlutterBinding.ensureInitialized(); - LogUtil.setupLogging(); await _initializeTracking(); await StorageHelper().init(); @@ -185,37 +182,35 @@ class _AppState extends State with WidgetsBindingObserver { }; Future initDeepLinks() async { - final Logger logger = Logger('initDeepLinks'); try { _appLinks = AppLinks(); - logger.severe('initDeepLinks'); + print('initDeepLinks'); _linkSubscription = _appLinks.uriLinkStream.listen((uri) async { final bool isRecovered = StorageHelper().isRecovered; - logger.severe('isRecovered: $isRecovered'); - if (!isRecovered) await openAppLink(uri); + print('isRecovered: $isRecovered'); + if (isRecovered == false) await openAppLink(uri); }); } catch (e) { - logger.severe('initDeepLinks error: $e'); + print(e); } } Future openAppLink(Uri uri) async { - final Logger logger = Logger('openAppLink'); - logger.severe('open app link: $uri'); + print('open app link: $uri'); final bool isRecovered = StorageHelper().isRecovered; - logger.severe('isRecovered: $isRecovered'); - if (isRecovered) return; + print('isRecovered: $isRecovered'); + if (isRecovered == true) return; StorageHelper().isRecovered = true; final String email = uri.queryParameters['email'] ?? ''; final String token = uri.queryParameters['token'] ?? ''; - logger.severe('email: $email, token: $token'); + print('email: $email, token: $token'); final bool isNotEmpty = email.isNotEmpty && token.isNotEmpty; if (isNotEmpty) { final BuildContext context = StorageHelper().context!; final FlutterFlowTheme theme = FlutterFlowTheme.of(context); final Widget screen = ForgotPasswordScreen(email: email, token: token); builder(context) => screen; - logger.severe('showModalBottomSheet'); + print('showModalBottomSheet'); await showModalBottomSheet( context: context, builder: (context) => Padding(padding: MediaQuery.viewInsetsOf(context), child: builder(context)), @@ -228,7 +223,7 @@ class _AppState extends State with WidgetsBindingObserver { // isDismissible: true, ).whenComplete(() { StorageHelper().isRecovered = false; - logger.severe('showModalBottomSheet completed'); + print('showModalBottomSheet completed'); }); } } @@ -284,7 +279,6 @@ class _AppState extends State with WidgetsBindingObserver { const Duration(milliseconds: 1000), () => setState(() => _appStateNotifier.stopShowingSplashImage())); _setupFirebaseMessaging(); - // WidgetsBinding.instance.addPersistentFrameCallback((_) async => await initDeepLinks()); initDeepLinks(); } diff --git a/lib/shared/utils/log_util.dart b/lib/shared/utils/log_util.dart index c139c3e1..99dfab8e 100644 --- a/lib/shared/utils/log_util.dart +++ b/lib/shared/utils/log_util.dart @@ -1,9 +1,7 @@ import 'dart:developer'; import 'package:firebase_crashlytics/firebase_crashlytics.dart'; -import 'package:flutter/foundation.dart'; import 'package:hub/backend/api_requests/api_calls.dart'; -import 'package:logging/logging.dart'; class LogUtil { static void requestAPIFailed(String url, String body, String reason, dynamic error, StackTrace stack) async { @@ -19,21 +17,4 @@ class LogUtil { await FirebaseCrashlytics.instance.recordError(error, stack, reason: reason); } - - static void setupLogging() { - Logger.root.level = Level.ALL; - Logger.root.onRecord.listen((record) { - final logMessage = '${record.level.name}: ${record.time}: ${record.message}'; - if (kReleaseMode) { - log( - logMessage, - name: record.loggerName, - error: record.error, - stackTrace: record.stackTrace, - ); - } else { - print(logMessage); - } - }); - } } diff --git a/pubspec.lock b/pubspec.lock index dfdc8cb0..b1debc1d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1008,10 +1008,10 @@ packages: dependency: transitive description: name: logging - sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61 url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.3.0" matcher: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 56479be6..1c073b80 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -48,7 +48,6 @@ dependencies: flutter_svg: 2.0.10+1 font_awesome_flutter: 10.7.0 from_css_color: 2.0.0 - logging: ^1.3.0 go_router: ^14.3.0 google_fonts: 6.2.1 http: 1.2.1 From bf5b2a8215da1eeb24988be76312ece13948afec Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Mon, 18 Nov 2024 11:27:28 -0300 Subject: [PATCH 06/22] milestone --- lib/main.dart | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index ce05ae4a..4e8a6d19 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -206,24 +206,25 @@ class _AppState extends State with WidgetsBindingObserver { print('email: $email, token: $token'); final bool isNotEmpty = email.isNotEmpty && token.isNotEmpty; if (isNotEmpty) { - final BuildContext context = StorageHelper().context!; final FlutterFlowTheme theme = FlutterFlowTheme.of(context); final Widget screen = ForgotPasswordScreen(email: email, token: token); builder(context) => screen; print('showModalBottomSheet'); - await showModalBottomSheet( - context: context, - builder: (context) => Padding(padding: MediaQuery.viewInsetsOf(context), child: builder(context)), - isScrollControlled: true, - // barrierColor: theme.primaryBackground.withOpacity(0.2), - backgroundColor: theme.primaryBackground, - showDragHandle: true, - useSafeArea: true, - enableDrag: true, - // isDismissible: true, - ).whenComplete(() { - StorageHelper().isRecovered = false; - print('showModalBottomSheet completed'); + WidgetsBinding.instance.addPostFrameCallback((_) async { + await showModalBottomSheet( + context: StorageHelper().context!, + builder: (context) => Padding(padding: MediaQuery.viewInsetsOf(context), child: builder(context)), + isScrollControlled: true, + // barrierColor: theme.primaryBackground.withOpacity(0.2), + backgroundColor: theme.primaryBackground, + showDragHandle: true, + useSafeArea: true, + enableDrag: true, + // isDismissible: true, + ).whenComplete(() { + StorageHelper().isRecovered = false; + print('showModalBottomSheet completed'); + }); }); } } @@ -276,7 +277,9 @@ class _AppState extends State with WidgetsBindingObserver { _appStateNotifier = AppStateNotifier.instance; _router = createRouter(_appStateNotifier); Future.delayed( - const Duration(milliseconds: 1000), () => setState(() => _appStateNotifier.stopShowingSplashImage())); + const Duration(milliseconds: 1000), + () => setState(() => _appStateNotifier.stopShowingSplashImage()), + ); _setupFirebaseMessaging(); initDeepLinks(); From 16066228264b3d0418486e0c2e6a8ceade4e37d1 Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Mon, 18 Nov 2024 13:27:20 -0300 Subject: [PATCH 07/22] fix: deeplink service --- lib/main.dart | 55 -------------- .../sign_in_page/sign_in_page_widget.dart | 3 +- .../sign_up_page/sign_up_page_widget.dart | 2 + .../welcome_page/welcome_page_widget.dart | 4 +- .../services/deeplink/deep_link_service.dart | 73 +++++++++++++++++++ 5 files changed, 80 insertions(+), 57 deletions(-) create mode 100644 lib/shared/services/deeplink/deep_link_service.dart diff --git a/lib/main.dart b/lib/main.dart index 4e8a6d19..de20064f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,7 +2,6 @@ import 'dart:async'; import 'dart:developer'; import 'dart:io'; -import 'package:app_links/app_links.dart'; import 'package:app_tracking_transparency/app_tracking_transparency.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_crashlytics/firebase_crashlytics.dart'; @@ -17,12 +16,10 @@ import 'package:hub/flutter_flow/flutter_flow_theme.dart'; import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/flutter_flow/internationalization.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; -import 'package:hub/pages/forgot_password_page/forgot_password_screen.dart'; import 'package:hub/shared/helpers/base_storage.dart'; import 'package:hub/shared/helpers/storage_helper.dart'; import 'package:hub/shared/services/localization/localization_service.dart'; -import 'package:logging/logging.dart'; import 'package:responsive_framework/responsive_framework.dart'; import 'backend/notifications/firebase_messaging_service.dart'; @@ -118,8 +115,6 @@ class _AppState extends State with WidgetsBindingObserver { late AppStateNotifier _appStateNotifier; late GoRouter _router; bool displaySplashImage = true; - late AppLinks _appLinks; - StreamSubscription? _linkSubscription; final ThemeData _darkTheme = ThemeData( brightness: Brightness.dark, @@ -181,54 +176,6 @@ class _AppState extends State with WidgetsBindingObserver { ); }; - Future initDeepLinks() async { - try { - _appLinks = AppLinks(); - print('initDeepLinks'); - _linkSubscription = _appLinks.uriLinkStream.listen((uri) async { - final bool isRecovered = StorageHelper().isRecovered; - print('isRecovered: $isRecovered'); - if (isRecovered == false) await openAppLink(uri); - }); - } catch (e) { - print(e); - } - } - - Future openAppLink(Uri uri) async { - print('open app link: $uri'); - final bool isRecovered = StorageHelper().isRecovered; - print('isRecovered: $isRecovered'); - if (isRecovered == true) return; - StorageHelper().isRecovered = true; - final String email = uri.queryParameters['email'] ?? ''; - final String token = uri.queryParameters['token'] ?? ''; - print('email: $email, token: $token'); - final bool isNotEmpty = email.isNotEmpty && token.isNotEmpty; - if (isNotEmpty) { - final FlutterFlowTheme theme = FlutterFlowTheme.of(context); - final Widget screen = ForgotPasswordScreen(email: email, token: token); - builder(context) => screen; - print('showModalBottomSheet'); - WidgetsBinding.instance.addPostFrameCallback((_) async { - await showModalBottomSheet( - context: StorageHelper().context!, - builder: (context) => Padding(padding: MediaQuery.viewInsetsOf(context), child: builder(context)), - isScrollControlled: true, - // barrierColor: theme.primaryBackground.withOpacity(0.2), - backgroundColor: theme.primaryBackground, - showDragHandle: true, - useSafeArea: true, - enableDrag: true, - // isDismissible: true, - ).whenComplete(() { - StorageHelper().isRecovered = false; - print('showModalBottomSheet completed'); - }); - }); - } - } - void _setupFirebaseMessaging() async { FirebaseMessaging messaging = FirebaseMessaging.instance; RemoteMessage? initialMessage = await messaging.getInitialMessage(); @@ -282,13 +229,11 @@ class _AppState extends State with WidgetsBindingObserver { ); _setupFirebaseMessaging(); - initDeepLinks(); } @override void dispose() { WidgetsBinding.instance.removeObserver(this); - _linkSubscription?.cancel(); super.dispose(); } diff --git a/lib/pages/sign_in_page/sign_in_page_widget.dart b/lib/pages/sign_in_page/sign_in_page_widget.dart index 471bbee2..7b603002 100644 --- a/lib/pages/sign_in_page/sign_in_page_widget.dart +++ b/lib/pages/sign_in_page/sign_in_page_widget.dart @@ -1,5 +1,6 @@ import 'package:hub/shared/helpers/storage_helper.dart'; import 'package:hub/shared/mixins/switcher_mixin.dart'; +import 'package:hub/shared/services/deeplink/deep_link_service.dart'; import '/components/templates_components/sign_in_template_component/sign_in_template_component_widget.dart'; import '/flutter_flow/flutter_flow_theme.dart'; @@ -24,12 +25,12 @@ class _SignInPageWidgetState extends State { void initState() { super.initState(); _model = createModel(context, () => SignInPageModel()); + DeepLinkService().initDeepLinks(); } @override void dispose() { _model.dispose(); - super.dispose(); } diff --git a/lib/pages/sign_up_page/sign_up_page_widget.dart b/lib/pages/sign_up_page/sign_up_page_widget.dart index 00d95f56..5b6a1909 100644 --- a/lib/pages/sign_up_page/sign_up_page_widget.dart +++ b/lib/pages/sign_up_page/sign_up_page_widget.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:hub/shared/helpers/storage_helper.dart'; import 'package:hub/shared/mixins/switcher_mixin.dart'; +import 'package:hub/shared/services/deeplink/deep_link_service.dart'; import '/components/templates_components/sign_up_template_component/sign_up_template_component_widget.dart'; import '/flutter_flow/flutter_flow_theme.dart'; @@ -25,6 +26,7 @@ class _SignUpPageWidgetState extends State { void initState() { super.initState(); _model = createModel(context, () => SignUpPageModel()); + DeepLinkService().initDeepLinks(); } @override diff --git a/lib/pages/welcome_page/welcome_page_widget.dart b/lib/pages/welcome_page/welcome_page_widget.dart index cb24d5e1..841495d2 100644 --- a/lib/pages/welcome_page/welcome_page_widget.dart +++ b/lib/pages/welcome_page/welcome_page_widget.dart @@ -1,8 +1,10 @@ + import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:hub/shared/helpers/base_storage.dart'; import 'package:hub/shared/helpers/storage_helper.dart'; import 'package:hub/shared/mixins/switcher_mixin.dart'; +import 'package:hub/shared/services/deeplink/deep_link_service.dart'; import '/components/templates_components/welcome_template_component/welcome_template_component_widget.dart'; import '/flutter_flow/flutter_flow_theme.dart'; @@ -41,12 +43,12 @@ class _WelcomePageWidgetState extends State { setState(() {}); } }); + DeepLinkService().initDeepLinks(); } @override void dispose() { _model.dispose(); - super.dispose(); } diff --git a/lib/shared/services/deeplink/deep_link_service.dart b/lib/shared/services/deeplink/deep_link_service.dart new file mode 100644 index 00000000..b77da747 --- /dev/null +++ b/lib/shared/services/deeplink/deep_link_service.dart @@ -0,0 +1,73 @@ +import 'dart:async'; +import 'package:app_links/app_links.dart'; +import 'package:flutter/material.dart'; +import 'package:hub/flutter_flow/flutter_flow_theme.dart'; +import 'package:hub/pages/forgot_password_page/forgot_password_screen.dart'; +import 'package:hub/shared/helpers/storage_helper.dart'; + +class DeepLinkService { + static final DeepLinkService _instance = DeepLinkService._internal(); + + factory DeepLinkService() => _instance; + + DeepLinkService._internal(); + + + late final AppLinks _appLinks; + StreamSubscription? _linkSubscription; + + Future initDeepLinks() async { + try { + _appLinks = AppLinks(); + print('initDeepLinks'); + _linkSubscription = _appLinks.uriLinkStream.listen((uri) async { + if (!StorageHelper().isRecovered) { + await _handleDeepLink(uri); + } + }); + } catch (e) { + print('Error initializing deep links: $e'); + } + } + + Future _handleDeepLink(Uri uri) async { + print('Handling deep link: $uri'); + if (StorageHelper().isRecovered) return; + + StorageHelper().isRecovered = true; + final email = uri.queryParameters['email'] ?? ''; + final token = uri.queryParameters['token'] ?? ''; + print('email: $email, token: $token'); + + if (email.isNotEmpty && token.isNotEmpty) { + await _showForgotPasswordScreen(email, token); + } + } + + Future _showForgotPasswordScreen(String email, String token) async { + final theme = FlutterFlowTheme.of(StorageHelper().context!); + final screen = ForgotPasswordScreen(email: email, token: token); + + WidgetsBinding.instance.addPostFrameCallback((_) async { + await showModalBottomSheet( + context: StorageHelper().context!, + builder: (context) => Padding( + padding: MediaQuery.viewInsetsOf(context), + child: screen, + ), + isScrollControlled: true, + backgroundColor: theme.primaryBackground, + showDragHandle: true, + useSafeArea: true, + enableDrag: true, + ).whenComplete(() { + StorageHelper().isRecovered = false; + print('showModalBottomSheet completed'); + }); + }); + } + + void dispose() { + _linkSubscription?.cancel(); + } +} From e67b643b472011920856c4d4c86134a9335178e6 Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Mon, 18 Nov 2024 15:34:12 -0300 Subject: [PATCH 08/22] debit: fecha o modal quando sucesso --- .../forgot_password_template_component_widget.dart | 6 ++++-- .../forgot_password_page/forgot_password_screen.dart | 6 +++++- .../authentication/authentication_service.dart | 10 ++++++++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/components/templates_components/forgot_password_template_component/forgot_password_template_component_widget.dart b/lib/components/templates_components/forgot_password_template_component/forgot_password_template_component_widget.dart index ad951ae3..9feeeed9 100644 --- a/lib/components/templates_components/forgot_password_template_component/forgot_password_template_component_widget.dart +++ b/lib/components/templates_components/forgot_password_template_component/forgot_password_template_component_widget.dart @@ -240,8 +240,10 @@ class _ForgotPasswordTemplateComponentWidgetState extends State - AuthenticationService.forgotPassword(context, _model.emailAddressTextController.text), + : () async => await AuthenticationService.forgotPassword( + context, + _model.emailAddressTextController.text, + ).then((v) => v == true ? context.pop() : null), text: FFLocalizations.of(context).getText( '74rnd5bu' /* Enviar */, ), diff --git a/lib/pages/forgot_password_page/forgot_password_screen.dart b/lib/pages/forgot_password_page/forgot_password_screen.dart index 81aa567e..c29cad1b 100644 --- a/lib/pages/forgot_password_page/forgot_password_screen.dart +++ b/lib/pages/forgot_password_page/forgot_password_screen.dart @@ -232,7 +232,11 @@ class _ForgotPasswordScreenState extends State with Ticker ? null : () async { await AuthenticationService.changePassword( - context, widget.email, _model.passwordConfirmFormTextController!.text, widget.token); + context, + widget.email, + _model.passwordConfirmFormTextController!.text, + widget.token, + ).then((v) => v == true ? context.pop() : null); setState(() {}); }, text: FFLocalizations.of(context).getVariableText( diff --git a/lib/shared/services/authentication/authentication_service.dart b/lib/shared/services/authentication/authentication_service.dart index 81afd3a1..dea0c7de 100644 --- a/lib/shared/services/authentication/authentication_service.dart +++ b/lib/shared/services/authentication/authentication_service.dart @@ -142,7 +142,7 @@ class AuthenticationService { context.go('/welcomePage', extra: extra); } - static Future forgotPassword(BuildContext context, String email) async { + static Future forgotPassword(BuildContext context, String email) async { try { final ApiCallResponse? response; final ForgotPasswordCall callback = PhpGroup.forgotPasswordCall; @@ -153,16 +153,19 @@ class AuthenticationService { if (response.jsonBody['error'] == false) { await DialogUtil.success(context, message); + return true; } else { await DialogUtil.error(context, response.jsonBody['error_msg']); + return false; } } catch (e, s) { await DialogUtil.errorDefault(context); LogUtil.requestAPIFailed('forgotPassword.php', email, "Forgot Password", e, s); + return false; } } - static Future changePassword(BuildContext context, String email, String password, String token) async { + static Future changePassword(BuildContext context, String email, String password, String token) async { try { final ApiCallResponse response = await PhpGroup.changePasswordCall.call(email: email, psswd: password, token: token); @@ -173,13 +176,16 @@ class AuthenticationService { ptText: "Senha alterada com sucesso!", ); await DialogUtil.success(context, message).then((_) => context.pop); + return true; } else { final String message = response.jsonBody['error_msg']; await DialogUtil.error(context, message); + return false; } } catch (e, s) { await DialogUtil.errorDefault(context); LogUtil.requestAPIFailed('changePassword.php', email, "Change Password", e, s); + return false; } } From cf0e17662e299b39a15446dd1a479b9ab72bc426 Mon Sep 17 00:00:00 2001 From: jantunesmessias Date: Mon, 18 Nov 2024 16:58:27 -0300 Subject: [PATCH 09/22] ffix: move theme and screen to widgetsBinding --- lib/pages/sign_in_page/sign_in_page_widget.dart | 2 +- lib/pages/sign_up_page/sign_up_page_widget.dart | 2 +- lib/pages/welcome_page/welcome_page_widget.dart | 2 +- lib/shared/services/deeplink/deep_link_service.dart | 11 ++++++----- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/lib/pages/sign_in_page/sign_in_page_widget.dart b/lib/pages/sign_in_page/sign_in_page_widget.dart index 7b603002..828e8094 100644 --- a/lib/pages/sign_in_page/sign_in_page_widget.dart +++ b/lib/pages/sign_in_page/sign_in_page_widget.dart @@ -25,7 +25,7 @@ class _SignInPageWidgetState extends State { void initState() { super.initState(); _model = createModel(context, () => SignInPageModel()); - DeepLinkService().initDeepLinks(); + DeepLinkService().ensureInitialization(); } @override diff --git a/lib/pages/sign_up_page/sign_up_page_widget.dart b/lib/pages/sign_up_page/sign_up_page_widget.dart index 5b6a1909..16df509b 100644 --- a/lib/pages/sign_up_page/sign_up_page_widget.dart +++ b/lib/pages/sign_up_page/sign_up_page_widget.dart @@ -26,7 +26,7 @@ class _SignUpPageWidgetState extends State { void initState() { super.initState(); _model = createModel(context, () => SignUpPageModel()); - DeepLinkService().initDeepLinks(); + DeepLinkService().ensureInitialization(); } @override diff --git a/lib/pages/welcome_page/welcome_page_widget.dart b/lib/pages/welcome_page/welcome_page_widget.dart index 841495d2..a6759290 100644 --- a/lib/pages/welcome_page/welcome_page_widget.dart +++ b/lib/pages/welcome_page/welcome_page_widget.dart @@ -43,7 +43,7 @@ class _WelcomePageWidgetState extends State { setState(() {}); } }); - DeepLinkService().initDeepLinks(); + DeepLinkService().ensureInitialization(); } @override diff --git a/lib/shared/services/deeplink/deep_link_service.dart b/lib/shared/services/deeplink/deep_link_service.dart index b77da747..bea26799 100644 --- a/lib/shared/services/deeplink/deep_link_service.dart +++ b/lib/shared/services/deeplink/deep_link_service.dart @@ -12,11 +12,12 @@ class DeepLinkService { DeepLinkService._internal(); - late final AppLinks _appLinks; StreamSubscription? _linkSubscription; + bool _isInitialized = false; - Future initDeepLinks() async { + Future ensureInitialization() async { + if (_isInitialized) return; try { _appLinks = AppLinks(); print('initDeepLinks'); @@ -25,6 +26,7 @@ class DeepLinkService { await _handleDeepLink(uri); } }); + _isInitialized = true; } catch (e) { print('Error initializing deep links: $e'); } @@ -45,10 +47,9 @@ class DeepLinkService { } Future _showForgotPasswordScreen(String email, String token) async { - final theme = FlutterFlowTheme.of(StorageHelper().context!); - final screen = ForgotPasswordScreen(email: email, token: token); - WidgetsBinding.instance.addPostFrameCallback((_) async { + final theme = FlutterFlowTheme.of(StorageHelper().context!); + final screen = ForgotPasswordScreen(email: email, token: token); await showModalBottomSheet( context: StorageHelper().context!, builder: (context) => Padding( From 40e2e75a09d52ccdd422476b6a56a12b7717a474 Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Mon, 18 Nov 2024 17:20:15 -0300 Subject: [PATCH 10/22] WIP --- lib/flutter_flow/flutter_flow_theme.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/flutter_flow/flutter_flow_theme.dart b/lib/flutter_flow/flutter_flow_theme.dart index fa892eb1..d6607aea 100644 --- a/lib/flutter_flow/flutter_flow_theme.dart +++ b/lib/flutter_flow/flutter_flow_theme.dart @@ -41,7 +41,7 @@ abstract class FlutterFlowTheme { static void saveThemeMode(ThemeMode mode) => mode == ThemeMode.system ? _prefs?.remove(kThemeModeKey) : _prefs?.setBool(kThemeModeKey, mode == ThemeMode.dark); static FlutterFlowTheme of(BuildContext context) { - deviceSize = getDeviceSize(context); + // deviceSize = getDeviceSize(context); return Theme.of(context).brightness == Brightness.dark ? DarkModeTheme() : LightModeTheme(); } From 4bdce5e2ba8fc2fab6d71f7f593743d7db842fd8 Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Mon, 18 Nov 2024 17:22:27 -0300 Subject: [PATCH 11/22] wip: add try-catch --- .../services/deeplink/deep_link_service.dart | 63 +++++++++++-------- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/lib/shared/services/deeplink/deep_link_service.dart b/lib/shared/services/deeplink/deep_link_service.dart index bea26799..392fa519 100644 --- a/lib/shared/services/deeplink/deep_link_service.dart +++ b/lib/shared/services/deeplink/deep_link_service.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:developer'; import 'package:app_links/app_links.dart'; import 'package:flutter/material.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart'; @@ -33,39 +34,49 @@ class DeepLinkService { } Future _handleDeepLink(Uri uri) async { - print('Handling deep link: $uri'); - if (StorageHelper().isRecovered) return; + try { + print('Handling deep link: $uri'); + if (StorageHelper().isRecovered) return; - StorageHelper().isRecovered = true; - final email = uri.queryParameters['email'] ?? ''; - final token = uri.queryParameters['token'] ?? ''; - print('email: $email, token: $token'); + StorageHelper().isRecovered = true; + final email = uri.queryParameters['email'] ?? ''; + final token = uri.queryParameters['token'] ?? ''; + print('email: $email, token: $token'); - if (email.isNotEmpty && token.isNotEmpty) { - await _showForgotPasswordScreen(email, token); + if (email.isNotEmpty && token.isNotEmpty) { + await _showForgotPasswordScreen(email, token); + } + } catch (e, s) { + print('Error handling deep link: $e'); + log('Error handling', error: e, stackTrace: s); } } Future _showForgotPasswordScreen(String email, String token) async { - WidgetsBinding.instance.addPostFrameCallback((_) async { - final theme = FlutterFlowTheme.of(StorageHelper().context!); - final screen = ForgotPasswordScreen(email: email, token: token); - await showModalBottomSheet( - context: StorageHelper().context!, - builder: (context) => Padding( - padding: MediaQuery.viewInsetsOf(context), - child: screen, - ), - isScrollControlled: true, - backgroundColor: theme.primaryBackground, - showDragHandle: true, - useSafeArea: true, - enableDrag: true, - ).whenComplete(() { - StorageHelper().isRecovered = false; - print('showModalBottomSheet completed'); + try { + WidgetsBinding.instance.addPostFrameCallback((_) async { + final theme = FlutterFlowTheme.of(StorageHelper().context!); + final screen = ForgotPasswordScreen(email: email, token: token); + await showModalBottomSheet( + context: StorageHelper().context!, + builder: (context) => Padding( + padding: MediaQuery.viewInsetsOf(context), + child: screen, + ), + isScrollControlled: true, + backgroundColor: theme.primaryBackground, + showDragHandle: true, + useSafeArea: true, + enableDrag: true, + ).whenComplete(() { + StorageHelper().isRecovered = false; + print('showModalBottomSheet completed'); + }); }); - }); + } catch (e, s) { + print('Error showing forgot password screen: $e'); + log('Error handling', error: e, stackTrace: s); + } } void dispose() { From ef17abbb9a28d7b789c4f05685ff1bc1e4e95e74 Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Mon, 18 Nov 2024 17:23:54 -0300 Subject: [PATCH 12/22] WIP --- lib/shared/services/deeplink/deep_link_service.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/shared/services/deeplink/deep_link_service.dart b/lib/shared/services/deeplink/deep_link_service.dart index 392fa519..51470eea 100644 --- a/lib/shared/services/deeplink/deep_link_service.dart +++ b/lib/shared/services/deeplink/deep_link_service.dart @@ -47,7 +47,7 @@ class DeepLinkService { await _showForgotPasswordScreen(email, token); } } catch (e, s) { - print('Error handling deep link: $e'); + print('Error handling deep link: $e, $s'); log('Error handling', error: e, stackTrace: s); } } @@ -74,7 +74,7 @@ class DeepLinkService { }); }); } catch (e, s) { - print('Error showing forgot password screen: $e'); + print('Error showing forgot password screen: $e, $s'); log('Error handling', error: e, stackTrace: s); } } From 0205c74f8c3ac3e8362cf02864c6cfdf9e857286 Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Mon, 18 Nov 2024 17:42:47 -0300 Subject: [PATCH 13/22] wip: async changes --- .../sign_in_page/sign_in_page_widget.dart | 4 ++- .../sign_up_page/sign_up_page_widget.dart | 4 ++- .../welcome_page/welcome_page_widget.dart | 5 +-- .../services/deeplink/deep_link_service.dart | 34 +++++++++---------- 4 files changed, 25 insertions(+), 22 deletions(-) diff --git a/lib/pages/sign_in_page/sign_in_page_widget.dart b/lib/pages/sign_in_page/sign_in_page_widget.dart index 828e8094..0e2d6cf1 100644 --- a/lib/pages/sign_in_page/sign_in_page_widget.dart +++ b/lib/pages/sign_in_page/sign_in_page_widget.dart @@ -25,7 +25,9 @@ class _SignInPageWidgetState extends State { void initState() { super.initState(); _model = createModel(context, () => SignInPageModel()); - DeepLinkService().ensureInitialization(); + WidgetsBinding.instance.addPostFrameCallback((_) async { + await DeepLinkService().ensureInitialization(); + }); } @override diff --git a/lib/pages/sign_up_page/sign_up_page_widget.dart b/lib/pages/sign_up_page/sign_up_page_widget.dart index 16df509b..acf0c74e 100644 --- a/lib/pages/sign_up_page/sign_up_page_widget.dart +++ b/lib/pages/sign_up_page/sign_up_page_widget.dart @@ -26,7 +26,9 @@ class _SignUpPageWidgetState extends State { void initState() { super.initState(); _model = createModel(context, () => SignUpPageModel()); - DeepLinkService().ensureInitialization(); + WidgetsBinding.instance.addPostFrameCallback((_) async { + await DeepLinkService().ensureInitialization(); + }); } @override diff --git a/lib/pages/welcome_page/welcome_page_widget.dart b/lib/pages/welcome_page/welcome_page_widget.dart index a6759290..c7dac14d 100644 --- a/lib/pages/welcome_page/welcome_page_widget.dart +++ b/lib/pages/welcome_page/welcome_page_widget.dart @@ -1,4 +1,3 @@ - import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; import 'package:hub/shared/helpers/base_storage.dart'; @@ -43,7 +42,9 @@ class _WelcomePageWidgetState extends State { setState(() {}); } }); - DeepLinkService().ensureInitialization(); + WidgetsBinding.instance.addPostFrameCallback((_) async { + await DeepLinkService().ensureInitialization(); + }); } @override diff --git a/lib/shared/services/deeplink/deep_link_service.dart b/lib/shared/services/deeplink/deep_link_service.dart index 51470eea..58eda9a6 100644 --- a/lib/shared/services/deeplink/deep_link_service.dart +++ b/lib/shared/services/deeplink/deep_link_service.dart @@ -54,24 +54,22 @@ class DeepLinkService { Future _showForgotPasswordScreen(String email, String token) async { try { - WidgetsBinding.instance.addPostFrameCallback((_) async { - final theme = FlutterFlowTheme.of(StorageHelper().context!); - final screen = ForgotPasswordScreen(email: email, token: token); - await showModalBottomSheet( - context: StorageHelper().context!, - builder: (context) => Padding( - padding: MediaQuery.viewInsetsOf(context), - child: screen, - ), - isScrollControlled: true, - backgroundColor: theme.primaryBackground, - showDragHandle: true, - useSafeArea: true, - enableDrag: true, - ).whenComplete(() { - StorageHelper().isRecovered = false; - print('showModalBottomSheet completed'); - }); + final FlutterFlowTheme theme = FlutterFlowTheme.of(StorageHelper().context!); + final ForgotPasswordScreen screen = ForgotPasswordScreen(email: email, token: token); + await showModalBottomSheet( + context: StorageHelper().context!, + builder: (context) => Padding( + padding: MediaQuery.viewInsetsOf(context), + child: screen, + ), + isScrollControlled: true, + backgroundColor: theme.primaryBackground, + showDragHandle: true, + useSafeArea: true, + enableDrag: true, + ).whenComplete(() { + StorageHelper().isRecovered = false; + print('showModalBottomSheet completed'); }); } catch (e, s) { print('Error showing forgot password screen: $e, $s'); From b97c32f80b8ea5e0d04478e966243a6eb1cb1640 Mon Sep 17 00:00:00 2001 From: jantunesmessias Date: Tue, 19 Nov 2024 15:31:22 -0300 Subject: [PATCH 14/22] =?UTF-8?q?=CB=9Cmilestone=CB=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ios/Runner/Info.plist | 2 +- lib/flutter_flow/nav/nav.dart | 78 +++++++++++++------ lib/main.dart | 23 ++++-- .../sign_in_page/sign_in_page_widget.dart | 3 - .../sign_up_page/sign_up_page_widget.dart | 3 - .../welcome_page/welcome_page_widget.dart | 12 +-- .../services/deeplink/deep_link_service.dart | 36 +++++---- 7 files changed, 96 insertions(+), 61 deletions(-) diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 3858867a..64b07808 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -3,7 +3,7 @@ FlutterDeepLinkingEnabled - + CADisableMinimumFrameDurationOnPhone CFBundleDevelopmentRegion diff --git a/lib/flutter_flow/nav/nav.dart b/lib/flutter_flow/nav/nav.dart index f891b962..3982df52 100644 --- a/lib/flutter_flow/nav/nav.dart +++ b/lib/flutter_flow/nav/nav.dart @@ -28,6 +28,8 @@ export 'serialization_util.dart'; const kTransitionInfoKey = '__transition_info__'; +final GlobalKey key = GlobalKey(); + class AppStateNotifier extends ChangeNotifier { AppStateNotifier._(); @@ -44,6 +46,7 @@ class AppStateNotifier extends ChangeNotifier { GoRouter createRouter(AppStateNotifier appStateNotifier) { return GoRouter( + navigatorKey: key, initialLocation: '/', debugLogDiagnostics: true, refreshListenable: appStateNotifier, @@ -80,19 +83,28 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) { builder: (context, _) { return FutureBuilder( future: () async { - final bool isLogged = - await StorageHelper().get(SecureStorageKey.isLogged.value, Storage.SecureStorage) == 'true'; - final bool haveLocal = - await StorageHelper().get(SecureStorageKey.haveLocal.value, Storage.SecureStorage) == 'true'; - final bool haveUserUUID = - (await StorageHelper().get(SQLiteStorageKey.userUUID.value, Storage.SQLiteStorage))?.isNotEmpty ?? - false; - final bool haveDevUUID = - (await StorageHelper().get(SQLiteStorageKey.devUUID.value, Storage.SQLiteStorage))?.isNotEmpty ?? - false; + final bool isLogged = await StorageHelper().get( + SecureStorageKey.isLogged.value, Storage.SecureStorage) == + 'true'; + final bool haveLocal = await StorageHelper().get( + SecureStorageKey.haveLocal.value, + Storage.SecureStorage) == + 'true'; + final bool haveUserUUID = (await StorageHelper().get( + SQLiteStorageKey.userUUID.value, + Storage.SQLiteStorage)) + ?.isNotEmpty ?? + false; + final bool haveDevUUID = (await StorageHelper().get( + SQLiteStorageKey.devUUID.value, + Storage.SQLiteStorage)) + ?.isNotEmpty ?? + false; if (isLogged && haveDevUUID && haveUserUUID) { - return haveLocal ? const HomePageWidget() : const ReceptionPageWidget(); + return haveLocal + ? const HomePageWidget() + : const ReceptionPageWidget(); } else { return const WelcomePageWidget(); } @@ -114,8 +126,10 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) { name: 'forgotPassword', path: '/forgotPassword', builder: (context, params) { - late final String email = params.getParam('email', ParamType.String); - late final String token = params.getParam('token', ParamType.String); + late final String email = + params.getParam('email', ParamType.String); + late final String token = + params.getParam('token', ParamType.String); return ForgotPasswordScreen( key: UniqueKey(), @@ -128,7 +142,10 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) { path: '/homePage', builder: (context, params) => HomePageWidget(key: UniqueKey()), ), - FFRoute(name: 'receptionPage', path: '/receptionPage', builder: (context, params) => const ReceptionPageWidget()), + FFRoute( + name: 'receptionPage', + path: '/receptionPage', + builder: (context, params) => const ReceptionPageWidget()), FFRoute( name: 'messageHistoryPage', path: '/messageHistoryPage', @@ -243,7 +260,9 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) { extension NavParamExtensions on Map { Map get withoutNulls => Map.fromEntries( - entries.where((e) => e.value != null).map((e) => MapEntry(e.key, e.value!)), + entries + .where((e) => e.value != null) + .map((e) => MapEntry(e.key, e.value!)), ); } @@ -260,7 +279,8 @@ extension NavigationExtensions on BuildContext { } extension _GoRouterStateExtensions on GoRouterState { - Map get extraMap => extra != null ? extra as Map : {}; + Map get extraMap => + extra != null ? extra as Map : {}; Map get allParams => {} ..addAll(pathParameters) ..addAll(uri.queryParameters) @@ -273,8 +293,9 @@ extension _GoRouterStateExtensions on GoRouterState { extension GoRouterLocationExtension on GoRouter { String getCurrentLocation() { final RouteMatch lastMatch = routerDelegate.currentConfiguration.last; - final RouteMatchList matchList = - lastMatch is ImperativeRouteMatch ? lastMatch.matches : routerDelegate.currentConfiguration; + final RouteMatchList matchList = lastMatch is ImperativeRouteMatch + ? lastMatch.matches + : routerDelegate.currentConfiguration; return matchList.uri.toString(); } } @@ -290,13 +311,17 @@ class FFParameters { // Parameters are empty if the params map is empty or if the only parameter // present is the special extra parameter reserved for the transition info. bool get isEmpty => - state.allParams.isEmpty || (state.allParams.length == 1 && state.extraMap.containsKey(kTransitionInfoKey)); - bool isAsyncParam(MapEntry param) => asyncParams.containsKey(param.key) && param.value is String; + state.allParams.isEmpty || + (state.allParams.length == 1 && + state.extraMap.containsKey(kTransitionInfoKey)); + bool isAsyncParam(MapEntry param) => + asyncParams.containsKey(param.key) && param.value is String; bool get hasFutures => state.allParams.entries.any(isAsyncParam); Future completeFutures() => Future.wait( state.allParams.entries.where(isAsyncParam).map( (param) async { - final doc = await asyncParams[param.key]!(param.value).onError((_, __) => null); + final doc = await asyncParams[param.key]!(param.value) + .onError((_, __) => null); if (doc != null) { futureParamValues[param.key] = doc; return true; @@ -370,7 +395,9 @@ class FFRoute { key: state.pageKey, child: child, transitionDuration: transitionInfo.duration, - transitionsBuilder: (context, animation, secondaryAnimation, child) => PageTransition( + transitionsBuilder: + (context, animation, secondaryAnimation, child) => + PageTransition( type: transitionInfo.transitionType, duration: transitionInfo.duration, reverseDuration: transitionInfo.duration, @@ -402,7 +429,8 @@ class TransitionInfo { final Duration duration; final Alignment? alignment; - static TransitionInfo appDefault() => const TransitionInfo(hasTransition: false); + static TransitionInfo appDefault() => + const TransitionInfo(hasTransition: false); } class RootPageContext { @@ -414,7 +442,9 @@ class RootPageContext { final rootPageContext = context.read(); final isRootPage = rootPageContext?.isRootPage ?? false; final location = GoRouterState.of(context).uri.toString(); - return isRootPage && location != '/' && location != rootPageContext?.errorRoute; + return isRootPage && + location != '/' && + location != rootPageContext?.errorRoute; } static Widget wrap(Widget child, {String? errorRoute}) => Provider.value( diff --git a/lib/main.dart b/lib/main.dart index de20064f..44f93c98 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -18,6 +18,7 @@ import 'package:hub/flutter_flow/internationalization.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; import 'package:hub/shared/helpers/base_storage.dart'; import 'package:hub/shared/helpers/storage_helper.dart'; +import 'package:hub/shared/services/deeplink/deep_link_service.dart'; import 'package:hub/shared/services/localization/localization_service.dart'; import 'package:responsive_framework/responsive_framework.dart'; @@ -81,7 +82,8 @@ Future _initializeFlutterFlow() async { Future _foregroundHandlerMessage(RemoteMessage message) async { if (message.data['click_action'] == 'enroll_cond') { - await StorageHelper().set(SecureStorageKey.haveLocal.value, 'true', Storage.SecureStorage); + await StorageHelper() + .set(SecureStorageKey.haveLocal.value, 'true', Storage.SecureStorage); StorageHelper().context?.go('/homePage'); } @@ -95,7 +97,8 @@ Future _foregroundHandlerMessage(RemoteMessage message) async { Future _backgroundHandlerMessage(RemoteMessage message) async { if (message.data['click_action'] == 'enroll_cond') { - await StorageHelper().set(SecureStorageKey.haveLocal.value, 'true', Storage.SecureStorage); + await StorageHelper() + .set(SecureStorageKey.haveLocal.value, 'true', Storage.SecureStorage); StorageHelper().context?.go('/homePage'); } } @@ -106,7 +109,8 @@ class App extends StatefulWidget { @override State createState() => _AppState(); - static _AppState of(BuildContext context) => context.findAncestorStateOfType<_AppState>()!; + static _AppState of(BuildContext context) => + context.findAncestorStateOfType<_AppState>()!; } class _AppState extends State with WidgetsBindingObserver { @@ -148,7 +152,8 @@ class _AppState extends State with WidgetsBindingObserver { }), ), ); - final Iterable>? localizationsDelegates = const [ + final Iterable>? localizationsDelegates = + const [ FFLocalizationsDelegate(), GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, @@ -187,16 +192,19 @@ class _AppState extends State with WidgetsBindingObserver { FirebaseMessaging.onMessage.listen(_foregroundHandlerMessage); FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) async { if (message.data['click_action'] == 'enroll_cond') { - await StorageHelper().set(SecureStorageKey.haveLocal.value, 'true', Storage.SecureStorage); + await StorageHelper().set( + SecureStorageKey.haveLocal.value, 'true', Storage.SecureStorage); log('onMessageOpenedApp'); } else { - onMessageReceived(message.data, message.notification!.body, message.data['click_action']); + onMessageReceived(message.data, message.notification!.body, + message.data['click_action']); } }); FirebaseMessaging.instance.getInitialMessage().then((message) async { if (message != null) { if (message.data['click_action'] == 'enroll_cond') { - await StorageHelper().set(SecureStorageKey.haveLocal.value, 'true', Storage.SecureStorage); + await StorageHelper().set( + SecureStorageKey.haveLocal.value, 'true', Storage.SecureStorage); log('getInitialMessage'); } } @@ -229,6 +237,7 @@ class _AppState extends State with WidgetsBindingObserver { ); _setupFirebaseMessaging(); + DeepLinkService().ensureInitialization(); } @override diff --git a/lib/pages/sign_in_page/sign_in_page_widget.dart b/lib/pages/sign_in_page/sign_in_page_widget.dart index 0e2d6cf1..0e79d9e1 100644 --- a/lib/pages/sign_in_page/sign_in_page_widget.dart +++ b/lib/pages/sign_in_page/sign_in_page_widget.dart @@ -25,9 +25,6 @@ class _SignInPageWidgetState extends State { void initState() { super.initState(); _model = createModel(context, () => SignInPageModel()); - WidgetsBinding.instance.addPostFrameCallback((_) async { - await DeepLinkService().ensureInitialization(); - }); } @override diff --git a/lib/pages/sign_up_page/sign_up_page_widget.dart b/lib/pages/sign_up_page/sign_up_page_widget.dart index acf0c74e..05146e41 100644 --- a/lib/pages/sign_up_page/sign_up_page_widget.dart +++ b/lib/pages/sign_up_page/sign_up_page_widget.dart @@ -26,9 +26,6 @@ class _SignUpPageWidgetState extends State { void initState() { super.initState(); _model = createModel(context, () => SignUpPageModel()); - WidgetsBinding.instance.addPostFrameCallback((_) async { - await DeepLinkService().ensureInitialization(); - }); } @override diff --git a/lib/pages/welcome_page/welcome_page_widget.dart b/lib/pages/welcome_page/welcome_page_widget.dart index c7dac14d..e8399f32 100644 --- a/lib/pages/welcome_page/welcome_page_widget.dart +++ b/lib/pages/welcome_page/welcome_page_widget.dart @@ -32,19 +32,19 @@ class _WelcomePageWidgetState extends State { // On page load action. SchedulerBinding.instance.addPostFrameCallback((_) async { if (isAndroid == true) { - await StorageHelper().set(SecureStorageKey.deviceType.value, 'Android', Storage.SecureStorage); + await StorageHelper().set(SecureStorageKey.deviceType.value, 'Android', + Storage.SecureStorage); setState(() {}); } else if (isiOS == true) { - await StorageHelper().set(SecureStorageKey.deviceType.value, 'iOS', Storage.SecureStorage); + await StorageHelper().set( + SecureStorageKey.deviceType.value, 'iOS', Storage.SecureStorage); setState(() {}); } else { - await StorageHelper().set(SecureStorageKey.deviceType.value, 'Web', Storage.SecureStorage); + await StorageHelper().set( + SecureStorageKey.deviceType.value, 'Web', Storage.SecureStorage); setState(() {}); } }); - WidgetsBinding.instance.addPostFrameCallback((_) async { - await DeepLinkService().ensureInitialization(); - }); } @override diff --git a/lib/shared/services/deeplink/deep_link_service.dart b/lib/shared/services/deeplink/deep_link_service.dart index 58eda9a6..76715219 100644 --- a/lib/shared/services/deeplink/deep_link_service.dart +++ b/lib/shared/services/deeplink/deep_link_service.dart @@ -3,6 +3,7 @@ import 'dart:developer'; import 'package:app_links/app_links.dart'; import 'package:flutter/material.dart'; import 'package:hub/flutter_flow/flutter_flow_theme.dart'; +import 'package:hub/flutter_flow/nav/nav.dart'; import 'package:hub/pages/forgot_password_page/forgot_password_screen.dart'; import 'package:hub/shared/helpers/storage_helper.dart'; @@ -17,7 +18,7 @@ class DeepLinkService { StreamSubscription? _linkSubscription; bool _isInitialized = false; - Future ensureInitialization() async { + void ensureInitialization() async { if (_isInitialized) return; try { _appLinks = AppLinks(); @@ -54,22 +55,23 @@ class DeepLinkService { Future _showForgotPasswordScreen(String email, String token) async { try { - final FlutterFlowTheme theme = FlutterFlowTheme.of(StorageHelper().context!); - final ForgotPasswordScreen screen = ForgotPasswordScreen(email: email, token: token); - await showModalBottomSheet( - context: StorageHelper().context!, - builder: (context) => Padding( - padding: MediaQuery.viewInsetsOf(context), - child: screen, - ), - isScrollControlled: true, - backgroundColor: theme.primaryBackground, - showDragHandle: true, - useSafeArea: true, - enableDrag: true, - ).whenComplete(() { - StorageHelper().isRecovered = false; - print('showModalBottomSheet completed'); + WidgetsBinding.instance.addPostFrameCallback((_) async { + await showModalBottomSheet( + context: key.currentContext!, + builder: (context) => Padding( + padding: MediaQuery.viewInsetsOf(context), + child: ForgotPasswordScreen(email: email, token: token), + ), + isScrollControlled: true, + backgroundColor: + FlutterFlowTheme.of(key.currentContext!).primaryBackground, + showDragHandle: true, + useSafeArea: true, + enableDrag: true, + ).whenComplete(() { + StorageHelper().isRecovered = false; + print('showModalBottomSheet completed'); + }); }); } catch (e, s) { print('Error showing forgot password screen: $e, $s'); From 280a222a0854b819e8358804ec71cbbbeafdbe35 Mon Sep 17 00:00:00 2001 From: Ivan Antunes Date: Tue, 19 Nov 2024 15:27:54 -0300 Subject: [PATCH 15/22] new version testing --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 1c073b80..6b67fa71 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: A new Flutter project. publish_to: "none" -version: 1.2.0+14 +version: 1.2.1+17 environment: sdk: ">=3.0.0 <4.0.0" From 738c74d3ab6f8f18f4151cccac157824d768715f Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Thu, 21 Nov 2024 10:09:38 -0300 Subject: [PATCH 16/22] wip: change appDelegate --- ios/Runner/AppDelegate.swift | 14 ++++--- pubspec.lock | 39 ------------------- pubspec.yaml | 5 ++- .../integration_test}/app_test.dart | 0 4 files changed, 12 insertions(+), 46 deletions(-) rename {integration_test => test/integration_test}/app_test.dart (100%) diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index dd23187e..a98fecb8 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -1,8 +1,8 @@ import UIKit -import app_links import Flutter +import app_links -@main +@UIApplicationMain @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, @@ -10,13 +10,17 @@ import Flutter ) -> Bool { GeneratedPluginRegistrant.register(with: self) - // Retrieve the link from parameters + // Handle deep link if let url = AppLinks.shared.getLink(launchOptions: launchOptions) { - // We have a link, propagate it to your Flutter app or not AppLinks.shared.handleLink(url: url) - return true // Returning true will stop the propagation to other packages + return true } return super.application(application, didFinishLaunchingWithOptions: launchOptions) } + + override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { + AppLinks.shared.handleLink(url: url) + return super.application(app, open: url, options: options) + } } \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index b1debc1d..254f2503 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -534,11 +534,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.4.1" - flutter_driver: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" flutter_expandable_fab: dependency: "direct main" description: @@ -754,11 +749,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.0" - fuchsia_remote_debug_protocol: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" go_router: dependency: "direct main" description: @@ -887,11 +877,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.1+1" - integration_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" intl: dependency: "direct main" description: @@ -1252,14 +1237,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" - process: - dependency: transitive - description: - name: process - sha256: "21e54fd2faf1b5bdd5102afd25012184a6793927648ea81eea80552ac9405b32" - url: "https://pub.dev" - source: hosted - version: "5.0.2" provider: dependency: "direct main" description: @@ -1489,14 +1466,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - sync_http: - dependency: transitive - description: - name: sync_http - sha256: "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961" - url: "https://pub.dev" - source: hosted - version: "0.3.1" synchronized: dependency: "direct main" description: @@ -1657,14 +1626,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.5.1" - webdriver: - dependency: transitive - description: - name: webdriver - sha256: "003d7da9519e1e5f329422b36c4dcdf18d7d2978d1ba099ea4e45ba490ed845e" - url: "https://pub.dev" - source: hosted - version: "3.0.3" webview_flutter: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 6b67fa71..f52a159b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -114,8 +114,9 @@ dev_dependencies: lints: ^5.0.0 # build_runner: ^2.4.13 # mockito: ^5.4.4 - integration_test: - sdk: flutter + # integration_test: + # sdk: flutter + flutter_test: sdk: flutter diff --git a/integration_test/app_test.dart b/test/integration_test/app_test.dart similarity index 100% rename from integration_test/app_test.dart rename to test/integration_test/app_test.dart From 087bbd5840081aa62f501507767dc9679cce11d5 Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Thu, 21 Nov 2024 11:14:14 -0300 Subject: [PATCH 17/22] WIP --- pubspec.lock | 140 +++++++++++++++++++++++++-------------------------- pubspec.yaml | 8 +-- 2 files changed, 74 insertions(+), 74 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index 254f2503..b0e34950 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -165,10 +165,10 @@ packages: dependency: transitive description: name: camera_avfoundation - sha256: "0d04cec8715b59fb6dc60eefb47e69024f51233c570e475b886dc9290568bca7" + sha256: "2e4c568f70e406ccb87376bc06b53d2f5bebaab71e2fbcc1a950e31449381bcf" url: "https://pub.dev" source: hosted - version: "0.9.17+4" + version: "0.9.17+5" camera_platform_interface: dependency: transitive description: @@ -205,10 +205,10 @@ packages: dependency: transitive description: name: cli_util - sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 + sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c url: "https://pub.dev" source: hosted - version: "0.4.1" + version: "0.4.2" clock: dependency: transitive description: @@ -229,10 +229,10 @@ packages: dependency: "direct main" description: name: connectivity_plus - sha256: "2056db5241f96cdc0126bd94459fc4cdc13876753768fc7a31c425e50a7177d0" + sha256: "876849631b0c7dc20f8b471a2a03142841b482438e3b707955464f5ffca3e4c3" url: "https://pub.dev" source: hosted - version: "6.0.5" + version: "6.1.0" connectivity_plus_platform_interface: dependency: transitive description: @@ -261,10 +261,10 @@ packages: dependency: "direct main" description: name: crypto - sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27 + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.0.6" csv: dependency: "direct main" description: @@ -341,10 +341,10 @@ packages: dependency: "direct main" description: name: equatable - sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2 + sha256: b35578f687b79243d39008c44d638474d93e9091e578c970efef41ce0c3fa000 url: "https://pub.dev" source: hosted - version: "2.0.5" + version: "2.0.6" fake_async: dependency: transitive description: @@ -365,10 +365,10 @@ packages: dependency: transitive description: name: file - sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "7.0.1" file_picker: dependency: "direct main" description: @@ -381,10 +381,10 @@ packages: dependency: transitive description: name: file_selector_linux - sha256: "712ce7fab537ba532c8febdb1a8f167b32441e74acd68c3ccb2e36dcb52c4ab2" + sha256: b2b91daf8a68ecfa4a01b778a6f52edef9b14ecd506e771488ea0f2e0784198b url: "https://pub.dev" source: hosted - version: "0.9.3" + version: "0.9.3+1" file_selector_macos: dependency: transitive description: @@ -501,10 +501,10 @@ packages: dependency: transitive description: name: fixnum - sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" flutter: dependency: "direct main" description: flutter @@ -631,10 +631,10 @@ packages: dependency: "direct main" description: name: flutter_riverpod - sha256: "711d916456563f715bde1e139d7cfdca009f8264befab3ac9f8ded8b6ec26405" + sha256: "9532ee6db4a943a1ed8383072a2e3eeda041db5657cdf6d2acecf3c21ecbe7e1" url: "https://pub.dev" source: hosted - version: "2.5.3" + version: "2.6.1" flutter_secure_storage: dependency: "direct main" description: @@ -711,10 +711,10 @@ packages: dependency: "direct main" description: name: flutter_svg - sha256: "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2" + sha256: "936d9c1c010d3e234d1672574636f3352b4941ca3decaddd3cafaeb9ad49c471" url: "https://pub.dev" source: hosted - version: "2.0.10+1" + version: "2.0.15" flutter_test: dependency: "direct dev" description: flutter @@ -737,10 +737,10 @@ packages: dependency: "direct main" description: name: font_awesome_flutter - sha256: "275ff26905134bcb59417cf60ad979136f1f8257f2f449914b2c3e05bbb4cd6f" + sha256: d3a89184101baec7f4600d58840a764d2ef760fe1c5a20ef9e6b0e9b24a07a3a url: "https://pub.dev" source: hosted - version: "10.7.0" + version: "10.8.0" from_css_color: dependency: "direct main" description: @@ -753,10 +753,10 @@ packages: dependency: "direct main" description: name: go_router - sha256: "6f1b756f6e863259a99135ff3c95026c3cdca17d10ebef2bba2261a25ddc8bbc" + sha256: "8ae664a70174163b9f65ea68dd8673e29db8f9095de7b5cd00e167c621f4fef5" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "14.6.0" google_fonts: dependency: "direct main" description: @@ -809,10 +809,10 @@ packages: dependency: "direct dev" description: name: image - sha256: "2237616a36c0d69aef7549ab439b833fb7f9fb9fc861af2cc9ac3eedddd69ca8" + sha256: f31d52537dc417fdcde36088fdf11d191026fd5e4fae742491ebd40e5a8bea7d url: "https://pub.dev" source: hosted - version: "4.2.0" + version: "4.3.0" image_picker: dependency: "direct main" description: @@ -825,18 +825,18 @@ packages: dependency: "direct main" description: name: image_picker_android - sha256: d34e0d9e024e81321b2aeed7b202ec6181cc282e6a1c0c0b4e6ad07ef1065d82 + sha256: "8faba09ba361d4b246dc0a17cb4289b3324c2b9f6db7b3d457ee69106a86bd32" url: "https://pub.dev" source: hosted - version: "0.8.12+16" + version: "0.8.12+17" image_picker_for_web: dependency: "direct main" description: name: image_picker_for_web - sha256: "65d94623e15372c5c51bebbcb820848d7bcb323836e12dfdba60b5d3a8b39e50" + sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.0.6" image_picker_ios: dependency: "direct main" description: @@ -1017,10 +1017,10 @@ packages: dependency: "direct main" description: name: material_symbols_icons - sha256: fa19f3a99f280c81fe23d7f7ef1c4000511fa40ee52df43e0a3a4c91184ddb15 + sha256: "1dea2aef1c83434f832f14341a5ffa1254e76b68e4d90333f95f8a2643bf1024" url: "https://pub.dev" source: hosted - version: "4.2788.0" + version: "4.2799.0" maybe_just_nothing: dependency: transitive description: @@ -1097,18 +1097,18 @@ packages: dependency: transitive description: name: path_parsing - sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.1.0" path_provider: dependency: "direct main" description: name: path_provider - sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 + sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.5" path_provider_android: dependency: "direct main" description: @@ -1169,10 +1169,10 @@ packages: dependency: transitive description: name: permission_handler_android - sha256: "76e4ab092c1b240d31177bb64d2b0bea43f43d0e23541ec866151b9f7b2490fa" + sha256: "71bbecfee799e65aff7c744761a57e817e73b738fedf62ab7afd5593da21f9f1" url: "https://pub.dev" source: hosted - version: "12.0.12" + version: "12.0.13" permission_handler_apple: dependency: transitive description: @@ -1185,10 +1185,10 @@ packages: dependency: transitive description: name: permission_handler_html - sha256: af26edbbb1f2674af65a8f4b56e1a6f526156bc273d0e65dd8075fab51c78851 + sha256: "38f000e83355abb3392140f6bc3030660cfaef189e1f87824facb76300b4ff24" url: "https://pub.dev" source: hosted - version: "0.1.3+2" + version: "0.1.3+5" permission_handler_platform_interface: dependency: transitive description: @@ -1225,10 +1225,10 @@ packages: dependency: transitive description: name: platform - sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65" + sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984" url: "https://pub.dev" source: hosted - version: "3.1.5" + version: "3.1.6" plugin_platform_interface: dependency: "direct main" description: @@ -1281,10 +1281,10 @@ packages: dependency: transitive description: name: riverpod - sha256: c86fedfb45dd1da98ee6493dd9374325cdf494e7d523ebfb0c387eecc5f7b5c9 + sha256: "59062512288d3056b2321804332a13ffdd1bf16df70dcc8e506e411280a72959" url: "https://pub.dev" source: hosted - version: "2.5.3" + version: "2.6.1" rxdart: dependency: "direct main" description: @@ -1313,10 +1313,10 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051" + sha256: "95f9997ca1fb9799d494d0cb2a780fd7be075818d59f00c43832ed112b158a82" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.3.3" shared_preferences_android: dependency: "direct main" description: @@ -1390,10 +1390,10 @@ packages: dependency: "direct main" description: name: sqflite - sha256: "79a297dc3cc137e758c6a4baf83342b039e5a6d2436fcdf3f96a00adaaf2ad62" + sha256: "2d7299468485dca85efeeadf5d38986909c5eb0cd71fd3db2c2f000e6c9454bb" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.1" sqflite_android: dependency: transitive description: @@ -1406,18 +1406,18 @@ packages: dependency: transitive description: name: sqflite_common - sha256: "4468b24876d673418a7b7147e5a08a715b4998a7ae69227acafaab762e0e5490" + sha256: "761b9740ecbd4d3e66b8916d784e581861fd3c3553eda85e167bc49fdb68f709" url: "https://pub.dev" source: hosted - version: "2.5.4+5" + version: "2.5.4+6" sqflite_darwin: dependency: transitive description: name: sqflite_darwin - sha256: "769733dddf94622d5541c73e4ddc6aa7b252d865285914b6fcd54a63c4b4f027" + sha256: "96a698e2bc82bd770a4d6aab00b42396a7c63d9e33513a56945cbccb594c2474" url: "https://pub.dev" source: hosted - version: "2.4.1-1" + version: "2.4.1" sqflite_platform_interface: dependency: transitive description: @@ -1502,10 +1502,10 @@ packages: dependency: transitive description: name: typed_data - sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.4.0" url_launcher: dependency: "direct main" description: @@ -1518,10 +1518,10 @@ packages: dependency: "direct main" description: name: url_launcher_android - sha256: "8fc3bae0b68c02c47c5c86fa8bfa74471d42687b0eded01b78de87872db745e2" + sha256: "6fc2f56536ee873eeb867ad176ae15f304ccccc357848b351f6f0d8d4a40d193" url: "https://pub.dev" source: hosted - version: "6.3.12" + version: "6.3.14" url_launcher_ios: dependency: "direct main" description: @@ -1534,10 +1534,10 @@ packages: dependency: transitive description: name: url_launcher_linux - sha256: e2b9622b4007f97f504cd64c0128309dfb978ae66adbe944125ed9e1750f06af + sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935" url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "3.2.1" url_launcher_macos: dependency: transitive description: @@ -1566,10 +1566,10 @@ packages: dependency: transitive description: name: url_launcher_windows - sha256: "49c10f879746271804767cb45551ec5592cdab00ee105c06dddde1a98f73b185" + sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "3.1.3" uuid: dependency: "direct overridden" description: @@ -1582,26 +1582,26 @@ packages: dependency: transitive description: name: vector_graphics - sha256: "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3" + sha256: "27d5fefe86fb9aace4a9f8375b56b3c292b64d8c04510df230f849850d912cb7" url: "https://pub.dev" source: hosted - version: "1.1.11+1" + version: "1.1.15" vector_graphics_codec: dependency: transitive description: name: vector_graphics_codec - sha256: c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da + sha256: "2430b973a4ca3c4dbc9999b62b8c719a160100dcbae5c819bae0cacce32c9cdb" url: "https://pub.dev" source: hosted - version: "1.1.11+1" + version: "1.1.12" vector_graphics_compiler: dependency: transitive description: name: vector_graphics_compiler - sha256: "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81" + sha256: ab9ff38fc771e9ee1139320adbe3d18a60327370c218c60752068ebee4b49ab1 url: "https://pub.dev" source: hosted - version: "1.1.11+1" + version: "1.1.15" vector_math: dependency: transitive description: @@ -1638,10 +1638,10 @@ packages: dependency: transitive description: name: webview_flutter_android - sha256: "74693a212d990b32e0b7055d27db973a18abf31c53942063948cdfaaef9787ba" + sha256: "285cedfd9441267f6cca8843458620b5fda1af75b04f5818d0441acda5d7df19" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "4.1.0" webview_flutter_platform_interface: dependency: transitive description: @@ -1654,10 +1654,10 @@ packages: dependency: transitive description: name: webview_flutter_wkwebview - sha256: d4034901d96357beb1b6717ebf7d583c88e40cfc6eb85fe76dd1bf0979a9f251 + sha256: "3be297aa4ca78205abdd284cf55f168c35246c75b3079990ad8ba9d257681a30" url: "https://pub.dev" source: hosted - version: "3.16.0" + version: "3.16.2" win32: dependency: "direct overridden" description: diff --git a/pubspec.yaml b/pubspec.yaml index f52a159b..37258a93 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -28,7 +28,7 @@ dependencies: firebase_messaging: ^15.1.0 dropdown_button2: 2.3.9 easy_debounce: 2.0.3 - equatable: 2.0.5 + equatable: ^2.0.6 file_picker: ^8.0.7 flutter_expandable_fab: ^2.1.0 firebase_analytics: ^11.3.0 @@ -45,8 +45,8 @@ dependencies: flutter_secure_storage_windows: 3.1.2 flutter_spinkit: 5.2.1 flutter_staggered_grid_view: 0.7.0 - flutter_svg: 2.0.10+1 - font_awesome_flutter: 10.7.0 + flutter_svg: ^2.0.15 + font_awesome_flutter: ^10.8.0 from_css_color: 2.0.0 go_router: ^14.3.0 google_fonts: 6.2.1 @@ -110,7 +110,7 @@ dependency_overrides: dev_dependencies: flutter_launcher_icons: ^0.14.1 flutter_lints: ^5.0.0 - image: 4.2.0 + image: ^4.3.0 lints: ^5.0.0 # build_runner: ^2.4.13 # mockito: ^5.4.4 From 00e96b5428d45dea67dbe80758e53403632ae2b4 Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Thu, 21 Nov 2024 13:19:14 -0300 Subject: [PATCH 18/22] WIP --- ios/Runner/AppDelegate.swift | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index a98fecb8..4f2d7865 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -1,6 +1,6 @@ import UIKit + import Flutter -import app_links @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate { @@ -9,18 +9,6 @@ import app_links didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { GeneratedPluginRegistrant.register(with: self) - - // Handle deep link - if let url = AppLinks.shared.getLink(launchOptions: launchOptions) { - AppLinks.shared.handleLink(url: url) - return true - } - return super.application(application, didFinishLaunchingWithOptions: launchOptions) } - - override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { - AppLinks.shared.handleLink(url: url) - return super.application(app, open: url, options: options) - } } \ No newline at end of file From 693ebcd670856c7e373f5218cd5f342fd1f94d38 Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Thu, 21 Nov 2024 13:32:29 -0300 Subject: [PATCH 19/22] WIP --- ios/Runner/AppDelegate.swift | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 4f2d7865..dd23187e 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -1,14 +1,22 @@ import UIKit - +import app_links import Flutter -@UIApplicationMain +@main @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { GeneratedPluginRegistrant.register(with: self) + + // Retrieve the link from parameters + if let url = AppLinks.shared.getLink(launchOptions: launchOptions) { + // We have a link, propagate it to your Flutter app or not + AppLinks.shared.handleLink(url: url) + return true // Returning true will stop the propagation to other packages + } + return super.application(application, didFinishLaunchingWithOptions: launchOptions) } } \ No newline at end of file From ec5abee2aadba28010ec2ed42494966505039b7e Mon Sep 17 00:00:00 2001 From: jantunesmessias Date: Thu, 21 Nov 2024 14:36:42 -0300 Subject: [PATCH 20/22] fix: redicionar para / apos modal de recuperar senha --- ios/Podfile.lock | 10 ++-------- ios/Runner/AppDelegate.swift | 2 +- lib/flutter_flow/nav/nav.dart | 23 +++++++++++++++++++++++ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 777455c5..2fbe354a 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -217,8 +217,6 @@ PODS: - GTMSessionFetcher/Core (3.5.0) - image_picker_ios (0.0.1): - Flutter - - integration_test (0.0.1): - - Flutter - IosAwnCore (0.10.0) - local_auth_darwin (0.0.1): - Flutter @@ -292,7 +290,6 @@ DEPENDENCIES: - google_mlkit_commons (from `.symlinks/plugins/google_mlkit_commons/ios`) - google_mlkit_face_detection (from `.symlinks/plugins/google_mlkit_face_detection/ios`) - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - - integration_test (from `.symlinks/plugins/integration_test/ios`) - local_auth_darwin (from `.symlinks/plugins/local_auth_darwin/darwin`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) @@ -372,8 +369,6 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/google_mlkit_face_detection/ios" image_picker_ios: :path: ".symlinks/plugins/image_picker_ios/ios" - integration_test: - :path: ".symlinks/plugins/integration_test/ios" local_auth_darwin: :path: ".symlinks/plugins/local_auth_darwin/darwin" path_provider_foundation: @@ -396,7 +391,7 @@ SPEC CHECKSUMS: app_tracking_transparency: e169b653478da7bb15a6c61209015378ca73e375 awesome_notifications: dd5518ff1c80be03d4f1c40f04da9d9cc2a37af5 camera_avfoundation: dd002b0330f4981e1bbcb46ae9b62829237459a4 - connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db + connectivity_plus: 4c41c08fc6d7c91f63bc7aec70ffe3730b04f563 device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 @@ -428,7 +423,6 @@ SPEC CHECKSUMS: GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 - integration_test: 252f60fa39af5e17c3aa9899d35d908a0721b573 IosAwnCore: 653786a911089012092ce831f2945cd339855a89 local_auth_darwin: 66e40372f1c29f383a314c738c7446e2f7fdadc3 MLImage: 0ad1c5f50edd027672d8b26b0fee78a8b4a0fc56 @@ -444,7 +438,7 @@ SPEC CHECKSUMS: SDWebImage: 8a6b7b160b4d710e2a22b6900e25301075c34cb3 share_plus: 8875f4f2500512ea181eef553c3e27dba5135aad shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 - sqflite_darwin: a553b1fd6fe66f53bbb0fe5b4f5bab93f08d7a13 + sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index dd23187e..5d9b466c 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -1,6 +1,6 @@ import UIKit import app_links -import Flutter +import Flutter @main @objc class AppDelegate: FlutterAppDelegate { diff --git a/lib/flutter_flow/nav/nav.dart b/lib/flutter_flow/nav/nav.dart index 3982df52..922467a0 100644 --- a/lib/flutter_flow/nav/nav.dart +++ b/lib/flutter_flow/nav/nav.dart @@ -49,6 +49,29 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) { navigatorKey: key, initialLocation: '/', debugLogDiagnostics: true, + redirect: (context, state) { + log('state.allParams: ${state.allParams}'); + log('state.path: ${state.path}'); + log('state.extra: ${state.extra}'); + log('state.transitionInfo: ${state.transitionInfo}'); + log('state.pageKey: ${state.pageKey}'); + log('state.name: ${state.name}'); + log('state.matchedLocation: ${state.matchedLocation}'); + log('state.topRoute: ${state.topRoute}'); + log('state.uri: ${state.uri}'); + log('state.pathParameters: ${state.pathParameters}'); + log('Context ${context.toString()}'); + log('Context: ${context.describeWidget('context')}'); + log('Context: ${context.describeElement('context')}'); + + if (state.allParams.toString().contains("email") && + state.matchedLocation == '/') { + log('Redirecting to forgotPassword'); + throw Exception('Redirecting to forgotPassword'); + // context.go('/signInPage'); + } + return null; + }, refreshListenable: appStateNotifier, // errorBuilder: (context, state) => appStateNotifier.showSplashImage // ? Builder( From 7535d5c4085be4a552013f3f86a1a1b339eaab82 Mon Sep 17 00:00:00 2001 From: "J. A. Messias" Date: Thu, 21 Nov 2024 14:42:41 -0300 Subject: [PATCH 21/22] WIP --- lib/flutter_flow/nav/nav.dart | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/flutter_flow/nav/nav.dart b/lib/flutter_flow/nav/nav.dart index 922467a0..282dcc63 100644 --- a/lib/flutter_flow/nav/nav.dart +++ b/lib/flutter_flow/nav/nav.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:developer'; +import 'dart:io'; import 'package:flutter/material.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; @@ -63,12 +64,13 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) { log('Context ${context.toString()}'); log('Context: ${context.describeWidget('context')}'); log('Context: ${context.describeElement('context')}'); - - if (state.allParams.toString().contains("email") && - state.matchedLocation == '/') { - log('Redirecting to forgotPassword'); - throw Exception('Redirecting to forgotPassword'); - // context.go('/signInPage'); + if (Platform.isIOS) { + if (state.allParams.toString().contains("email") && + state.matchedLocation == '/') { + log('Redirecting to forgotPassword'); + throw Exception('Redirecting to forgotPassword'); + // context.go('/signInPage'); + } } return null; }, From 9482e1897a879be33b7333becea92fe92468e7c1 Mon Sep 17 00:00:00 2001 From: jantunesmessias Date: Thu, 21 Nov 2024 14:50:27 -0300 Subject: [PATCH 22/22] wip --- lib/flutter_flow/nav/nav.dart | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/lib/flutter_flow/nav/nav.dart b/lib/flutter_flow/nav/nav.dart index 282dcc63..860e6c05 100644 --- a/lib/flutter_flow/nav/nav.dart +++ b/lib/flutter_flow/nav/nav.dart @@ -51,25 +51,9 @@ GoRouter createRouter(AppStateNotifier appStateNotifier) { initialLocation: '/', debugLogDiagnostics: true, redirect: (context, state) { - log('state.allParams: ${state.allParams}'); - log('state.path: ${state.path}'); - log('state.extra: ${state.extra}'); - log('state.transitionInfo: ${state.transitionInfo}'); - log('state.pageKey: ${state.pageKey}'); - log('state.name: ${state.name}'); - log('state.matchedLocation: ${state.matchedLocation}'); - log('state.topRoute: ${state.topRoute}'); - log('state.uri: ${state.uri}'); - log('state.pathParameters: ${state.pathParameters}'); - log('Context ${context.toString()}'); - log('Context: ${context.describeWidget('context')}'); - log('Context: ${context.describeElement('context')}'); if (Platform.isIOS) { - if (state.allParams.toString().contains("email") && - state.matchedLocation == '/') { - log('Redirecting to forgotPassword'); + if (state.uri.toString().contains("freaccess://changepass/")) { throw Exception('Redirecting to forgotPassword'); - // context.go('/signInPage'); } } return null;