From 694e10fbbd4a4d2e921953fa50817b183d9b467f Mon Sep 17 00:00:00 2001 From: Lukas Hermann Date: Thu, 17 Apr 2025 15:52:56 +0200 Subject: [PATCH] chore: Libs Update, code polishing --- .fvmrc | 2 +- .templates/newDTO/___dto_name____dto.dart | 2 +- .../___feature_name____event.dart | 2 +- .../___feature_name____state.dart | 2 +- .../newModel/___model_name____model.dart | 2 +- .vscode/settings.json | 2 +- README.md | 2 +- android/app/build.gradle | 14 +- android/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- android/settings.gradle | 9 +- lib/app/navigation/app_router.dart | 2 +- lib/app/setup/setup_app.dart | 2 +- lib/app/theme/custom_system_bars_theme.dart | 2 +- .../expandable_single_child_scroll_view.dart | 2 +- .../dto/create_device_token_request_dto.dart | 2 +- lib/common/data/dto/user_response_dto.dart | 2 +- .../model/exception/custom_exception.dart | 40 +-- .../model/exception/validator_exception.dart | 22 +- lib/common/data/model/user_model.dart | 2 +- ...sign_in_with_auth_credential_use_case.dart | 5 +- .../validator/text_field_validator_state.dart | 23 +- lib/core/analytics/analytics_event.dart | 2 +- lib/core/analytics/analytics_screen_view.dart | 2 +- .../authentication/authentication_event.dart | 4 +- .../authentication/authentication_page.dart | 7 +- .../authentication/authentication_state.dart | 15 +- .../debug_tools/debug_tools_page_state.dart | 2 +- .../debug_tools_widgets_page_content.dart | 7 +- .../debug_tools_widgets_page_event.dart | 4 +- .../debug_tools_widgets_page_state.dart | 2 +- lib/features/profile/profile_event.dart | 4 +- lib/features/profile/profile_page.dart | 7 +- lib/features/profile/profile_state.dart | 2 +- makefile | 4 +- pubspec.lock | 296 +++++++++--------- pubspec.yaml | 52 +-- windows/flutter/generated_plugins.cmake | 1 + 38 files changed, 284 insertions(+), 272 deletions(-) diff --git a/.fvmrc b/.fvmrc index 0c75e23..b6a9abf 100644 --- a/.fvmrc +++ b/.fvmrc @@ -1,4 +1,4 @@ { - "flutter": "3.29.0", + "flutter": "3.29.3", "flavors": {} } \ No newline at end of file diff --git a/.templates/newDTO/___dto_name____dto.dart b/.templates/newDTO/___dto_name____dto.dart index 7517bcd..f8dd6e6 100644 --- a/.templates/newDTO/___dto_name____dto.dart +++ b/.templates/newDTO/___dto_name____dto.dart @@ -4,7 +4,7 @@ part '___dto_name____dto.freezed.dart'; part '___dto_name____dto.g.dart'; @freezed -class ___DtoName___DTO with _$___DtoName___DTO { +abstract class ___DtoName___DTO with _$___DtoName___DTO { const factory ___DtoName___DTO({ String? sampleField, }) = ____DtoName___DTO; diff --git a/.templates/newFeature/___feature_name___/___feature_name____event.dart b/.templates/newFeature/___feature_name___/___feature_name____event.dart index f0bbefd..aa203fa 100644 --- a/.templates/newFeature/___feature_name___/___feature_name____event.dart +++ b/.templates/newFeature/___feature_name___/___feature_name____event.dart @@ -6,7 +6,7 @@ import 'package:freezed_annotation/freezed_annotation.dart'; part '___feature_name____event.freezed.dart'; @freezed -class ___FeatureName___Event with _$___FeatureName___Event { +sealed class ___FeatureName___Event with _$___FeatureName___Event { const factory ___FeatureName___Event.error(CustomException error) = _Error; } diff --git a/.templates/newFeature/___feature_name___/___feature_name____state.dart b/.templates/newFeature/___feature_name___/___feature_name____state.dart index 62999f3..5db7ee6 100644 --- a/.templates/newFeature/___feature_name___/___feature_name____state.dart +++ b/.templates/newFeature/___feature_name___/___feature_name____state.dart @@ -6,7 +6,7 @@ part '___feature_name____state.freezed.dart'; part '___feature_name____state.g.dart'; @freezed -class ___FeatureName___State with _$___FeatureName___State { +abstract class ___FeatureName___State with _$___FeatureName___State { const factory ___FeatureName___State({ required bool sample, }) = ____FeatureName___State; diff --git a/.templates/newModel/___model_name____model.dart b/.templates/newModel/___model_name____model.dart index 080a7b5..0527574 100644 --- a/.templates/newModel/___model_name____model.dart +++ b/.templates/newModel/___model_name____model.dart @@ -3,7 +3,7 @@ import 'package:freezed_annotation/freezed_annotation.dart'; part '___model_name____model.freezed.dart'; @freezed -class ___ModelName___Model with _$___ModelName___Model { +abstract class ___ModelName___Model with _$___ModelName___Model { const ___ModelName___Model._(); const factory ___ModelName___Model({ diff --git a/.vscode/settings.json b/.vscode/settings.json index 44aaa76..e560150 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,3 @@ { - "dart.flutterSdkPath": ".fvm/versions/3.29.0" + "dart.flutterSdkPath": ".fvm/versions/3.29.3" } \ No newline at end of file diff --git a/README.md b/README.md index 9d55656..5587d9a 100644 --- a/README.md +++ b/README.md @@ -524,7 +524,7 @@ For the purpose of Fraud prevention, user safety, and compliance the dedicated A # Authors -- [Lukáš Hermann](mailto:lukas.hermann@strv.com) +- [Lukáš Hermann](mailto:hermann@helu.cz) - [Robert Oravec](mailto:robert.oravec@strv.com) - [Michal Urbánek](mailto:michal.urbanek@strv.com) diff --git a/android/app/build.gradle b/android/app/build.gradle index 8b3fb07..a5d67c5 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -39,19 +39,18 @@ releaseKeystoreProperties.load(new FileInputStream(rootProject.file("extras/keys android { compileSdkVersion compileAndroidSdkVersion - ndkVersion "27.2.12479018" + ndkVersion flutter.ndkVersion flavorDimensions "env" namespace "com.strv.flutter.template" compileOptions { + coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 - - coreLibraryDesugaringEnabled true } kotlinOptions { - jvmTarget = '17' + jvmTarget = JavaVersion.VERSION_17 } sourceSets { @@ -159,10 +158,9 @@ flutter { } dependencies { - implementation 'com.google.android.material:material:1.13.0-alpha05' - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.0" - androidTestUtil "androidx.test:orchestrator:1.4.2" - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' + implementation 'com.google.android.material:material:1.13.0-alpha12' + androidTestUtil "androidx.test:orchestrator:1.5.1" + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5' } // This section must appear at the bottom of the file diff --git a/android/gradle.properties b/android/gradle.properties index 6f5762f..1ac6f5e 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,4 +1,4 @@ -org.gradle.jvmargs=-Xmx2048M +org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError android.useAndroidX=true android.enableJetifier=true android.defaults.buildfeatures.buildconfig=true diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 32949f9..e6045a9 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip diff --git a/android/settings.gradle b/android/settings.gradle index 38378bc..0ef5b6d 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -5,10 +5,9 @@ pluginManagement { def flutterSdkPath = properties.getProperty("flutter.sdk") assert flutterSdkPath != null, "flutter.sdk not set in local.properties" return flutterSdkPath - } - settings.ext.flutterSdkPath = flutterSdkPath() + }() - includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") + includeBuild("$flutterSdkPath/packages/flutter_tools/gradle") repositories { google() @@ -19,8 +18,8 @@ pluginManagement { plugins { id "dev.flutter.flutter-plugin-loader" version "1.0.0" - id "com.android.application" version "8.1.4" apply false - id "org.jetbrains.kotlin.android" version "2.0.0" apply false + id "com.android.application" version "8.6.1" apply false + id "org.jetbrains.kotlin.android" version "2.1.20" apply false // START: FlutterFire Configuration id "com.google.gms.google-services" version "4.4.2" apply false diff --git a/lib/app/navigation/app_router.dart b/lib/app/navigation/app_router.dart index fc71dc0..bd7bd8d 100644 --- a/lib/app/navigation/app_router.dart +++ b/lib/app/navigation/app_router.dart @@ -29,7 +29,7 @@ class AppRouter extends RootStackRouter { initial: true, // We don't really need to animate landing page, because // it doesn't have UI, it's covered by splash screen. - durationInMilliseconds: 0, + duration: Duration.zero, ), // Subtitle: Authentication Route diff --git a/lib/app/setup/setup_app.dart b/lib/app/setup/setup_app.dart index ed9d5dd..9f16b5a 100644 --- a/lib/app/setup/setup_app.dart +++ b/lib/app/setup/setup_app.dart @@ -62,7 +62,7 @@ Future setupApp({required Flavor flavor}) async { // Load Theme Mode from DB before starting app await providerContainer.read(themeModeNotifierProvider.future); - // Setup reactive Edge-to-Edge support accross all platforms + // Setup reactive Edge-to-Edge support across all platforms await CustomSystemBarsTheme.setupSystemBarsTheme(providerContainer: providerContainer); } diff --git a/lib/app/theme/custom_system_bars_theme.dart b/lib/app/theme/custom_system_bars_theme.dart index e2a4f01..ef031d8 100644 --- a/lib/app/theme/custom_system_bars_theme.dart +++ b/lib/app/theme/custom_system_bars_theme.dart @@ -26,7 +26,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart'; class CustomSystemBarsTheme { static Future setupSystemBarsTheme({required ProviderContainer providerContainer}) async { final brightness = providerContainer.read(themeModeNotifierProvider.notifier).brightness; - SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); + await SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge); await _setupSystemBarsUpdateCallback(providerContainer: providerContainer); await setSystemBarsTheme(brightness: brightness); } diff --git a/lib/common/composition/expandable_single_child_scroll_view.dart b/lib/common/composition/expandable_single_child_scroll_view.dart index 1c873cd..76fc55f 100644 --- a/lib/common/composition/expandable_single_child_scroll_view.dart +++ b/lib/common/composition/expandable_single_child_scroll_view.dart @@ -4,10 +4,10 @@ import 'package:flutter/material.dart'; /// but when child doesn't fit, it will automatically become scrollable widget. class ExpandableSingleChildScrollView extends StatelessWidget { const ExpandableSingleChildScrollView({ - super.key, required this.child, this.padding = EdgeInsets.zero, this.alwaysScrollablePhysics = false, + super.key, }); final Widget child; diff --git a/lib/common/data/dto/create_device_token_request_dto.dart b/lib/common/data/dto/create_device_token_request_dto.dart index b337bf8..fb8c5ea 100644 --- a/lib/common/data/dto/create_device_token_request_dto.dart +++ b/lib/common/data/dto/create_device_token_request_dto.dart @@ -4,7 +4,7 @@ part 'create_device_token_request_dto.freezed.dart'; part 'create_device_token_request_dto.g.dart'; @Freezed(toJson: true) -class CreateDeviceTokenRequestDTO with _$CreateDeviceTokenRequestDTO { +abstract class CreateDeviceTokenRequestDTO with _$CreateDeviceTokenRequestDTO { const factory CreateDeviceTokenRequestDTO({ required String? token, }) = _CreateDeviceTokenRequestDTO; diff --git a/lib/common/data/dto/user_response_dto.dart b/lib/common/data/dto/user_response_dto.dart index 2321826..c2864d6 100644 --- a/lib/common/data/dto/user_response_dto.dart +++ b/lib/common/data/dto/user_response_dto.dart @@ -5,7 +5,7 @@ part 'user_response_dto.freezed.dart'; part 'user_response_dto.g.dart'; @freezed -class UserResponseDTO with _$UserResponseDTO { +abstract class UserResponseDTO with _$UserResponseDTO { const factory UserResponseDTO({ required String id, required UserRole role, diff --git a/lib/common/data/model/exception/custom_exception.dart b/lib/common/data/model/exception/custom_exception.dart index 085e8e1..6096ebe 100644 --- a/lib/common/data/model/exception/custom_exception.dart +++ b/lib/common/data/model/exception/custom_exception.dart @@ -12,18 +12,18 @@ import 'package:sign_in_with_apple/sign_in_with_apple.dart'; part 'custom_exception.freezed.dart'; @freezed -class CustomException with _$CustomException implements Exception { +sealed class CustomException with _$CustomException implements Exception { const CustomException._(); - const factory CustomException.general() = _General; - const factory CustomException.withMessage({String? message}) = _CustomExceptionWithMessage; - const factory CustomException.unauthenticated() = _Unauthenticated; - const factory CustomException.notConnectedToTheInternet() = _NotConnectedToTheInternet; - const factory CustomException.decodingFailed() = _DecodingFailed; + const factory CustomException.general() = CustomExceptionGeneral; + const factory CustomException.withMessage({String? message}) = CustomExceptionWithMessage; + const factory CustomException.unauthenticated() = CustomExceptionUnauthenticated; + const factory CustomException.notConnectedToTheInternet() = CustomExceptionNotConnectedToTheInternet; + const factory CustomException.decodingFailed() = CustomExceptionDecodingFailed; - // Title: Mapped Firebase exception with error code `credential-already-in-use`. - const factory CustomException.signInCancelled() = _SignInCancelled; - const factory CustomException.credentialAlreadyInUse({required AuthCredential? credential}) = _CredentialAlreadyInUse; + // Note: Mapped Firebase exception with error code `credential-already-in-use`. + const factory CustomException.signInCancelled() = CustomExceptionSignInCancelled; + const factory CustomException.credentialAlreadyInUse({required AuthCredential? credential}) = CustomExceptionCredentialAlreadyInUse; factory CustomException.fromErrorObject({required Object? error}) { Flogger.e('[CustomException] Received error $error, '); @@ -41,7 +41,7 @@ class CustomException with _$CustomException implements Exception { Flogger.e("[CustomException] error.response: ${error.response?.data["errorCode"]}"); } - // Title: This is the place to handle your own error codes, response, or states, and map them to you own CustomException. + // Note: This is the place to handle your own error codes, response, or states, and map them to you own CustomException. if (error.response?.statusCode == 401) { return const CustomException.unauthenticated(); @@ -69,19 +69,19 @@ class CustomException with _$CustomException implements Exception { } String getMessage({required BuildContext context}) { - return mapOrNull( - withMessage: (exception) => exception.message, - unauthenticated: (_) => context.locale.customExceptionUnauthenticatedMessage, - notConnectedToTheInternet: (_) => context.locale.customExceptionInternetConnectionMessage, - ) ?? - context.locale.customExceptionGeneralMessage; + return switch (this) { + CustomExceptionWithMessage(message: final message) => message ?? context.locale.customExceptionGeneralMessage, + CustomExceptionUnauthenticated() => context.locale.customExceptionUnauthenticatedMessage, + CustomExceptionNotConnectedToTheInternet() => context.locale.customExceptionInternetConnectionMessage, + _ => context.locale.customExceptionGeneralMessage, + }; } String getDetails({required BuildContext context}) { - return mapOrNull( - notConnectedToTheInternet: (_) => context.locale.customExceptionInternetConnectionDetails, - ) ?? - context.locale.customExceptionGeneralDetails; + return switch (this) { + CustomExceptionNotConnectedToTheInternet() => context.locale.customExceptionInternetConnectionDetails, + _ => context.locale.customExceptionGeneralDetails, + }; } Future showErrorSnackbar({ diff --git a/lib/common/data/model/exception/validator_exception.dart b/lib/common/data/model/exception/validator_exception.dart index 64c409a..a33e1d7 100644 --- a/lib/common/data/model/exception/validator_exception.dart +++ b/lib/common/data/model/exception/validator_exception.dart @@ -4,20 +4,20 @@ import 'package:freezed_annotation/freezed_annotation.dart'; part 'validator_exception.freezed.dart'; @freezed -class ValidatorException with _$ValidatorException implements Exception { +sealed class ValidatorException with _$ValidatorException implements Exception { const ValidatorException._(); - const factory ValidatorException.generalIsEmpty(String Function(BuildContext) getText) = _GeneralIsEmpty; - const factory ValidatorException.generalIsTooShort(String Function(BuildContext) getText) = _GeneralIsTooShort; - const factory ValidatorException.generalIsTooLong(String Function(BuildContext) getText) = _GeneralIsTooLong; - const factory ValidatorException.generalIsInvalid(String Function(BuildContext) getText) = _GeneralIsInvalid; + const factory ValidatorException.generalIsEmpty(String Function(BuildContext) getText) = ValidatorExceptionGeneralIsEmpty; + const factory ValidatorException.generalIsTooShort(String Function(BuildContext) getText) = ValidatorExceptionGeneralIsTooShort; + const factory ValidatorException.generalIsTooLong(String Function(BuildContext) getText) = ValidatorExceptionGeneralIsTooLong; + const factory ValidatorException.generalIsInvalid(String Function(BuildContext) getText) = ValidatorExceptionGeneralIsInvalid; String getMessage({required BuildContext context}) { - return map( - generalIsEmpty: (value) => value.getText(context), - generalIsTooShort: (value) => value.getText(context), - generalIsTooLong: (value) => value.getText(context), - generalIsInvalid: (value) => value.getText(context), - ); + return switch (this) { + ValidatorExceptionGeneralIsEmpty(getText: final getText) => getText(context), + ValidatorExceptionGeneralIsTooShort(getText: final getText) => getText(context), + ValidatorExceptionGeneralIsTooLong(getText: final getText) => getText(context), + ValidatorExceptionGeneralIsInvalid(getText: final getText) => getText(context), + }; } } diff --git a/lib/common/data/model/user_model.dart b/lib/common/data/model/user_model.dart index f5b30f2..39b742e 100644 --- a/lib/common/data/model/user_model.dart +++ b/lib/common/data/model/user_model.dart @@ -6,7 +6,7 @@ part 'user_model.freezed.dart'; part 'user_model.g.dart'; @freezed -class UserModel with _$UserModel { +abstract class UserModel with _$UserModel { const UserModel._(); const factory UserModel({ diff --git a/lib/common/usecase/authentication/sign_in_with_auth_credential_use_case.dart b/lib/common/usecase/authentication/sign_in_with_auth_credential_use_case.dart index e989672..5a86733 100644 --- a/lib/common/usecase/authentication/sign_in_with_auth_credential_use_case.dart +++ b/lib/common/usecase/authentication/sign_in_with_auth_credential_use_case.dart @@ -27,7 +27,10 @@ FutureOr signInWithAuthCredentialUseCase( Flogger.d('[Authentication] Anonymous user was linked with google credential'); } on Exception catch (error) { final customException = CustomException.fromErrorObject(error: error); - final credentialIsAlreadyInUse = customException.mapOrNull(credentialAlreadyInUse: (value) => value.credential); + final credentialIsAlreadyInUse = switch (customException) { + CustomExceptionCredentialAlreadyInUse(credential: final credential) => credential, + _ => null, + }; if (credentialIsAlreadyInUse != null) { await FirebaseAuth.instance.signInWithCredential(credentialIsAlreadyInUse); diff --git a/lib/common/validator/text_field_validator_state.dart b/lib/common/validator/text_field_validator_state.dart index 0653b9a..6e02c95 100644 --- a/lib/common/validator/text_field_validator_state.dart +++ b/lib/common/validator/text_field_validator_state.dart @@ -5,22 +5,31 @@ import 'package:freezed_annotation/freezed_annotation.dart'; part 'text_field_validator_state.freezed.dart'; @freezed -class TextFieldValidatorState with _$TextFieldValidatorState { +sealed class TextFieldValidatorState with _$TextFieldValidatorState { const TextFieldValidatorState._(); - const factory TextFieldValidatorState.initial() = _Initial; - const factory TextFieldValidatorState.valid() = _Valid; - const factory TextFieldValidatorState.invalid({required ValidatorException exception}) = _Invalid; + const factory TextFieldValidatorState.initial() = TextFieldValidatorStateInitial; + const factory TextFieldValidatorState.valid() = TextFieldValidatorStateValid; + const factory TextFieldValidatorState.invalid({required ValidatorException exception}) = TextFieldValidatorStateInvalid; bool get isValid { - return mapOrNull(valid: (_) => true) ?? false; + return switch (this) { + TextFieldValidatorStateValid() => true, + _ => false, + }; } bool get hasError { - return mapOrNull(invalid: (_) => true) ?? false; + return switch (this) { + TextFieldValidatorStateInvalid() => true, + _ => false, + }; } String? getErrorMessage(BuildContext context) { - return mapOrNull(invalid: (value) => value.exception.getMessage(context: context)); + return switch (this) { + TextFieldValidatorStateInvalid(exception: final exception) => exception.getMessage(context: context), + _ => null, + }; } } diff --git a/lib/core/analytics/analytics_event.dart b/lib/core/analytics/analytics_event.dart index c704b8a..c53a59f 100644 --- a/lib/core/analytics/analytics_event.dart +++ b/lib/core/analytics/analytics_event.dart @@ -3,7 +3,7 @@ import 'package:freezed_annotation/freezed_annotation.dart'; part 'analytics_event.freezed.dart'; @freezed -class AnalyticsEvent with _$AnalyticsEvent { +abstract class AnalyticsEvent with _$AnalyticsEvent { factory AnalyticsEvent._({ required String firebaseEventId, Map? firebaseEventParams, diff --git a/lib/core/analytics/analytics_screen_view.dart b/lib/core/analytics/analytics_screen_view.dart index 89de524..029ed26 100644 --- a/lib/core/analytics/analytics_screen_view.dart +++ b/lib/core/analytics/analytics_screen_view.dart @@ -3,7 +3,7 @@ import 'package:freezed_annotation/freezed_annotation.dart'; part 'analytics_screen_view.freezed.dart'; @freezed -class AnalyticsScreenView with _$AnalyticsScreenView { +abstract class AnalyticsScreenView with _$AnalyticsScreenView { factory AnalyticsScreenView._({ required String firebaseScreenName, }) = _AnalyticsScreenView; diff --git a/lib/features/authentication/authentication_event.dart b/lib/features/authentication/authentication_event.dart index 1539b4b..9185638 100644 --- a/lib/features/authentication/authentication_event.dart +++ b/lib/features/authentication/authentication_event.dart @@ -5,8 +5,8 @@ import 'package:freezed_annotation/freezed_annotation.dart'; part 'authentication_event.freezed.dart'; @freezed -class AuthenticationEvent with _$AuthenticationEvent { - const factory AuthenticationEvent.signedIn() = _SignedIn; +sealed class AuthenticationEvent with _$AuthenticationEvent { + const factory AuthenticationEvent.signedIn() = AuthenticationEventSignedIn; } final authenticationEventNotifierProvider = diff --git a/lib/features/authentication/authentication_page.dart b/lib/features/authentication/authentication_page.dart index d5e849a..db88266 100644 --- a/lib/features/authentication/authentication_page.dart +++ b/lib/features/authentication/authentication_page.dart @@ -14,10 +14,9 @@ class AuthenticationPage extends ConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { ref.listen( authenticationEventNotifierProvider, - (_, next) { - next?.whenOrNull( - signedIn: () => context.router.replaceAll([const LandingRoute()]), - ); + (_, next) => switch (next) { + AuthenticationEventSignedIn() => context.router.replaceAll([const LandingRoute()]), + _ => () {}, }, ); diff --git a/lib/features/authentication/authentication_state.dart b/lib/features/authentication/authentication_state.dart index 1404db6..8476594 100644 --- a/lib/features/authentication/authentication_state.dart +++ b/lib/features/authentication/authentication_state.dart @@ -13,7 +13,7 @@ part 'authentication_state.freezed.dart'; part 'authentication_state.g.dart'; @freezed -class AuthenticationState with _$AuthenticationState { +abstract class AuthenticationState with _$AuthenticationState { const factory AuthenticationState({ required bool isSigningIn, }) = _AuthenticationState; @@ -50,14 +50,11 @@ class AuthenticationStateNotifier extends _$AuthenticationStateNotifier with Aut ref.read(authenticationEventNotifierProvider.notifier).send(const AuthenticationEvent.signedIn()); } on Exception catch (error) { final customException = CustomException.fromErrorObject(error: error); - customException.maybeWhen( - signInCancelled: () { - Flogger.d('User cancelled the sign in process'); - }, - orElse: () { - Flogger.e('Error while signing in: $customException'); - }, - ); + if (customException case CustomExceptionSignInCancelled()) { + Flogger.d('User cancelled the sign in process'); + } else { + Flogger.e('Error while signing in: $customException'); + } } setStateData(currentData?.copyWith(isSigningIn: false)); diff --git a/lib/features/debug_tools/debug_tools_page_state.dart b/lib/features/debug_tools/debug_tools_page_state.dart index 1580f18..c3cbab0 100644 --- a/lib/features/debug_tools/debug_tools_page_state.dart +++ b/lib/features/debug_tools/debug_tools_page_state.dart @@ -13,7 +13,7 @@ enum DebugToolsSampleType { } @freezed -class DebugToolsPageState with _$DebugToolsPageState { +abstract class DebugToolsPageState with _$DebugToolsPageState { const factory DebugToolsPageState({ @Default(null) DebugToolsSampleType? selectedAction, }) = _DebugToolsPageState; diff --git a/lib/features/debug_tools/page/widgets/debug_tools_widgets_page_content.dart b/lib/features/debug_tools/page/widgets/debug_tools_widgets_page_content.dart index 2d41869..efe7e06 100644 --- a/lib/features/debug_tools/page/widgets/debug_tools_widgets_page_content.dart +++ b/lib/features/debug_tools/page/widgets/debug_tools_widgets_page_content.dart @@ -21,13 +21,12 @@ class DebugToolsWidgetsPageContent extends ConsumerWidget { ref.listen( debugToolsWidgetsPageEventNotifierProvider, - (_, next) { - next?.whenOrNull( - fieldValidated: (message) => CustomSnackbarMessage( + (_, next) => switch (next) { + DebugToolsWidgetsPageEventFieldValidated(message: final message) => CustomSnackbarMessage( context: context, message: message, ).show(), - ); + _ => () {}, }, ); diff --git a/lib/features/debug_tools/page/widgets/debug_tools_widgets_page_event.dart b/lib/features/debug_tools/page/widgets/debug_tools_widgets_page_event.dart index 089a6ab..d8f5a64 100644 --- a/lib/features/debug_tools/page/widgets/debug_tools_widgets_page_event.dart +++ b/lib/features/debug_tools/page/widgets/debug_tools_widgets_page_event.dart @@ -5,8 +5,8 @@ import 'package:freezed_annotation/freezed_annotation.dart'; part 'debug_tools_widgets_page_event.freezed.dart'; @freezed -class DebugToolsWidgetsPageEvent with _$DebugToolsWidgetsPageEvent { - const factory DebugToolsWidgetsPageEvent.fieldValidated({required String message}) = _DebugToolsSomeEvent; +sealed class DebugToolsWidgetsPageEvent with _$DebugToolsWidgetsPageEvent { + const factory DebugToolsWidgetsPageEvent.fieldValidated({required String message}) = DebugToolsWidgetsPageEventFieldValidated; } final debugToolsWidgetsPageEventNotifierProvider = diff --git a/lib/features/debug_tools/page/widgets/debug_tools_widgets_page_state.dart b/lib/features/debug_tools/page/widgets/debug_tools_widgets_page_state.dart index 48898e8..3894f51 100644 --- a/lib/features/debug_tools/page/widgets/debug_tools_widgets_page_state.dart +++ b/lib/features/debug_tools/page/widgets/debug_tools_widgets_page_state.dart @@ -8,7 +8,7 @@ part 'debug_tools_widgets_page_state.freezed.dart'; part 'debug_tools_widgets_page_state.g.dart'; @freezed -class DebugToolsWidgetsPageState with _$DebugToolsWidgetsPageState { +abstract class DebugToolsWidgetsPageState with _$DebugToolsWidgetsPageState { const DebugToolsWidgetsPageState._(); const factory DebugToolsWidgetsPageState({ diff --git a/lib/features/profile/profile_event.dart b/lib/features/profile/profile_event.dart index 3cc7f51..bd3192d 100644 --- a/lib/features/profile/profile_event.dart +++ b/lib/features/profile/profile_event.dart @@ -5,8 +5,8 @@ import 'package:freezed_annotation/freezed_annotation.dart'; part 'profile_event.freezed.dart'; @freezed -class ProfileEvent with _$ProfileEvent { - const factory ProfileEvent.signedOut() = _SignedOut; +sealed class ProfileEvent with _$ProfileEvent { + const factory ProfileEvent.signedOut() = ProfileEventSignedOut; } final profileEventNotifierProvider = diff --git a/lib/features/profile/profile_page.dart b/lib/features/profile/profile_page.dart index f5e68f9..9432c28 100644 --- a/lib/features/profile/profile_page.dart +++ b/lib/features/profile/profile_page.dart @@ -14,10 +14,9 @@ class ProfilePage extends ConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { ref.listen( profileEventNotifierProvider, - (_, next) { - next?.whenOrNull( - signedOut: () => context.router.replaceAll([const LandingRoute()]), - ); + (_, next) => switch (next) { + ProfileEventSignedOut() => context.router.replaceAll([const LandingRoute()]), + _ => () {}, }, ); diff --git a/lib/features/profile/profile_state.dart b/lib/features/profile/profile_state.dart index 48837bf..25e43c1 100644 --- a/lib/features/profile/profile_state.dart +++ b/lib/features/profile/profile_state.dart @@ -12,7 +12,7 @@ part 'profile_state.freezed.dart'; part 'profile_state.g.dart'; @freezed -class ProfileState with _$ProfileState { +abstract class ProfileState with _$ProfileState { const factory ProfileState({ required String displayName, required String imageUrl, diff --git a/makefile b/makefile index fffd4fa..b9fe4b5 100644 --- a/makefile +++ b/makefile @@ -1,10 +1,10 @@ # https://medium.com/flutter-community/automating-flutter-workflows-with-the-makefile-423b8e023c9a -.PHONY: setup build_runner clean gen gen_locale install integration_test test generateAndroidProductionAppBundle generateIosStagingIpa generateIosProductionIpa generateWebProduction deployWeb runner_gen +.PHONY: setup watch clean gen gen_locale install integration_test test generateAndroidProductionAppBundle generateIosStagingIpa generateIosProductionIpa generateWebProduction deployWeb runner_gen setup: # Setup the project @fvm dart ./project_setup/lib/main.dart -build_runner: # Run build_runner +watch: # Run build_runner @fvm dart run build_runner watch --delete-conflicting-outputs clean: # Clean everything in the project, download dependencies, generate code diff --git a/pubspec.lock b/pubspec.lock index 1ccf1a8..0ba05c0 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -13,10 +13,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: e051259913915ea5bc8fe18664596bea08592fd123930605d562969cd7315fcd + sha256: de9ecbb3ddafd446095f7e833c853aff2fa1682b017921fe63a833f9d6f0e422 url: "https://pub.dev" source: hosted - version: "1.3.51" + version: "1.3.54" analyzer: dependency: transitive description: @@ -29,10 +29,10 @@ packages: dependency: transitive description: name: analyzer_plugin - sha256: "1d460d14e3c2ae36dc2b32cef847c4479198cf87704f63c3c3c8150ee50c3916" + sha256: b3075265c5ab222f8b3188342dcb50b476286394a40323e85d1fa725035d40a4 url: "https://pub.dev" source: hosted - version: "0.12.0" + version: "0.13.0" ansicolor: dependency: transitive description: @@ -45,26 +45,26 @@ packages: dependency: "direct main" description: name: app_settings - sha256: "476df1d85cec143c3d27dd1c7451629a59c0c5ccf70a0adcbfa92a0a2d928705" + sha256: "3e46c561441e5820d3a25339bf8b51b9e45a5f686873851a20c257a530917795" url: "https://pub.dev" source: hosted - version: "5.2.0" + version: "6.1.1" archive: dependency: transitive description: name: archive - sha256: "6199c74e3db4fbfbd04f66d739e72fe11c8a8957d5f219f1f4482dbde6420b5a" + sha256: "7dcbd0f87fe5f61cb28da39a1a8b70dbc106e2fe0516f7836eb7bb2948481a12" url: "https://pub.dev" source: hosted - version: "4.0.2" + version: "4.0.5" args: dependency: transitive description: name: args - sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6 + sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 url: "https://pub.dev" source: hosted - version: "2.6.0" + version: "2.7.0" async: dependency: transitive description: @@ -77,18 +77,18 @@ packages: dependency: "direct main" description: name: auto_route - sha256: "1d1bd908a1fec327719326d5d0791edd37f16caff6493c01003689fb03315ad7" + sha256: "89bc5d17d8c575399891194b8cd02b39f52a8512c730052f17ebe443cdcb9109" url: "https://pub.dev" source: hosted - version: "9.3.0+1" + version: "10.0.1" auto_route_generator: dependency: "direct dev" description: name: auto_route_generator - sha256: c2e359d8932986d4d1bcad7a428143f81384ce10fef8d4aa5bc29e1f83766a46 + sha256: "8e622d26dc6be4bf496d47969e3e9ba555c3abcf2290da6abfa43cbd4f57fa52" url: "https://pub.dev" source: hosted - version: "9.3.1" + version: "10.0.1" boolean_selector: dependency: transitive description: @@ -157,10 +157,10 @@ packages: dependency: transitive description: name: built_value - sha256: "28a712df2576b63c6c005c465989a348604960c0958d28be5303ba9baa841ac2" + sha256: ea90e81dc4a25a043d9bee692d20ed6d1c4a1662a28c03a96417446c093ed6b4 url: "https://pub.dev" source: hosted - version: "8.9.3" + version: "8.9.5" characters: dependency: transitive description: @@ -269,26 +269,26 @@ packages: dependency: "direct dev" description: name: custom_lint - sha256: "021897cce2b6c783b2521543e362e7fe1a2eaab17bf80514d8de37f99942ed9e" + sha256: "409c485fd14f544af1da965d5a0d160ee57cd58b63eeaa7280a4f28cf5bda7f1" url: "https://pub.dev" source: hosted - version: "0.7.3" + version: "0.7.5" custom_lint_builder: dependency: transitive description: name: custom_lint_builder - sha256: e4235b9d8cef59afe621eba086d245205c8a0a6c70cd470be7cb17494d6df32d + sha256: "107e0a43606138015777590ee8ce32f26ba7415c25b722ff0908a6f5d7a4c228" url: "https://pub.dev" source: hosted - version: "0.7.3" + version: "0.7.5" custom_lint_core: dependency: transitive description: name: custom_lint_core - sha256: "6dcee8a017181941c51a110da7e267c1d104dc74bec8862eeb8c85b5c8759a9e" + sha256: "31110af3dde9d29fb10828ca33f1dce24d2798477b167675543ce3d208dee8be" url: "https://pub.dev" source: hosted - version: "0.7.1" + version: "0.7.5" custom_lint_visitor: dependency: transitive description: @@ -325,10 +325,10 @@ packages: dependency: "direct main" description: name: device_info_plus - sha256: "72d146c6d7098689ff5c5f66bcf593ac11efc530095385356e131070333e64da" + sha256: "306b78788d1bb569edb7c55d622953c2414ca12445b41c9117963e03afc5c513" url: "https://pub.dev" source: hosted - version: "11.3.0" + version: "11.3.3" device_info_plus_platform_interface: dependency: transitive description: @@ -349,10 +349,10 @@ packages: dependency: transitive description: name: dio_web_adapter - sha256: e485c7a39ff2b384fa1d7e09b4e25f755804de8384358049124830b04fc4f93a + sha256: "7586e476d70caecaf1686d21eee7247ea43ef5c345eab9e0cc3583ff13378d78" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" dispose_scope: dependency: transitive description: @@ -373,18 +373,18 @@ packages: dependency: "direct main" description: name: extended_image - sha256: "85199f9233e03abc2ce2e68cbb2991648666af4a527ae4e6250935be8edfddae" + sha256: fcefcf3cba32696c639e9e305a790039709d05a7139320b91bb9d300993452e2 url: "https://pub.dev" source: hosted - version: "9.1.0" + version: "10.0.0" extended_image_library: dependency: transitive description: name: extended_image_library - sha256: e61dafd94400fff6ef7ed1523d445ff3af137f198f3228e4a3107bc5b4bec5d1 + sha256: ae468c31c375064964de11cbb31310a58c4462df6e3bae1a0bc0066f586795d5 url: "https://pub.dev" source: hosted - version: "4.0.6" + version: "5.0.0" fake_async: dependency: transitive description: @@ -413,58 +413,58 @@ packages: dependency: "direct main" description: name: firebase_analytics - sha256: "47428047a0778f72af53a3c7cb5d556e1cb25e2327cc8aa40d544971dc6245b2" + sha256: "2416b9d864412ab7b571dafded801bbcc7e29b5824623c055002d4d0819bea2b" url: "https://pub.dev" source: hosted - version: "11.4.2" + version: "11.4.5" firebase_analytics_platform_interface: dependency: transitive description: name: firebase_analytics_platform_interface - sha256: "1076f4b041f76143e14878c70f0758f17fe5910c0cd992db9e93bd3c3584512b" + sha256: "3ccf5c876a8bea186016de4bcf53fc1bc6fa01236d740fb501d7ef9be356c58e" url: "https://pub.dev" source: hosted - version: "4.3.2" + version: "4.3.5" firebase_analytics_web: dependency: transitive description: name: firebase_analytics_web - sha256: "8f6dd64ea6d28b7f5b9e739d183a9e1c7f17027794a3e9aba1879621d42426ef" + sha256: "5e4e3f001b67c2034b76cb2a42a0eed330fb3a8fb41ad13eceb04e8d9a74f662" url: "https://pub.dev" source: hosted - version: "0.5.10+8" + version: "0.5.10+11" firebase_auth: dependency: "direct main" description: name: firebase_auth - sha256: "2886a01a895565722add556510263231390a9f1d1d51eee34c22f9b94a73dd54" + sha256: "54c62b2d187709114dd09ce658a8803ee91f9119b0e0d3fc2245130ad9bff9ad" url: "https://pub.dev" source: hosted - version: "5.4.2" + version: "5.5.2" firebase_auth_platform_interface: dependency: transitive description: name: firebase_auth_platform_interface - sha256: "2e8fe7e6b5869c981f62c0de1a0abef6f626a1daffe92e1e6881448a9d3da778" + sha256: "5402d13f4bb7f29f2fb819f3b6b5a5a56c9f714aef2276546d397e25ac1b6b8e" url: "https://pub.dev" source: hosted - version: "7.5.2" + version: "7.6.2" firebase_auth_web: dependency: transitive description: name: firebase_auth_web - sha256: c9600115b6f74365a51c735d4c43d4632ad44bfde505fe7c13c838701cd01ff2 + sha256: "2be496911f0807895d5fe8067b70b7d758142dd7fb26485cbe23e525e2547764" url: "https://pub.dev" source: hosted - version: "5.13.8" + version: "5.14.2" firebase_core: dependency: "direct main" description: name: firebase_core - sha256: "93dc4dd12f9b02c5767f235307f609e61ed9211047132d07f9e02c668f0bfc33" + sha256: "017d17d9915670e6117497e640b2859e0b868026ea36bf3a57feb28c3b97debe" url: "https://pub.dev" source: hosted - version: "3.11.0" + version: "3.13.0" firebase_core_platform_interface: dependency: transitive description: @@ -477,90 +477,90 @@ packages: dependency: transitive description: name: firebase_core_web - sha256: "0e13c80f0de8acaa5d0519cbe23c8b4cc138a2d5d508b5755c861bdfc9762678" + sha256: "129a34d1e0fb62e2b488d988a1fc26cc15636357e50944ffee2862efe8929b23" url: "https://pub.dev" source: hosted - version: "2.20.0" + version: "2.22.0" firebase_crashlytics: dependency: "direct main" description: name: firebase_crashlytics - sha256: "6273ed71bcd8a6fb4d0ca13d3abddbb3301796807efaad8782b5f90156f26f03" + sha256: f3fa4a17c2f061b16b2e3ac7aaed889ae954b8952d0fd3e0009a9870cde7bbd2 url: "https://pub.dev" source: hosted - version: "4.3.2" + version: "4.3.5" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface - sha256: "94f3986e1a10e5a883f2ad5e3d719aef98a8a0f9a49357f6e45b7d3696ea6a97" + sha256: cedfbe39927711c0e56fc38bfecbd89e17816b21698a3d88d63298c530ed375c url: "https://pub.dev" source: hosted - version: "3.8.2" + version: "3.8.5" firebase_dynamic_links: dependency: "direct main" description: name: firebase_dynamic_links - sha256: f3b546180b1920ffd366623de384e906d3eccd4368efa8cf155476b0f4780064 + sha256: ae8844d78a14a335e1d69d9a198dd5bcc4571ba4b028e45c0972e093b48530f8 url: "https://pub.dev" source: hosted - version: "6.1.2" + version: "6.1.5" firebase_dynamic_links_platform_interface: dependency: transitive description: name: firebase_dynamic_links_platform_interface - sha256: "95ea6f6c5b4b62aa05e312aff30f423e957c2bed3dcf3baa6d262e936021d3a1" + sha256: "7cb3b86956268a18c49badd66eb9a9279b71bf7188a7a2a48204f41db2642e78" url: "https://pub.dev" source: hosted - version: "0.2.7+2" + version: "0.2.7+5" firebase_messaging: dependency: "direct main" description: name: firebase_messaging - sha256: "3dee3b0cbfe719e64773cb7d1cad57c58b2235a8c136f5715fe733a54058c783" + sha256: "5f8918848ee0c8eb172fc7698619b2bcd7dda9ade8b93522c6297dd8f9178356" url: "https://pub.dev" source: hosted - version: "15.2.2" + version: "15.2.5" firebase_messaging_platform_interface: dependency: transitive description: name: firebase_messaging_platform_interface - sha256: e9ea726b9bb864fc6223bb66422bd9877b9973ae51967754a769b0d01e201c1e + sha256: "0bbea00680249595fc896e7313a2bd90bd55be6e0abbe8b9a39d81b6b306acb6" url: "https://pub.dev" source: hosted - version: "4.6.2" + version: "4.6.5" firebase_messaging_web: dependency: transitive description: name: firebase_messaging_web - sha256: "5f7b40e8bf861a37f8b8196e347d8a919750421a45f0b45d1bb74e98fa72726e" + sha256: ffb392ce2a7e8439cd0a9a80e3c702194e73c927e5c7b4f0adf6faa00b245b17 url: "https://pub.dev" source: hosted - version: "3.10.2" + version: "3.10.5" firebase_remote_config: dependency: "direct main" description: name: firebase_remote_config - sha256: "5cfc2d26bb8caba2bfeeb88cbf589cb1c00031eb783019f37c36e12381b8d9ca" + sha256: "0178bc8f44a8a30e720ec837fc2a0bac3d99837091d53c2a84d2d5d11da55854" url: "https://pub.dev" source: hosted - version: "5.4.0" + version: "5.4.3" firebase_remote_config_platform_interface: dependency: transitive description: name: firebase_remote_config_platform_interface - sha256: "79627889fe98b989825e23154f0c6392f9d463b4e39945b27953b34941109fca" + sha256: df77610b1d0b542729e66358c9a1fd3633b35eb58634269686d36058e57e3c84 url: "https://pub.dev" source: hosted - version: "1.5.0" + version: "1.5.3" firebase_remote_config_web: dependency: transitive description: name: firebase_remote_config_web - sha256: d5c999f9398f454ca1e60d3410df6b2a268ff532e6146303aa9dd7b43434afe3 + sha256: "0cbfbe358f396f1663e53bdae626748efed4cf17bf316f29c680c975aa7601e8" url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.8.3" fixnum: dependency: transitive description: @@ -586,18 +586,18 @@ packages: dependency: transitive description: name: flutter_gen_core - sha256: "53890b653738f34363d9f0d40f82104c261716bd551d3ba65f648770b6764c21" + sha256: "3eaa2d3d8be58267ac4cd5e215ac965dd23cae0410dc073de2e82e227be32bfc" url: "https://pub.dev" source: hosted - version: "5.9.0" + version: "5.10.0" flutter_gen_runner: dependency: "direct dev" description: name: flutter_gen_runner - sha256: de70b42eb5329f712c8b041069d081ad5fb5109f32d6d1ea9c1b39596786215d + sha256: e74b4ead01df3e8f02e73a26ca856759dbbe8cb3fd60941ba9f4005cd0cd19c9 url: "https://pub.dev" source: hosted - version: "5.9.0" + version: "5.10.0" flutter_lints: dependency: "direct dev" description: @@ -610,26 +610,34 @@ packages: dependency: "direct main" description: name: flutter_local_notifications - sha256: ef41ae901e7529e52934feba19ed82827b11baa67336829564aeab3129460610 + sha256: "33b3e0269ae9d51669957a923f2376bee96299b09915d856395af8c4238aebfa" url: "https://pub.dev" source: hosted - version: "18.0.1" + version: "19.1.0" flutter_local_notifications_linux: dependency: transitive description: name: flutter_local_notifications_linux - sha256: "8f685642876742c941b29c32030f6f4f6dacd0e4eaecb3efbb187d6a3812ca01" + sha256: e3c277b2daab8e36ac5a6820536668d07e83851aeeb79c446e525a70710770a5 url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "6.0.0" flutter_local_notifications_platform_interface: dependency: transitive description: name: flutter_local_notifications_platform_interface - sha256: "6c5b83c86bf819cdb177a9247a3722067dd8cc6313827ce7c77a4b238a26fd52" + sha256: "2569b973fc9d1f63a37410a9f7c1c552081226c597190cb359ef5d5762d1631c" url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "9.0.0" + flutter_local_notifications_windows: + dependency: transitive + description: + name: flutter_local_notifications_windows + sha256: f8fc0652a601f83419d623c85723a3e82ad81f92b33eaa9bcc21ea1b94773e6e + url: "https://pub.dev" + source: hosted + version: "1.0.0" flutter_localizations: dependency: "direct main" description: flutter @@ -639,18 +647,18 @@ packages: dependency: "direct main" description: name: flutter_native_splash - sha256: edb09c35ee9230c4b03f13dd45bb3a276d0801865f0a4650b7e2a3bba61a803a + sha256: "8321a6d11a8d13977fa780c89de8d257cce3d841eecfb7a4cadffcc4f12d82dc" url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.6" flutter_plugin_android_lifecycle: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "615a505aef59b151b46bbeef55b36ce2b6ed299d160c51d84281946f0aa0ce0e" + sha256: "5a1e6fb2c0561958d7e4c33574674bda7b77caaca7a33b758876956f2902eea3" url: "https://pub.dev" source: hosted - version: "2.0.24" + version: "2.0.27" flutter_riverpod: dependency: "direct main" description: @@ -689,26 +697,26 @@ packages: dependency: "direct main" description: name: freerasp - sha256: e057e1ecf8cf14dfc2e7aabba94dcc5356f1c9856a81c2c2a011916c04cb2aaf + sha256: cfff05a951f6314475cefbe6f37c385afd1c36989389735bd78373182fa7d706 url: "https://pub.dev" source: hosted - version: "6.11.0" + version: "7.0.0" freezed: dependency: "direct dev" description: name: freezed - sha256: "59a584c24b3acdc5250bb856d0d3e9c0b798ed14a4af1ddb7dc1c7b41df91c9c" + sha256: "6022db4c7bfa626841b2a10f34dd1e1b68e8f8f9650db6112dcdeeca45ca793c" url: "https://pub.dev" source: hosted - version: "2.5.8" + version: "3.0.6" freezed_annotation: dependency: "direct main" description: name: freezed_annotation - sha256: c2e2d632dd9b8a2b7751117abcfc2b4888ecfe181bd9fca7170d9ef02e595fe2 + sha256: c87ff004c8aa6af2d531668b46a4ea379f7191dc6dfa066acd53d506da6e044b url: "https://pub.dev" source: hosted - version: "2.4.4" + version: "3.0.0" frontend_server_client: dependency: transitive description: @@ -737,42 +745,42 @@ packages: dependency: "direct main" description: name: google_sign_in - sha256: fad6ddc80c427b0bba705f2116204ce1173e09cf299f85e053d57a55e5b2dd56 + sha256: d0a2c3bcb06e607bb11e4daca48bd4b6120f0bbc4015ccebbe757d24ea60ed2a url: "https://pub.dev" source: hosted - version: "6.2.2" + version: "6.3.0" google_sign_in_android: dependency: transitive description: name: google_sign_in_android - sha256: "7af72e5502c313865c729223b60e8ae7bce0a1011b250c24edcf30d3d7032748" + sha256: "4e52c64366bdb3fe758f683b088ee514cc7a95e69c52b5ee9fc5919e1683d21b" url: "https://pub.dev" source: hosted - version: "6.1.35" + version: "6.2.0" google_sign_in_ios: dependency: transitive description: name: google_sign_in_ios - sha256: "8468465516a6fdc283ffbbb06ec03a860ee34e9ff84b0454074978705b42379b" + sha256: "102005f498ce18442e7158f6791033bbc15ad2dcc0afa4cf4752e2722a516c96" url: "https://pub.dev" source: hosted - version: "5.8.0" + version: "5.9.0" google_sign_in_platform_interface: dependency: transitive description: name: google_sign_in_platform_interface - sha256: "1f6e5787d7a120cc0359ddf315c92309069171306242e181c09472d1b00a2971" + sha256: "5f6f79cf139c197261adb6ac024577518ae48fdff8e53205c5373b5f6430a8aa" url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.5.0" google_sign_in_web: dependency: transitive description: name: google_sign_in_web - sha256: ada595df6c30cead48e66b1f3a050edf0c5cf2ba60c185d69690e08adcc6281b + sha256: "460547beb4962b7623ac0fb8122d6b8268c951cf0b646dd150d60498430e4ded" url: "https://pub.dev" source: hosted - version: "0.12.4+3" + version: "0.12.4+4" graphs: dependency: transitive description: @@ -809,10 +817,10 @@ packages: dependency: transitive description: name: html - sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec" + sha256: "9475be233c437f0e3637af55e7702cbbe5c23a68bd56e8a5fa2d426297b7c6c8" url: "https://pub.dev" source: hosted - version: "0.15.5" + version: "0.15.5+1" http: dependency: transitive description: @@ -849,10 +857,10 @@ packages: dependency: transitive description: name: image - sha256: "8346ad4b5173924b5ddddab782fc7d8a6300178c8b1dc427775405a01701c4a6" + sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928" url: "https://pub.dev" source: hosted - version: "4.5.2" + version: "4.5.4" image_size_getter: dependency: transitive description: @@ -985,26 +993,26 @@ packages: dependency: transitive description: name: package_config - sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67" + sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.2.0" package_info_plus: dependency: "direct main" description: name: package_info_plus - sha256: "67eae327b1b0faf761964a1d2e5d323c797f3799db0e85aa232db8d9e922bc35" + sha256: "7976bfe4c583170d6cdc7077e3237560b364149fcd268b5f53d95a991963b191" url: "https://pub.dev" source: hosted - version: "8.2.1" + version: "8.3.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: "205ec83335c2ab9107bbba3f8997f9356d72ca3c715d2f038fc773d0366b4c76" + sha256: "6c935fb612dff8e3cc9632c2b301720c77450a126114126ffaafe28d2e87956c" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.2.0" path: dependency: transitive description: @@ -1033,10 +1041,10 @@ packages: dependency: transitive description: name: path_provider_android - sha256: "4adf4fd5423ec60a29506c76581bc05854c55e3a0b72d35bb28d661c9686edf2" + sha256: "0ca7359dad67fd7063cb2892ab0c0737b2daafd807cf1acecd62374c8fae6c12" url: "https://pub.dev" source: hosted - version: "2.2.15" + version: "2.2.16" path_provider_foundation: dependency: transitive description: @@ -1073,18 +1081,18 @@ packages: dependency: "direct dev" description: name: patrol - sha256: "2bb991db06b5e1eb2ec5c803067c41316d94d01dda93ddf16f5342073d791a20" + sha256: "958cf719a4121a4cd85697dc2f6687126e73592f68f72acfe9f92b9a3d1a73e4" url: "https://pub.dev" source: hosted - version: "3.14.0" + version: "3.15.1" patrol_finders: dependency: transitive description: name: patrol_finders - sha256: "4c6d78e00362fd15d7c21cfac110e501d08ada7d77000bad139b0c3c2e27ccaf" + sha256: "8787f9d5c3417b72e8959a55ad51c024cc0594d15e5db85bc179c4d8faa0c493" url: "https://pub.dev" source: hosted - version: "2.7.0" + version: "2.7.2" patrol_log: dependency: transitive description: @@ -1145,10 +1153,10 @@ packages: dependency: transitive description: name: pub_semver - sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd" + sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585" url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.2.0" pubspec_parse: dependency: transitive description: @@ -1169,10 +1177,10 @@ packages: dependency: transitive description: name: riverpod_analyzer_utils - sha256: "837a6dc33f490706c7f4632c516bcd10804ee4d9ccc8046124ca56388715fdf3" + sha256: "03a17170088c63aab6c54c44456f5ab78876a1ddb6032ffde1662ddab4959611" url: "https://pub.dev" source: hosted - version: "0.5.9" + version: "0.5.10" riverpod_annotation: dependency: "direct main" description: @@ -1185,18 +1193,18 @@ packages: dependency: "direct dev" description: name: riverpod_generator - sha256: "120d3310f687f43e7011bb213b90a436f1bbc300f0e4b251a72c39bccb017a4f" + sha256: "44a0992d54473eb199ede00e2260bd3c262a86560e3c6f6374503d86d0580e36" url: "https://pub.dev" source: hosted - version: "2.6.4" + version: "2.6.5" riverpod_lint: dependency: "direct dev" description: name: riverpod_lint - sha256: b05408412b0f75dec954e032c855bc28349eeed2d2187f94519e1ddfdf8b3693 + sha256: "89a52b7334210dbff8605c3edf26cfe69b15062beed5cbfeff2c3812c33c9e35" url: "https://pub.dev" source: hosted - version: "2.6.4" + version: "2.6.5" rxdart: dependency: transitive description: @@ -1265,18 +1273,18 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: "846849e3e9b68f3ef4b60c60cf4b3e02e9321bc7f4d8c4692cf87ffa82fc8a3a" + sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5" url: "https://pub.dev" source: hosted - version: "2.5.2" + version: "2.5.3" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: ea86be7b7114f9e94fddfbb52649e59a03d6627ccd2387ebddcd6624719e9f16 + sha256: c2c8c46297b5d6a80bed7741ec1f2759742c77d272f1a1698176ae828f8e1a18 url: "https://pub.dev" source: hosted - version: "2.4.5" + version: "2.4.9" shared_preferences_foundation: dependency: transitive description: @@ -1305,10 +1313,10 @@ packages: dependency: transitive description: name: shared_preferences_web - sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e + sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019 url: "https://pub.dev" source: hosted - version: "2.4.2" + version: "2.4.3" shared_preferences_windows: dependency: transitive description: @@ -1337,26 +1345,26 @@ packages: dependency: "direct main" description: name: sign_in_with_apple - sha256: e84a62e17b7e463abf0a64ce826c2cd1f0b72dff07b7b275e32d5302d76fb4c5 + sha256: "8bd875c8e8748272749eb6d25b896f768e7e9d60988446d543fe85a37a2392b8" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "7.0.1" sign_in_with_apple_platform_interface: dependency: transitive description: name: sign_in_with_apple_platform_interface - sha256: c2ef2ce6273fce0c61acd7e9ff5be7181e33d7aa2b66508b39418b786cca2119 + sha256: "981bca52cf3bb9c3ad7ef44aace2d543e5c468bb713fd8dda4275ff76dfa6659" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "2.0.0" sign_in_with_apple_web: dependency: transitive description: name: sign_in_with_apple_web - sha256: "2f7c38368f49e3f2043bca4b46a4a61aaae568c140a79aa0675dc59ad0ca49bc" + sha256: f316400827f52cafcf50d00e1a2e8a0abc534ca1264e856a81c5f06bd5b10fed url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "3.0.0" sky_engine: dependency: transitive description: flutter @@ -1462,10 +1470,10 @@ packages: dependency: transitive description: name: talker_logger - sha256: "73e0b40f60ff334216c054b11b75d94d18600abd50e9ff46b7e859c3705b86a6" + sha256: "416b4d726358764c68c2de23c11bf9f146f2608ac244ec2ed9da741f89c49a6e" url: "https://pub.dev" source: hosted - version: "4.6.11" + version: "4.7.2" term_glyph: dependency: transitive description: @@ -1542,18 +1550,18 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: "6fc2f56536ee873eeb867ad176ae15f304ccccc357848b351f6f0d8d4a40d193" + sha256: "1d0eae19bd7606ef60fe69ef3b312a437a16549476c42321d5dc1506c9ca3bf4" url: "https://pub.dev" source: hosted - version: "6.3.14" + version: "6.3.15" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" + sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb" url: "https://pub.dev" source: hosted - version: "6.3.2" + version: "6.3.3" url_launcher_linux: dependency: transitive description: @@ -1654,10 +1662,10 @@ packages: dependency: transitive description: name: web - sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb + sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" web_socket: dependency: transitive description: @@ -1678,18 +1686,18 @@ packages: dependency: transitive description: name: win32 - sha256: daf97c9d80197ed7b619040e86c8ab9a9dad285e7671ee7390f9180cc828a51e + sha256: dc6ecaa00a7c708e5b4d10ee7bec8c270e9276dfcab1783f57e9962d7884305f url: "https://pub.dev" source: hosted - version: "5.10.1" + version: "5.12.0" win32_registry: dependency: transitive description: name: win32_registry - sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852" + sha256: "6f1b564492d0147b330dd794fee8f512cec4977957f310f9951b5f9d83618dae" url: "https://pub.dev" source: hosted - version: "1.1.5" + version: "2.1.0" window_manager: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index a8be5be..6dcede4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -23,39 +23,39 @@ dependencies: riverpod_annotation: 2.6.1 # Navigation - auto_route: 9.3.0+1 + auto_route: 10.0.1 # Data Structures - freezed_annotation: 2.4.4 + freezed_annotation: 3.0.0 json_annotation: 4.9.0 # Network dio: 5.8.0+1 # Storage - shared_preferences: 2.5.2 + shared_preferences: 2.5.3 # Firebase - firebase_analytics: 11.4.2 - firebase_auth: 5.4.2 - firebase_core: 3.11.0 - firebase_crashlytics: 4.3.2 - firebase_dynamic_links: 6.1.2 - firebase_messaging: 15.2.2 - firebase_remote_config: 5.4.0 + firebase_analytics: 11.4.5 + firebase_auth: 5.5.2 + firebase_core: 3.13.0 + firebase_crashlytics: 4.3.5 + firebase_dynamic_links: 6.1.5 + firebase_messaging: 15.2.5 + firebase_remote_config: 5.4.3 # Authentication - google_sign_in: 6.2.2 - sign_in_with_apple: 6.1.4 + google_sign_in: 6.3.0 + sign_in_with_apple: 7.0.1 # Device - device_info_plus: 11.3.0 - package_info_plus: 8.2.1 + device_info_plus: 11.3.3 + package_info_plus: 8.3.0 path_provider: 2.1.5 window_manager: 0.4.3 # Security - freerasp: 6.11.0 + freerasp: 7.0.0 # Logging pretty_dio_logger: 1.4.0 @@ -64,19 +64,19 @@ dependencies: talker_dio_logger: 4.4.7 # Resources - extended_image: 9.1.0 - flutter_native_splash: 2.4.5 + extended_image: 10.0.0 + flutter_native_splash: 2.4.6 flutter_svg: 2.0.17 intl: 0.19.0 # UI flutter_animate: 4.5.2 - flutter_local_notifications: 18.0.1 + flutter_local_notifications: 19.1.0 modal_bottom_sheet: 3.0.0 universal_html: 2.2.4 # Utility - app_settings: 5.2.0 + app_settings: 6.1.1 collection: 1.19.1 crypto: 3.0.6 url_launcher: 6.3.1 @@ -90,25 +90,25 @@ dev_dependencies: build_runner: 2.4.15 # State management - riverpod_generator: 2.6.4 + riverpod_generator: 2.6.5 # Navigation - auto_route_generator: 9.3.1 + auto_route_generator: 10.0.1 # Data Structures - freezed: 2.5.8 + freezed: 3.0.6 json_serializable: 6.9.4 # Resources - flutter_gen_runner: 5.9.0 + flutter_gen_runner: 5.10.0 # Lint - custom_lint: 0.7.3 + custom_lint: 0.7.5 flutter_lints: 5.0.0 - riverpod_lint: 2.6.4 + riverpod_lint: 2.6.5 # UI Tests - patrol: 3.14.0 + patrol: 3.15.1 patrol: diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 35b84a1..2128b7c 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -12,6 +12,7 @@ list(APPEND FLUTTER_PLUGIN_LIST ) list(APPEND FLUTTER_FFI_PLUGIN_LIST + flutter_local_notifications_windows ) set(PLUGIN_BUNDLED_LIBRARIES)