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/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/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/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/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();
}
diff --git a/lib/flutter_flow/nav/nav.dart b/lib/flutter_flow/nav/nav.dart
index 5200e876..07f4bbfb 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/backend/schema/util/schema_util.dart';
@@ -39,6 +40,8 @@ export 'serialization_util.dart';
const kTransitionInfoKey = '__transition_info__';
+final GlobalKey key = GlobalKey();
+
class AppStateNotifier extends ChangeNotifier {
AppStateNotifier._();
@@ -55,8 +58,17 @@ class AppStateNotifier extends ChangeNotifier {
GoRouter createRouter(AppStateNotifier appStateNotifier) {
return GoRouter(
+ navigatorKey: key,
initialLocation: '/',
debugLogDiagnostics: true,
+ redirect: (context, state) {
+ if (Platform.isIOS) {
+ if (state.uri.toString().contains("freaccess://changepass/")) {
+ throw Exception('Redirecting to forgotPassword');
+ }
+ }
+ return null;
+ },
refreshListenable: appStateNotifier,
// errorBuilder: (context, state) => appStateNotifier.showSplashImage
// ? Builder( builder: (context) => Container(color: FlutterFlowTheme.of(context).primary, child: Image.asset( 'assets/images/logo.svg', fit: BoxFit.cover)))
@@ -72,19 +84,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();
}
@@ -183,7 +204,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!)),
);
}
@@ -197,7 +220,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)
@@ -210,8 +234,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();
}
}
@@ -224,13 +249,17 @@ class FFParameters {
Map futureParamValues = {};
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;
@@ -285,7 +314,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,
@@ -312,7 +343,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 {
@@ -324,7 +356,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}) =>
diff --git a/lib/main.dart b/lib/main.dart
index 38828b06..44f93c98 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,10 +16,11 @@ 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/deeplink/deep_link_service.dart';
import 'package:hub/shared/services/localization/localization_service.dart';
+
import 'package:responsive_framework/responsive_framework.dart';
import 'backend/notifications/firebase_messaging_service.dart';
@@ -82,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');
}
@@ -96,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');
}
}
@@ -107,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 {
@@ -116,8 +119,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,
@@ -151,7 +152,8 @@ class _AppState extends State with WidgetsBindingObserver {
}),
),
);
- final Iterable>? localizationsDelegates = const [
+ final Iterable>? localizationsDelegates =
+ const [
FFLocalizationsDelegate(),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
@@ -179,41 +181,6 @@ class _AppState extends State with WidgetsBindingObserver {
);
};
- Future initDeepLinks() async {
- _appLinks = AppLinks();
- _linkSubscription = _appLinks.uriLinkStream.listen((uri) {
- final bool isRecovered = StorageHelper().isRecovered;
- if (!isRecovered) openAppLink(uri);
- });
- }
-
- void openAppLink(Uri uri) {
- final bool isRecovered = StorageHelper().isRecovered;
- log('isRecovered: $isRecovered');
- if (isRecovered) return;
- StorageHelper().isRecovered = true;
- final String email = uri.queryParameters['email'] ?? '';
- final String token = uri.queryParameters['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;
- 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);
- }
- }
-
void _setupFirebaseMessaging() async {
FirebaseMessaging messaging = FirebaseMessaging.instance;
RemoteMessage? initialMessage = await messaging.getInitialMessage();
@@ -225,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');
}
}
@@ -262,16 +232,17 @@ 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();
- WidgetsBinding.instance.addPersistentFrameCallback((_) => initDeepLinks());
+ DeepLinkService().ensureInitialization();
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
- _linkSubscription?.cancel();
super.dispose();
}
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/pages/sign_in_page/sign_in_page_widget.dart b/lib/pages/sign_in_page/sign_in_page_widget.dart
index 471bbee2..0e79d9e1 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';
@@ -29,7 +30,6 @@ class _SignInPageWidgetState extends State {
@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..05146e41 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';
diff --git a/lib/pages/welcome_page/welcome_page_widget.dart b/lib/pages/welcome_page/welcome_page_widget.dart
index cb24d5e1..e8399f32 100644
--- a/lib/pages/welcome_page/welcome_page_widget.dart
+++ b/lib/pages/welcome_page/welcome_page_widget.dart
@@ -3,6 +3,7 @@ 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';
@@ -31,13 +32,16 @@ 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(() {});
}
});
@@ -46,7 +50,6 @@ class _WelcomePageWidgetState extends State {
@override
void dispose() {
_model.dispose();
-
super.dispose();
}
diff --git a/lib/shared/helpers/storage_helper.dart b/lib/shared/helpers/storage_helper.dart
index 582a3b4b..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;
@@ -24,7 +25,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/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;
}
}
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..76715219
--- /dev/null
+++ b/lib/shared/services/deeplink/deep_link_service.dart
@@ -0,0 +1,85 @@
+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';
+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';
+
+class DeepLinkService {
+ static final DeepLinkService _instance = DeepLinkService._internal();
+
+ factory DeepLinkService() => _instance;
+
+ DeepLinkService._internal();
+
+ late final AppLinks _appLinks;
+ StreamSubscription? _linkSubscription;
+ bool _isInitialized = false;
+
+ void ensureInitialization() async {
+ if (_isInitialized) return;
+ try {
+ _appLinks = AppLinks();
+ print('initDeepLinks');
+ _linkSubscription = _appLinks.uriLinkStream.listen((uri) async {
+ if (!StorageHelper().isRecovered) {
+ await _handleDeepLink(uri);
+ }
+ });
+ _isInitialized = true;
+ } catch (e) {
+ print('Error initializing deep links: $e');
+ }
+ }
+
+ Future _handleDeepLink(Uri uri) async {
+ 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');
+
+ if (email.isNotEmpty && token.isNotEmpty) {
+ await _showForgotPasswordScreen(email, token);
+ }
+ } catch (e, s) {
+ print('Error handling deep link: $e, $s');
+ log('Error handling', error: e, stackTrace: s);
+ }
+ }
+
+ Future _showForgotPasswordScreen(String email, String token) async {
+ try {
+ 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');
+ log('Error handling', error: e, stackTrace: s);
+ }
+ }
+
+ void dispose() {
+ _linkSubscription?.cancel();
+ }
+}
diff --git a/lib/shared/utils/device_util.dart b/lib/shared/utils/device_util.dart
index 844a3c16..da41877e 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';
@@ -13,7 +14,7 @@ class DeviceUtil {
return androidId;
} on PlatformException catch (e) {
- print("Failed to get Android ID: '${e.message}'.");
+ log("Failed to get Android ID: '${e.message}'.");
return null;
}
diff --git a/lib/shared/utils/log_util.dart b/lib/shared/utils/log_util.dart
index 5b9e2dc2..99dfab8e 100644
--- a/lib/shared/utils/log_util.dart
+++ b/lib/shared/utils/log_util.dart
@@ -5,13 +5,14 @@ import 'package:hub/backend/api_requests/api_calls.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);
diff --git a/pubspec.lock b/pubspec.lock
index dfdc8cb0..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
@@ -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:
@@ -636,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:
@@ -716,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
@@ -742,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:
@@ -754,19 +749,14 @@ 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:
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:
@@ -819,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:
@@ -835,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:
@@ -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:
@@ -1008,10 +993,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:
@@ -1032,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:
@@ -1112,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:
@@ -1184,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:
@@ -1200,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:
@@ -1240,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:
@@ -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:
@@ -1304,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:
@@ -1336,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:
@@ -1413,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:
@@ -1429,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:
@@ -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:
@@ -1533,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:
@@ -1549,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:
@@ -1565,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:
@@ -1597,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:
@@ -1613,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:
@@ -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:
@@ -1677,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:
@@ -1693,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 19780be7..37258a93 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"
@@ -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,18 +110,16 @@ 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
- integration_test:
- sdk: flutter
+ # 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 +129,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 +151,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
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