diff --git a/lib/src/account/provider.dart b/lib/src/account/provider.dart index 91652b2..9a73a64 100644 --- a/lib/src/account/provider.dart +++ b/lib/src/account/provider.dart @@ -23,7 +23,7 @@ class RealAccounts extends _$RealAccounts { _storage = const AccountStorage(); final accounts = await _storage.loadAccounts(); if (accounts.isNotEmpty) { - ref.read(currentAccountProvider.notifier).state = accounts.first; + ref.read(currentAccountProvider.notifier).set(accounts.first); } state = accounts; } @@ -33,7 +33,7 @@ class RealAccounts extends _$RealAccounts { final cleanState = state.toList()..removeWhere((a) => a.key == account.key); state = [...cleanState, account]; if (state.length == 1) { - ref.read(currentAccountProvider.notifier).state = account; + ref.read(currentAccountProvider.notifier).set(account); } _saveAccounts(); } @@ -43,7 +43,7 @@ class RealAccounts extends _$RealAccounts { state = state.where((a) => a.key != account.key).toList(); if (ref.read(currentAccountProvider) == account) { final replacement = state.isEmpty ? null : state.first; - ref.read(currentAccountProvider.notifier).state = replacement; + ref.read(currentAccountProvider.notifier).set(replacement); } _saveAccounts(); } @@ -61,7 +61,7 @@ class RealAccounts extends _$RealAccounts { final newState = state.toList()..[index] = newAccount; state = newState; if (ref.read(currentAccountProvider) == oldAccount) { - ref.read(currentAccountProvider.notifier).state = newAccount; + ref.read(currentAccountProvider.notifier).set(newAccount); } if (save) { _saveAccounts(); @@ -91,7 +91,7 @@ class RealAccounts extends _$RealAccounts { /// Generates a list of senders for composing a new message @riverpod -List senders(SendersRef ref) { +List senders(Ref ref) { final accounts = ref.watch(realAccountsProvider); final senders = []; for (final account in accounts) { @@ -106,7 +106,7 @@ List senders(SendersRef ref) { /// Provides the unified account, if any @Riverpod(keepAlive: true) -UnifiedAccount? unifiedAccount(UnifiedAccountRef ref) { +UnifiedAccount? unifiedAccount(Ref ref) { final allRealAccounts = ref.watch(realAccountsProvider); final accounts = allRealAccounts.where((a) => !a.excludeFromUnified).toList(); if (accounts.length <= 1) { @@ -116,7 +116,7 @@ UnifiedAccount? unifiedAccount(UnifiedAccountRef ref) { final currentAccount = ref.read(currentAccountProvider); Future.delayed(const Duration(milliseconds: 20)).then((_) { if (currentAccount == null || currentAccount is RealAccount) { - ref.read(currentAccountProvider.notifier).state = account; + ref.read(currentAccountProvider.notifier).set(account); } }); @@ -142,7 +142,7 @@ class AllAccounts extends _$AllAccounts { //// Finds an account by its email @Riverpod(keepAlive: true) Account? findAccountByEmail( - FindAccountByEmailRef ref, { + Ref ref, { required String email, }) { final key = email.toLowerCase(); @@ -156,7 +156,7 @@ Account? findAccountByEmail( //// Finds a real account by its email @Riverpod(keepAlive: true) RealAccount? findRealAccountByEmail( - FindRealAccountByEmailRef ref, { + Ref ref, { required String email, }) { final key = email.toLowerCase(); @@ -168,7 +168,7 @@ RealAccount? findRealAccountByEmail( //// Checks if there is at least one real account with a login error @Riverpod(keepAlive: true) bool hasAccountWithError( - HasAccountWithErrorRef ref, + Ref ref, ) { final realAccounts = ref.watch(realAccountsProvider); @@ -176,11 +176,17 @@ bool hasAccountWithError( } /// Provides the locally current active account -final currentAccountProvider = StateProvider((ref) => null); +@Riverpod(keepAlive: true) +class CurrentAccount extends _$CurrentAccount { + @override + Account? build() => null; + + void set(Account? value) => state = value; +} /// Provides the current real account @riverpod -RealAccount? currentRealAccount(CurrentRealAccountRef ref) { +RealAccount? currentRealAccount(Ref ref) { final realAccounts = ref.watch(realAccountsProvider); final providedCurrentAccount = ref.watch(currentAccountProvider); diff --git a/lib/src/account/provider.g.dart b/lib/src/account/provider.g.dart index 4a76c4f..a1d1146 100644 --- a/lib/src/account/provider.g.dart +++ b/lib/src/account/provider.g.dart @@ -6,409 +6,536 @@ part of 'provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$sendersHash() => r'7d45f5bd244bb17ed18983d9eac9a6170dfde855'; +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, type=warning +/// Provides all real email accounts -/// Generates a list of senders for composing a new message -/// -/// Copied from [senders]. -@ProviderFor(senders) -final sendersProvider = AutoDisposeProvider>.internal( - senders, - name: r'sendersProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$sendersHash, - dependencies: null, - allTransitiveDependencies: null, -); - -typedef SendersRef = AutoDisposeProviderRef>; -String _$unifiedAccountHash() => r'5380f681599f9354b8ecd0cbda4c40dedd9de535'; +@ProviderFor(RealAccounts) +const realAccountsProvider = RealAccountsProvider._(); -/// Provides the unified account, if any -/// -/// Copied from [unifiedAccount]. -@ProviderFor(unifiedAccount) -final unifiedAccountProvider = Provider.internal( - unifiedAccount, - name: r'unifiedAccountProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$unifiedAccountHash, - dependencies: null, - allTransitiveDependencies: null, -); - -typedef UnifiedAccountRef = ProviderRef; -String _$findAccountByEmailHash() => - r'692760656b2f9223f3ef929e040c413f2dd4c571'; - -/// Copied from Dart SDK -class _SystemHash { - _SystemHash._(); - - static int combine(int hash, int value) { - // ignore: parameter_assignments - hash = 0x1fffffff & (hash + value); - // ignore: parameter_assignments - hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10)); - return hash ^ (hash >> 6); +/// Provides all real email accounts +final class RealAccountsProvider + extends $NotifierProvider> { + /// Provides all real email accounts + const RealAccountsProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'realAccountsProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$realAccountsHash(); + + @$internal + @override + RealAccounts create() => RealAccounts(); + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(List value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider>(value), + ); } +} - static int finish(int hash) { - // ignore: parameter_assignments - hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3)); - // ignore: parameter_assignments - hash = hash ^ (hash >> 11); - return 0x1fffffff & (hash + ((0x00003fff & hash) << 15)); +String _$realAccountsHash() => r'21a9e474019f990274b067cdffc129ed1e1447b2'; + +/// Provides all real email accounts + +abstract class _$RealAccounts extends $Notifier> { + List build(); + @$mustCallSuper + @override + void runBuild() { + final created = build(); + final ref = this.ref as $Ref, List>; + final element = ref.element as $ClassProviderElement< + AnyNotifier, List>, + List, + Object?, + Object?>; + element.handleValue(ref, created); } } -//// Finds an account by its email -/// -/// Copied from [findAccountByEmail]. -@ProviderFor(findAccountByEmail) -const findAccountByEmailProvider = FindAccountByEmailFamily(); +/// Generates a list of senders for composing a new message -//// Finds an account by its email -/// -/// Copied from [findAccountByEmail]. -class FindAccountByEmailFamily extends Family { - //// Finds an account by its email - /// - /// Copied from [findAccountByEmail]. - const FindAccountByEmailFamily(); +@ProviderFor(senders) +const sendersProvider = SendersProvider._(); - //// Finds an account by its email - /// - /// Copied from [findAccountByEmail]. - FindAccountByEmailProvider call({ - required String email, - }) { - return FindAccountByEmailProvider( - email: email, +/// Generates a list of senders for composing a new message + +final class SendersProvider + extends $FunctionalProvider, List, List> + with $Provider> { + /// Generates a list of senders for composing a new message + const SendersProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'sendersProvider', + isAutoDispose: true, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$sendersHash(); + + @$internal + @override + $ProviderElement> $createElement($ProviderPointer pointer) => + $ProviderElement(pointer); + + @override + List create(Ref ref) { + return senders(ref); + } + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(List value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider>(value), ); } +} + +String _$sendersHash() => r'18264a8d49d73eb1be448a51ff7deb6c9a653fcd'; + +/// Provides the unified account, if any + +@ProviderFor(unifiedAccount) +const unifiedAccountProvider = UnifiedAccountProvider._(); + +/// Provides the unified account, if any + +final class UnifiedAccountProvider extends $FunctionalProvider with $Provider { + /// Provides the unified account, if any + const UnifiedAccountProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'unifiedAccountProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); @override - FindAccountByEmailProvider getProviderOverride( - covariant FindAccountByEmailProvider provider, - ) { - return call( - email: provider.email, + String debugGetCreateSourceHash() => _$unifiedAccountHash(); + + @$internal + @override + $ProviderElement $createElement($ProviderPointer pointer) => + $ProviderElement(pointer); + + @override + UnifiedAccount? create(Ref ref) { + return unifiedAccount(ref); + } + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(UnifiedAccount? value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), ); } +} - static const Iterable? _dependencies = null; +String _$unifiedAccountHash() => r'1478397550613cce60ee308b2a8a35c27dd63090'; - @override - Iterable? get dependencies => _dependencies; +/// Provides all accounts - static const Iterable? _allTransitiveDependencies = null; +@ProviderFor(AllAccounts) +const allAccountsProvider = AllAccountsProvider._(); + +/// Provides all accounts +final class AllAccountsProvider + extends $NotifierProvider> { + /// Provides all accounts + const AllAccountsProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'allAccountsProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); @override - Iterable? get allTransitiveDependencies => - _allTransitiveDependencies; + String debugGetCreateSourceHash() => _$allAccountsHash(); + + @$internal + @override + AllAccounts create() => AllAccounts(); + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(List value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider>(value), + ); + } +} + +String _$allAccountsHash() => r'72f9626b7f40dfa85b19cbc7a694494a13b9638f'; +/// Provides all accounts + +abstract class _$AllAccounts extends $Notifier> { + List build(); + @$mustCallSuper @override - String? get name => r'findAccountByEmailProvider'; + void runBuild() { + final created = build(); + final ref = this.ref as $Ref, List>; + final element = ref.element as $ClassProviderElement< + AnyNotifier, List>, + List, + Object?, + Object?>; + element.handleValue(ref, created); + } } //// Finds an account by its email -/// -/// Copied from [findAccountByEmail]. -class FindAccountByEmailProvider extends Provider { + +@ProviderFor(findAccountByEmail) +const findAccountByEmailProvider = FindAccountByEmailFamily._(); + +//// Finds an account by its email + +final class FindAccountByEmailProvider + extends $FunctionalProvider + with $Provider { //// Finds an account by its email - /// - /// Copied from [findAccountByEmail]. - FindAccountByEmailProvider({ - required String email, - }) : this._internal( - (ref) => findAccountByEmail( - ref as FindAccountByEmailRef, - email: email, - ), - from: findAccountByEmailProvider, + const FindAccountByEmailProvider._( + {required FindAccountByEmailFamily super.from, + required String super.argument}) + : super( + retry: null, name: r'findAccountByEmailProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$findAccountByEmailHash, - dependencies: FindAccountByEmailFamily._dependencies, - allTransitiveDependencies: - FindAccountByEmailFamily._allTransitiveDependencies, - email: email, + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, ); - FindAccountByEmailProvider._internal( - super._createNotifier, { - required super.name, - required super.dependencies, - required super.allTransitiveDependencies, - required super.debugGetCreateSourceHash, - required super.from, - required this.email, - }) : super.internal(); + @override + String debugGetCreateSourceHash() => _$findAccountByEmailHash(); - final String email; + @override + String toString() { + return r'findAccountByEmailProvider' + '' + '($argument)'; + } + @$internal @override - Override overrideWith( - Account? Function(FindAccountByEmailRef provider) create, - ) { - return ProviderOverride( - origin: this, - override: FindAccountByEmailProvider._internal( - (ref) => create(ref as FindAccountByEmailRef), - from: from, - name: null, - dependencies: null, - allTransitiveDependencies: null, - debugGetCreateSourceHash: null, - email: email, - ), + $ProviderElement $createElement($ProviderPointer pointer) => + $ProviderElement(pointer); + + @override + Account? create(Ref ref) { + final argument = this.argument as String; + return findAccountByEmail( + ref, + email: argument, ); } - @override - ProviderElement createElement() { - return _FindAccountByEmailProviderElement(this); + /// {@macro riverpod.override_with_value} + Override overrideWithValue(Account? value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); } @override bool operator ==(Object other) { - return other is FindAccountByEmailProvider && other.email == email; + return other is FindAccountByEmailProvider && other.argument == argument; } @override int get hashCode { - var hash = _SystemHash.combine(0, runtimeType.hashCode); - hash = _SystemHash.combine(hash, email.hashCode); - - return _SystemHash.finish(hash); + return argument.hashCode; } } -mixin FindAccountByEmailRef on ProviderRef { - /// The parameter `email` of this provider. - String get email; -} +String _$findAccountByEmailHash() => + r'bc7f5e38e5da90558020233b74439af8091fd463'; -class _FindAccountByEmailProviderElement extends ProviderElement - with FindAccountByEmailRef { - _FindAccountByEmailProviderElement(super.provider); +//// Finds an account by its email - @override - String get email => (origin as FindAccountByEmailProvider).email; -} +final class FindAccountByEmailFamily extends $Family + with $FunctionalFamilyOverride { + const FindAccountByEmailFamily._() + : super( + retry: null, + name: r'findAccountByEmailProvider', + dependencies: null, + $allTransitiveDependencies: null, + isAutoDispose: false, + ); -String _$findRealAccountByEmailHash() => - r'4fbe9680f101417c67bc9eebda553005f78d77c1'; + //// Finds an account by its email + + FindAccountByEmailProvider call({ + required String email, + }) => + FindAccountByEmailProvider._(argument: email, from: this); + @override + String toString() => r'findAccountByEmailProvider'; +} //// Finds a real account by its email -/// -/// Copied from [findRealAccountByEmail]. + @ProviderFor(findRealAccountByEmail) -const findRealAccountByEmailProvider = FindRealAccountByEmailFamily(); +const findRealAccountByEmailProvider = FindRealAccountByEmailFamily._(); //// Finds a real account by its email -/// -/// Copied from [findRealAccountByEmail]. -class FindRealAccountByEmailFamily extends Family { - //// Finds a real account by its email - /// - /// Copied from [findRealAccountByEmail]. - const FindRealAccountByEmailFamily(); +final class FindRealAccountByEmailProvider + extends $FunctionalProvider + with $Provider { //// Finds a real account by its email - /// - /// Copied from [findRealAccountByEmail]. - FindRealAccountByEmailProvider call({ - required String email, - }) { - return FindRealAccountByEmailProvider( - email: email, - ); - } + const FindRealAccountByEmailProvider._( + {required FindRealAccountByEmailFamily super.from, + required String super.argument}) + : super( + retry: null, + name: r'findRealAccountByEmailProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); @override - FindRealAccountByEmailProvider getProviderOverride( - covariant FindRealAccountByEmailProvider provider, - ) { - return call( - email: provider.email, - ); + String debugGetCreateSourceHash() => _$findRealAccountByEmailHash(); + + @override + String toString() { + return r'findRealAccountByEmailProvider' + '' + '($argument)'; } - static const Iterable? _dependencies = null; + @$internal + @override + $ProviderElement $createElement($ProviderPointer pointer) => + $ProviderElement(pointer); @override - Iterable? get dependencies => _dependencies; + RealAccount? create(Ref ref) { + final argument = this.argument as String; + return findRealAccountByEmail( + ref, + email: argument, + ); + } - static const Iterable? _allTransitiveDependencies = null; + /// {@macro riverpod.override_with_value} + Override overrideWithValue(RealAccount? value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); + } @override - Iterable? get allTransitiveDependencies => - _allTransitiveDependencies; + bool operator ==(Object other) { + return other is FindRealAccountByEmailProvider && + other.argument == argument; + } @override - String? get name => r'findRealAccountByEmailProvider'; + int get hashCode { + return argument.hashCode; + } } +String _$findRealAccountByEmailHash() => + r'8716fca964f802d6724d3e17f79946cf9a8c9b96'; + //// Finds a real account by its email -/// -/// Copied from [findRealAccountByEmail]. -class FindRealAccountByEmailProvider extends Provider { + +final class FindRealAccountByEmailFamily extends $Family + with $FunctionalFamilyOverride { + const FindRealAccountByEmailFamily._() + : super( + retry: null, + name: r'findRealAccountByEmailProvider', + dependencies: null, + $allTransitiveDependencies: null, + isAutoDispose: false, + ); + //// Finds a real account by its email - /// - /// Copied from [findRealAccountByEmail]. - FindRealAccountByEmailProvider({ + + FindRealAccountByEmailProvider call({ required String email, - }) : this._internal( - (ref) => findRealAccountByEmail( - ref as FindRealAccountByEmailRef, - email: email, - ), - from: findRealAccountByEmailProvider, - name: r'findRealAccountByEmailProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$findRealAccountByEmailHash, - dependencies: FindRealAccountByEmailFamily._dependencies, - allTransitiveDependencies: - FindRealAccountByEmailFamily._allTransitiveDependencies, - email: email, + }) => + FindRealAccountByEmailProvider._(argument: email, from: this); + + @override + String toString() => r'findRealAccountByEmailProvider'; +} +//// Checks if there is at least one real account with a login error + +@ProviderFor(hasAccountWithError) +const hasAccountWithErrorProvider = HasAccountWithErrorProvider._(); + +//// Checks if there is at least one real account with a login error + +final class HasAccountWithErrorProvider + extends $FunctionalProvider with $Provider { + //// Checks if there is at least one real account with a login error + const HasAccountWithErrorProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'hasAccountWithErrorProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, ); - FindRealAccountByEmailProvider._internal( - super._createNotifier, { - required super.name, - required super.dependencies, - required super.allTransitiveDependencies, - required super.debugGetCreateSourceHash, - required super.from, - required this.email, - }) : super.internal(); + @override + String debugGetCreateSourceHash() => _$hasAccountWithErrorHash(); - final String email; + @$internal + @override + $ProviderElement $createElement($ProviderPointer pointer) => + $ProviderElement(pointer); @override - Override overrideWith( - RealAccount? Function(FindRealAccountByEmailRef provider) create, - ) { - return ProviderOverride( + bool create(Ref ref) { + return hasAccountWithError(ref); + } + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(bool value) { + return $ProviderOverride( origin: this, - override: FindRealAccountByEmailProvider._internal( - (ref) => create(ref as FindRealAccountByEmailRef), - from: from, - name: null, - dependencies: null, - allTransitiveDependencies: null, - debugGetCreateSourceHash: null, - email: email, - ), + providerOverride: $SyncValueProvider(value), ); } +} - @override - ProviderElement createElement() { - return _FindRealAccountByEmailProviderElement(this); - } +String _$hasAccountWithErrorHash() => + r'b319cfa202e70e6b0b5c50af8eef697149c4428b'; + +/// Provides the locally current active account + +@ProviderFor(CurrentAccount) +const currentAccountProvider = CurrentAccountProvider._(); + +/// Provides the locally current active account +final class CurrentAccountProvider + extends $NotifierProvider { + /// Provides the locally current active account + const CurrentAccountProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'currentAccountProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); @override - bool operator ==(Object other) { - return other is FindRealAccountByEmailProvider && other.email == email; - } + String debugGetCreateSourceHash() => _$currentAccountHash(); + @$internal @override - int get hashCode { - var hash = _SystemHash.combine(0, runtimeType.hashCode); - hash = _SystemHash.combine(hash, email.hashCode); + CurrentAccount create() => CurrentAccount(); - return _SystemHash.finish(hash); + /// {@macro riverpod.override_with_value} + Override overrideWithValue(Account? value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); } } -mixin FindRealAccountByEmailRef on ProviderRef { - /// The parameter `email` of this provider. - String get email; -} +String _$currentAccountHash() => r'c96b32ab70ffb000ebaf36253ecfcbfc9c195de6'; -class _FindRealAccountByEmailProviderElement - extends ProviderElement with FindRealAccountByEmailRef { - _FindRealAccountByEmailProviderElement(super.provider); +/// Provides the locally current active account +abstract class _$CurrentAccount extends $Notifier { + Account? build(); + @$mustCallSuper @override - String get email => (origin as FindRealAccountByEmailProvider).email; + void runBuild() { + final created = build(); + final ref = this.ref as $Ref; + final element = ref.element as $ClassProviderElement< + AnyNotifier, Account?, Object?, Object?>; + element.handleValue(ref, created); + } } -String _$hasAccountWithErrorHash() => - r'df9f05a11751823686a4b6dc985e5cae0224a07f'; //// Checks if there is at least one real account with a login error -/// -/// Copied from [hasAccountWithError]. -@ProviderFor(hasAccountWithError) -final hasAccountWithErrorProvider = Provider.internal( - hasAccountWithError, - name: r'hasAccountWithErrorProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$hasAccountWithErrorHash, - dependencies: null, - allTransitiveDependencies: null, -); - -typedef HasAccountWithErrorRef = ProviderRef; -String _$currentRealAccountHash() => - r'dd79b65ff2ea824e117c4f13416c6b6993fa4a86'; - /// Provides the current real account -/// -/// Copied from [currentRealAccount]. + @ProviderFor(currentRealAccount) -final currentRealAccountProvider = AutoDisposeProvider.internal( - currentRealAccount, - name: r'currentRealAccountProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$currentRealAccountHash, - dependencies: null, - allTransitiveDependencies: null, -); - -typedef CurrentRealAccountRef = AutoDisposeProviderRef; -String _$realAccountsHash() => r'cf98cca42c7239746aea0af704cbf02a96108a7f'; +const currentRealAccountProvider = CurrentRealAccountProvider._(); -/// Provides all real email accounts -/// -/// Copied from [RealAccounts]. -@ProviderFor(RealAccounts) -final realAccountsProvider = - NotifierProvider>.internal( - RealAccounts.new, - name: r'realAccountsProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$realAccountsHash, - dependencies: null, - allTransitiveDependencies: null, -); - -typedef _$RealAccounts = Notifier>; -String _$allAccountsHash() => r'72f9626b7f40dfa85b19cbc7a694494a13b9638f'; +/// Provides the current real account -/// Provides all accounts -/// -/// Copied from [AllAccounts]. -@ProviderFor(AllAccounts) -final allAccountsProvider = - NotifierProvider>.internal( - AllAccounts.new, - name: r'allAccountsProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$allAccountsHash, - dependencies: null, - allTransitiveDependencies: null, -); - -typedef _$AllAccounts = Notifier>; -// ignore_for_file: type=lint -// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member +final class CurrentRealAccountProvider + extends $FunctionalProvider + with $Provider { + /// Provides the current real account + const CurrentRealAccountProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'currentRealAccountProvider', + isAutoDispose: true, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$currentRealAccountHash(); + + @$internal + @override + $ProviderElement $createElement($ProviderPointer pointer) => + $ProviderElement(pointer); + + @override + RealAccount? create(Ref ref) { + return currentRealAccount(ref); + } + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(RealAccount? value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); + } +} + +String _$currentRealAccountHash() => + r'a127af4fb26fedf15cab37480731190cdae61f4e'; diff --git a/lib/src/app.dart b/lib/src/app.dart index 585881a..c27f821 100644 --- a/lib/src/app.dart +++ b/lib/src/app.dart @@ -46,7 +46,7 @@ class EnoughMailApp extends HookConsumerWidget { useOnAppLifecycleStateChange((previous, current) { logger.d('raw AppLifecycleState changed from $previous to $current'); - ref.read(rawAppLifecycleStateProvider.notifier).state = current; + ref.read(rawAppLifecycleStateProvider.notifier).set(current); }); final themeSettingsData = ref.watch(themeFinderProvider(context: context)); diff --git a/lib/src/app_lifecycle/provider.dart b/lib/src/app_lifecycle/provider.dart index 0816b4f..07490ab 100644 --- a/lib/src/app_lifecycle/provider.dart +++ b/lib/src/app_lifecycle/provider.dart @@ -7,8 +7,13 @@ import '../logger.dart'; part 'provider.g.dart'; /// Allows to retrieve the current (raw) app life cycle -final rawAppLifecycleStateProvider = - StateProvider((ref) => AppLifecycleState.resumed); +@Riverpod(keepAlive: true) +class RawAppLifecycleState extends _$RawAppLifecycleState { + @override + AppLifecycleState build() => AppLifecycleState.resumed; + + void set(AppLifecycleState value) => state = value; +} /// Allows to retrieve the current (filtered) app life cycle @Riverpod(keepAlive: true) @@ -54,14 +59,14 @@ class AppLifecycle extends _$AppLifecycle { /// Easy access to be notified when the app is resumed @Riverpod(keepAlive: true) -bool appIsResumed(AppIsResumedRef ref) => ref.watch( +bool appIsResumed(Ref ref) => ref.watch( appLifecycleProvider .select((value) => value == AppLifecycleState.resumed), ); /// Easy access to be notified when the app is put to the background @Riverpod(keepAlive: true) -bool appIsInactivated(AppIsInactivatedRef ref) => ref.watch( +bool appIsInactivated(Ref ref) => ref.watch( appLifecycleProvider .select((value) => value == AppLifecycleState.inactive), ); diff --git a/lib/src/app_lifecycle/provider.g.dart b/lib/src/app_lifecycle/provider.g.dart index 526470e..e1c53fd 100644 --- a/lib/src/app_lifecycle/provider.g.dart +++ b/lib/src/app_lifecycle/provider.g.dart @@ -6,55 +6,207 @@ part of 'provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$appIsResumedHash() => r'2b8853b672a6faf4f961d546241be25a23bb8ebe'; +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, type=warning +/// Allows to retrieve the current (raw) app life cycle + +@ProviderFor(RawAppLifecycleState) +const rawAppLifecycleStateProvider = RawAppLifecycleStateProvider._(); + +/// Allows to retrieve the current (raw) app life cycle +final class RawAppLifecycleStateProvider + extends $NotifierProvider { + /// Allows to retrieve the current (raw) app life cycle + const RawAppLifecycleStateProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'rawAppLifecycleStateProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$rawAppLifecycleStateHash(); + + @$internal + @override + RawAppLifecycleState create() => RawAppLifecycleState(); + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(AppLifecycleState value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); + } +} + +String _$rawAppLifecycleStateHash() => + r'29191ca758dd8efe4d61e55360e2e8fe12ae0355'; + +/// Allows to retrieve the current (raw) app life cycle + +abstract class _$RawAppLifecycleState extends $Notifier { + AppLifecycleState build(); + @$mustCallSuper + @override + void runBuild() { + final created = build(); + final ref = this.ref as $Ref; + final element = ref.element as $ClassProviderElement< + AnyNotifier, + AppLifecycleState, + Object?, + Object?>; + element.handleValue(ref, created); + } +} + +/// Allows to retrieve the current (filtered) app life cycle + +@ProviderFor(AppLifecycle) +const appLifecycleProvider = AppLifecycleProvider._(); + +/// Allows to retrieve the current (filtered) app life cycle +final class AppLifecycleProvider + extends $NotifierProvider { + /// Allows to retrieve the current (filtered) app life cycle + const AppLifecycleProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'appLifecycleProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$appLifecycleHash(); + + @$internal + @override + AppLifecycle create() => AppLifecycle(); + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(AppLifecycleState value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); + } +} + +String _$appLifecycleHash() => r'1a695a26a70dd1d815c73f9281063bc8b7ee98f1'; + +/// Allows to retrieve the current (filtered) app life cycle + +abstract class _$AppLifecycle extends $Notifier { + AppLifecycleState build(); + @$mustCallSuper + @override + void runBuild() { + final created = build(); + final ref = this.ref as $Ref; + final element = ref.element as $ClassProviderElement< + AnyNotifier, + AppLifecycleState, + Object?, + Object?>; + element.handleValue(ref, created); + } +} /// Easy access to be notified when the app is resumed -/// -/// Copied from [appIsResumed]. + @ProviderFor(appIsResumed) -final appIsResumedProvider = Provider.internal( - appIsResumed, - name: r'appIsResumedProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$appIsResumedHash, - dependencies: null, - allTransitiveDependencies: null, -); - -typedef AppIsResumedRef = ProviderRef; -String _$appIsInactivatedHash() => r'c13bdf5ad0eec6c95c5a85d2fe88ad84f9b3792f'; +const appIsResumedProvider = AppIsResumedProvider._(); + +/// Easy access to be notified when the app is resumed + +final class AppIsResumedProvider extends $FunctionalProvider + with $Provider { + /// Easy access to be notified when the app is resumed + const AppIsResumedProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'appIsResumedProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$appIsResumedHash(); + + @$internal + @override + $ProviderElement $createElement($ProviderPointer pointer) => + $ProviderElement(pointer); + + @override + bool create(Ref ref) { + return appIsResumed(ref); + } + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(bool value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); + } +} + +String _$appIsResumedHash() => r'8a75af6a846006a44db1d3f49ea2365a79fb21cd'; /// Easy access to be notified when the app is put to the background -/// -/// Copied from [appIsInactivated]. + @ProviderFor(appIsInactivated) -final appIsInactivatedProvider = Provider.internal( - appIsInactivated, - name: r'appIsInactivatedProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$appIsInactivatedHash, - dependencies: null, - allTransitiveDependencies: null, -); - -typedef AppIsInactivatedRef = ProviderRef; -String _$appLifecycleHash() => r'1a695a26a70dd1d815c73f9281063bc8b7ee98f1'; +const appIsInactivatedProvider = AppIsInactivatedProvider._(); -/// Allows to retrieve the current (filtered) app life cycle -/// -/// Copied from [AppLifecycle]. -@ProviderFor(AppLifecycle) -final appLifecycleProvider = - NotifierProvider.internal( - AppLifecycle.new, - name: r'appLifecycleProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$appLifecycleHash, - dependencies: null, - allTransitiveDependencies: null, -); - -typedef _$AppLifecycle = Notifier; -// ignore_for_file: type=lint -// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member +/// Easy access to be notified when the app is put to the background + +final class AppIsInactivatedProvider + extends $FunctionalProvider with $Provider { + /// Easy access to be notified when the app is put to the background + const AppIsInactivatedProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'appIsInactivatedProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$appIsInactivatedHash(); + + @$internal + @override + $ProviderElement $createElement($ProviderPointer pointer) => + $ProviderElement(pointer); + + @override + bool create(Ref ref) { + return appIsInactivated(ref); + } + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(bool value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); + } +} + +String _$appIsInactivatedHash() => r'14affc22a0405bcbf1d58ed3fb65f9d23510c65b'; diff --git a/lib/src/background/provider.g.dart b/lib/src/background/provider.g.dart index 3003276..1cedd53 100644 --- a/lib/src/background/provider.g.dart +++ b/lib/src/background/provider.g.dart @@ -6,21 +6,52 @@ part of 'provider.dart'; // RiverpodGenerator // ************************************************************************** +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, type=warning +/// Registers the background service to check for emails regularly + +@ProviderFor(Background) +const backgroundProvider = BackgroundProvider._(); + +/// Registers the background service to check for emails regularly +final class BackgroundProvider + extends $AsyncNotifierProvider { + /// Registers the background service to check for emails regularly + const BackgroundProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'backgroundProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$backgroundHash(); + + @$internal + @override + Background create() => Background(); +} + String _$backgroundHash() => r'14e47ad6c285728ca04916d97fff9239be504a3c'; /// Registers the background service to check for emails regularly -/// -/// Copied from [Background]. -@ProviderFor(Background) -final backgroundProvider = AsyncNotifierProvider.internal( - Background.new, - name: r'backgroundProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$backgroundHash, - dependencies: null, - allTransitiveDependencies: null, -); - -typedef _$Background = AsyncNotifier; -// ignore_for_file: type=lint -// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member + +abstract class _$Background extends $AsyncNotifier { + FutureOr build(); + @$mustCallSuper + @override + void runBuild() { + build(); + final ref = this.ref as $Ref, void>; + final element = ref.element as $ClassProviderElement< + AnyNotifier, void>, + AsyncValue, + Object?, + Object?>; + element.handleValue(ref, null); + } +} diff --git a/lib/src/contact/provider.dart b/lib/src/contact/provider.dart index 3887b68..43e00a5 100644 --- a/lib/src/contact/provider.dart +++ b/lib/src/contact/provider.dart @@ -12,7 +12,7 @@ part 'provider.g.dart'; /// Loads the contacts for the given [account] @Riverpod(keepAlive: true) Future contactsLoader( - ContactsLoaderRef ref, { + Ref ref, { required RealAccount account, }) async { final mailClient = EmailService.instance diff --git a/lib/src/contact/provider.g.dart b/lib/src/contact/provider.g.dart index b8ae8dd..6ed097b 100644 --- a/lib/src/contact/provider.g.dart +++ b/lib/src/contact/provider.g.dart @@ -6,165 +6,88 @@ part of 'provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$contactsLoaderHash() => r'2205f8a929faafca4bbffe075c2e3f2961194cbb'; - -/// Copied from Dart SDK -class _SystemHash { - _SystemHash._(); - - static int combine(int hash, int value) { - // ignore: parameter_assignments - hash = 0x1fffffff & (hash + value); - // ignore: parameter_assignments - hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10)); - return hash ^ (hash >> 6); - } - - static int finish(int hash) { - // ignore: parameter_assignments - hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3)); - // ignore: parameter_assignments - hash = hash ^ (hash >> 11); - return 0x1fffffff & (hash + ((0x00003fff & hash) << 15)); - } -} - +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, type=warning /// Loads the contacts for the given [account] -/// -/// Copied from [contactsLoader]. + @ProviderFor(contactsLoader) -const contactsLoaderProvider = ContactsLoaderFamily(); +const contactsLoaderProvider = ContactsLoaderFamily._(); /// Loads the contacts for the given [account] -/// -/// Copied from [contactsLoader]. -class ContactsLoaderFamily extends Family> { - /// Loads the contacts for the given [account] - /// - /// Copied from [contactsLoader]. - const ContactsLoaderFamily(); +final class ContactsLoaderProvider extends $FunctionalProvider< + AsyncValue, ContactManager, FutureOr> + with $FutureModifier, $FutureProvider { /// Loads the contacts for the given [account] - /// - /// Copied from [contactsLoader]. - ContactsLoaderProvider call({ - required RealAccount account, - }) { - return ContactsLoaderProvider( - account: account, - ); - } - - @override - ContactsLoaderProvider getProviderOverride( - covariant ContactsLoaderProvider provider, - ) { - return call( - account: provider.account, - ); - } - - static const Iterable? _dependencies = null; + const ContactsLoaderProvider._( + {required ContactsLoaderFamily super.from, + required RealAccount super.argument}) + : super( + retry: null, + name: r'contactsLoaderProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); @override - Iterable? get dependencies => _dependencies; - - static const Iterable? _allTransitiveDependencies = null; + String debugGetCreateSourceHash() => _$contactsLoaderHash(); @override - Iterable? get allTransitiveDependencies => - _allTransitiveDependencies; + String toString() { + return r'contactsLoaderProvider' + '' + '($argument)'; + } + @$internal @override - String? get name => r'contactsLoaderProvider'; -} - -/// Loads the contacts for the given [account] -/// -/// Copied from [contactsLoader]. -class ContactsLoaderProvider extends FutureProvider { - /// Loads the contacts for the given [account] - /// - /// Copied from [contactsLoader]. - ContactsLoaderProvider({ - required RealAccount account, - }) : this._internal( - (ref) => contactsLoader( - ref as ContactsLoaderRef, - account: account, - ), - from: contactsLoaderProvider, - name: r'contactsLoaderProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$contactsLoaderHash, - dependencies: ContactsLoaderFamily._dependencies, - allTransitiveDependencies: - ContactsLoaderFamily._allTransitiveDependencies, - account: account, - ); - - ContactsLoaderProvider._internal( - super._createNotifier, { - required super.name, - required super.dependencies, - required super.allTransitiveDependencies, - required super.debugGetCreateSourceHash, - required super.from, - required this.account, - }) : super.internal(); - - final RealAccount account; + $FutureProviderElement $createElement( + $ProviderPointer pointer) => + $FutureProviderElement(pointer); @override - Override overrideWith( - FutureOr Function(ContactsLoaderRef provider) create, - ) { - return ProviderOverride( - origin: this, - override: ContactsLoaderProvider._internal( - (ref) => create(ref as ContactsLoaderRef), - from: from, - name: null, - dependencies: null, - allTransitiveDependencies: null, - debugGetCreateSourceHash: null, - account: account, - ), + FutureOr create(Ref ref) { + final argument = this.argument as RealAccount; + return contactsLoader( + ref, + account: argument, ); } - @override - FutureProviderElement createElement() { - return _ContactsLoaderProviderElement(this); - } - @override bool operator ==(Object other) { - return other is ContactsLoaderProvider && other.account == account; + return other is ContactsLoaderProvider && other.argument == argument; } @override int get hashCode { - var hash = _SystemHash.combine(0, runtimeType.hashCode); - hash = _SystemHash.combine(hash, account.hashCode); - - return _SystemHash.finish(hash); + return argument.hashCode; } } -mixin ContactsLoaderRef on FutureProviderRef { - /// The parameter `account` of this provider. - RealAccount get account; -} +String _$contactsLoaderHash() => r'72e7ccfee5e1e7cd60326ac3c31b2cb4dc79be42'; + +/// Loads the contacts for the given [account] -class _ContactsLoaderProviderElement - extends FutureProviderElement with ContactsLoaderRef { - _ContactsLoaderProviderElement(super.provider); +final class ContactsLoaderFamily extends $Family + with $FunctionalFamilyOverride, RealAccount> { + const ContactsLoaderFamily._() + : super( + retry: null, + name: r'contactsLoaderProvider', + dependencies: null, + $allTransitiveDependencies: null, + isAutoDispose: false, + ); + + /// Loads the contacts for the given [account] + + ContactsLoaderProvider call({ + required RealAccount account, + }) => + ContactsLoaderProvider._(argument: account, from: this); @override - RealAccount get account => (origin as ContactsLoaderProvider).account; + String toString() => r'contactsLoaderProvider'; } -// ignore_for_file: type=lint -// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member diff --git a/lib/src/extensions/extensions.g.dart b/lib/src/extensions/extensions.g.dart index 36b0628..6b329f3 100644 --- a/lib/src/extensions/extensions.g.dart +++ b/lib/src/extensions/extensions.g.dart @@ -7,7 +7,7 @@ part of 'extensions.dart'; // ************************************************************************** AppExtension _$AppExtensionFromJson(Map json) => AppExtension( - version: json['version'] as int?, + version: (json['version'] as num?)?.toInt(), accountSideMenu: (json['accountSideMenu'] as List?) ?.map((e) => AppExtensionActionDescription.fromJson(e as Map)) diff --git a/lib/src/localization/provider.dart b/lib/src/localization/provider.dart index 164abd9..07b37bd 100644 --- a/lib/src/localization/provider.dart +++ b/lib/src/localization/provider.dart @@ -1,6 +1,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; import '../settings/provider.dart'; import 'app_localizations.g.dart'; diff --git a/lib/src/localization/provider.g.dart b/lib/src/localization/provider.g.dart index 1ca7fea..4315f0c 100644 --- a/lib/src/localization/provider.g.dart +++ b/lib/src/localization/provider.g.dart @@ -6,22 +6,56 @@ part of 'provider.dart'; // RiverpodGenerator // ************************************************************************** +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, type=warning + +@ProviderFor(CurrentAppLocalization) +const currentAppLocalizationProvider = CurrentAppLocalizationProvider._(); + +final class CurrentAppLocalizationProvider + extends $NotifierProvider { + const CurrentAppLocalizationProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'currentAppLocalizationProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$currentAppLocalizationHash(); + + @$internal + @override + CurrentAppLocalization create() => CurrentAppLocalization(); + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(AppLocalizations value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); + } +} + String _$currentAppLocalizationHash() => r'c18983e4ccf75e45ed6f0a56e73423a2c1e5fa10'; -/// See also [CurrentAppLocalization]. -@ProviderFor(CurrentAppLocalization) -final currentAppLocalizationProvider = - NotifierProvider.internal( - CurrentAppLocalization.new, - name: r'currentAppLocalizationProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$currentAppLocalizationHash, - dependencies: null, - allTransitiveDependencies: null, -); - -typedef _$CurrentAppLocalization = Notifier; -// ignore_for_file: type=lint -// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member +abstract class _$CurrentAppLocalization extends $Notifier { + AppLocalizations build(); + @$mustCallSuper + @override + void runBuild() { + final created = build(); + final ref = this.ref as $Ref; + final element = ref.element as $ClassProviderElement< + AnyNotifier, + AppLocalizations, + Object?, + Object?>; + element.handleValue(ref, created); + } +} diff --git a/lib/src/lock/provider.g.dart b/lib/src/lock/provider.g.dart index 1d47d36..c28e046 100644 --- a/lib/src/lock/provider.g.dart +++ b/lib/src/lock/provider.g.dart @@ -6,21 +6,56 @@ part of 'provider.dart'; // RiverpodGenerator // ************************************************************************** +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, type=warning +/// Checks the app life cycle and displays the lock screen if needed + +@ProviderFor(AppLock) +const appLockProvider = AppLockProvider._(); + +/// Checks the app life cycle and displays the lock screen if needed +final class AppLockProvider extends $NotifierProvider { + /// Checks the app life cycle and displays the lock screen if needed + const AppLockProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'appLockProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$appLockHash(); + + @$internal + @override + AppLock create() => AppLock(); + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(void value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); + } +} + String _$appLockHash() => r'f41ef0732f43fae14f10611015d2415d32463a70'; /// Checks the app life cycle and displays the lock screen if needed -/// -/// Copied from [AppLock]. -@ProviderFor(AppLock) -final appLockProvider = NotifierProvider.internal( - AppLock.new, - name: r'appLockProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$appLockHash, - dependencies: null, - allTransitiveDependencies: null, -); - -typedef _$AppLock = Notifier; -// ignore_for_file: type=lint -// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member + +abstract class _$AppLock extends $Notifier { + void build(); + @$mustCallSuper + @override + void runBuild() { + build(); + final ref = this.ref as $Ref; + final element = ref.element as $ClassProviderElement< + AnyNotifier, void, Object?, Object?>; + element.handleValue(ref, null); + } +} diff --git a/lib/src/mail/provider.dart b/lib/src/mail/provider.dart index 3f9140d..bbb4554 100644 --- a/lib/src/mail/provider.dart +++ b/lib/src/mail/provider.dart @@ -1,6 +1,5 @@ import 'package:collection/collection.dart'; import 'package:enough_mail/enough_mail.dart'; -import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import '../account/model.dart'; @@ -27,7 +26,7 @@ class Source extends _$Source { Mailbox? mailbox, }) { Future.delayed(const Duration(milliseconds: 10)).then( - (_) => ref.read(currentMailboxProvider.notifier).state = mailbox, + (_) => ref.read(currentMailboxProvider.notifier).set(mailbox), ); final usedMailbox = mailbox?.isInbox ?? true ? null : mailbox; if (account is RealAccount) { @@ -140,7 +139,7 @@ class RealSource extends _$RealSource { //// Loads the mailbox tree for the given account @Riverpod(keepAlive: true) Future> mailboxTree( - MailboxTreeRef ref, { + Ref ref, { required Account account, }) async { logger.d('Creating mailbox tree for ${account.key}'); @@ -169,7 +168,7 @@ Future> mailboxTree( //// Loads the mailbox tree for the given account @riverpod Future findMailbox( - FindMailboxRef ref, { + Ref ref, { required Account account, required String encodedMailboxPath, }) async { @@ -324,7 +323,7 @@ class MailClientSource extends _$MailClientSource { /// Carries out a search for mail messages @riverpod Future mailSearch( - MailSearchRef ref, { + Ref ref, { required AppLocalizations localizations, required MailSearch search, }) async { @@ -338,7 +337,7 @@ Future mailSearch( /// Loads the message source for the given payload @riverpod Future singleMessageLoader( - SingleMessageLoaderRef ref, { + Ref ref, { required MailNotificationPayload payload, }) async { final account = ref.watch( @@ -355,7 +354,7 @@ Future singleMessageLoader( /// Provides mail clients @riverpod Future firstTimeMailClientSource( - FirstTimeMailClientSourceRef ref, { + Ref ref, { required RealAccount account, Mailbox? mailbox, }) => @@ -369,7 +368,7 @@ Future firstTimeMailClientSource( /// Creates a new [MessageBuilder] based on the given [mailtoUri] uri @riverpod MessageBuilder mailto( - MailtoRef ref, { + Ref ref, { required Uri mailtoUri, required MimeMessage originatingMessage, }) { @@ -389,8 +388,14 @@ MessageBuilder mailto( fromAddress ??= searchFor.first; } - return MessageBuilder.prepareMailtoBasedMessage(mailtoUri, fromAddress); + return MessageBuilder.prepareMailtoBasedMessage(mailtoUri, fromAddress!); } /// Provides the locally current active mailbox -final currentMailboxProvider = StateProvider((ref) => null); +@Riverpod(keepAlive: true) +class CurrentMailbox extends _$CurrentMailbox { + @override + Mailbox? build() => null; + + void set(Mailbox? value) => state = value; +} diff --git a/lib/src/mail/provider.g.dart b/lib/src/mail/provider.g.dart index c69571f..74deed9 100644 --- a/lib/src/mail/provider.g.dart +++ b/lib/src/mail/provider.g.dart @@ -6,1845 +6,1257 @@ part of 'provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$mailboxTreeHash() => r'2feafc0f0d00b8c4547b6408363a522539e85853'; - -/// Copied from Dart SDK -class _SystemHash { - _SystemHash._(); - - static int combine(int hash, int value) { - // ignore: parameter_assignments - hash = 0x1fffffff & (hash + value); - // ignore: parameter_assignments - hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10)); - return hash ^ (hash >> 6); - } - - static int finish(int hash) { - // ignore: parameter_assignments - hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3)); - // ignore: parameter_assignments - hash = hash ^ (hash >> 11); - return 0x1fffffff & (hash + ((0x00003fff & hash) << 15)); - } -} - -//// Loads the mailbox tree for the given account -/// -/// Copied from [mailboxTree]. -@ProviderFor(mailboxTree) -const mailboxTreeProvider = MailboxTreeFamily(); - -//// Loads the mailbox tree for the given account -/// -/// Copied from [mailboxTree]. -class MailboxTreeFamily extends Family>> { - //// Loads the mailbox tree for the given account - /// - /// Copied from [mailboxTree]. - const MailboxTreeFamily(); - - //// Loads the mailbox tree for the given account - /// - /// Copied from [mailboxTree]. - MailboxTreeProvider call({ - required Account account, - }) { - return MailboxTreeProvider( - account: account, - ); - } - - @override - MailboxTreeProvider getProviderOverride( - covariant MailboxTreeProvider provider, - ) { - return call( - account: provider.account, - ); - } - - static const Iterable? _dependencies = null; - - @override - Iterable? get dependencies => _dependencies; - - static const Iterable? _allTransitiveDependencies = null; - - @override - Iterable? get allTransitiveDependencies => - _allTransitiveDependencies; +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, type=warning +/// Provides the message source for the given account - @override - String? get name => r'mailboxTreeProvider'; -} +@ProviderFor(Source) +const sourceProvider = SourceFamily._(); -//// Loads the mailbox tree for the given account -/// -/// Copied from [mailboxTree]. -class MailboxTreeProvider extends FutureProvider> { - //// Loads the mailbox tree for the given account - /// - /// Copied from [mailboxTree]. - MailboxTreeProvider({ - required Account account, - }) : this._internal( - (ref) => mailboxTree( - ref as MailboxTreeRef, - account: account, - ), - from: mailboxTreeProvider, - name: r'mailboxTreeProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$mailboxTreeHash, - dependencies: MailboxTreeFamily._dependencies, - allTransitiveDependencies: - MailboxTreeFamily._allTransitiveDependencies, - account: account, +/// Provides the message source for the given account +final class SourceProvider + extends $AsyncNotifierProvider { + /// Provides the message source for the given account + const SourceProvider._( + {required SourceFamily super.from, + required ({ + Account account, + Mailbox? mailbox, + }) + super.argument}) + : super( + retry: null, + name: r'sourceProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, ); - MailboxTreeProvider._internal( - super._createNotifier, { - required super.name, - required super.dependencies, - required super.allTransitiveDependencies, - required super.debugGetCreateSourceHash, - required super.from, - required this.account, - }) : super.internal(); - - final Account account; + @override + String debugGetCreateSourceHash() => _$sourceHash(); @override - Override overrideWith( - FutureOr> Function(MailboxTreeRef provider) create, - ) { - return ProviderOverride( - origin: this, - override: MailboxTreeProvider._internal( - (ref) => create(ref as MailboxTreeRef), - from: from, - name: null, - dependencies: null, - allTransitiveDependencies: null, - debugGetCreateSourceHash: null, - account: account, - ), - ); + String toString() { + return r'sourceProvider' + '' + '$argument'; } + @$internal @override - FutureProviderElement> createElement() { - return _MailboxTreeProviderElement(this); - } + Source create() => Source(); @override bool operator ==(Object other) { - return other is MailboxTreeProvider && other.account == account; + return other is SourceProvider && other.argument == argument; } @override int get hashCode { - var hash = _SystemHash.combine(0, runtimeType.hashCode); - hash = _SystemHash.combine(hash, account.hashCode); - - return _SystemHash.finish(hash); + return argument.hashCode; } } -mixin MailboxTreeRef on FutureProviderRef> { - /// The parameter `account` of this provider. - Account get account; -} +String _$sourceHash() => r'bff6b2505cb3a8f92e9958e6e6a0d80b9b5bcd7d'; + +/// Provides the message source for the given account + +final class SourceFamily extends $Family + with + $ClassFamilyOverride< + Source, + AsyncValue, + MessageSource, + FutureOr, + ({ + Account account, + Mailbox? mailbox, + })> { + const SourceFamily._() + : super( + retry: null, + name: r'sourceProvider', + dependencies: null, + $allTransitiveDependencies: null, + isAutoDispose: false, + ); + + /// Provides the message source for the given account -class _MailboxTreeProviderElement extends FutureProviderElement> - with MailboxTreeRef { - _MailboxTreeProviderElement(super.provider); + SourceProvider call({ + required Account account, + Mailbox? mailbox, + }) => + SourceProvider._(argument: ( + account: account, + mailbox: mailbox, + ), from: this); @override - Account get account => (origin as MailboxTreeProvider).account; + String toString() => r'sourceProvider'; } -String _$findMailboxHash() => r'fb113e28a8bb6904dbdd07a73898bc198afb2dda'; - -//// Loads the mailbox tree for the given account -/// -/// Copied from [findMailbox]. -@ProviderFor(findMailbox) -const findMailboxProvider = FindMailboxFamily(); +/// Provides the message source for the given account -//// Loads the mailbox tree for the given account -/// -/// Copied from [findMailbox]. -class FindMailboxFamily extends Family> { - //// Loads the mailbox tree for the given account - /// - /// Copied from [findMailbox]. - const FindMailboxFamily(); +abstract class _$Source extends $AsyncNotifier { + late final _$args = ref.$arg as ({ + Account account, + Mailbox? mailbox, + }); + Account get account => _$args.account; + Mailbox? get mailbox => _$args.mailbox; - //// Loads the mailbox tree for the given account - /// - /// Copied from [findMailbox]. - FindMailboxProvider call({ + FutureOr build({ required Account account, - required String encodedMailboxPath, - }) { - return FindMailboxProvider( - account: account, - encodedMailboxPath: encodedMailboxPath, - ); - } - + Mailbox? mailbox, + }); + @$mustCallSuper @override - FindMailboxProvider getProviderOverride( - covariant FindMailboxProvider provider, - ) { - return call( - account: provider.account, - encodedMailboxPath: provider.encodedMailboxPath, + void runBuild() { + final created = build( + account: _$args.account, + mailbox: _$args.mailbox, ); + final ref = this.ref as $Ref, MessageSource>; + final element = ref.element as $ClassProviderElement< + AnyNotifier, MessageSource>, + AsyncValue, + Object?, + Object?>; + element.handleValue(ref, created); } +} - static const Iterable? _dependencies = null; +/// Provides the message source for the given account - @override - Iterable? get dependencies => _dependencies; +@ProviderFor(UnifiedSource) +const unifiedSourceProvider = UnifiedSourceFamily._(); - static const Iterable? _allTransitiveDependencies = null; +/// Provides the message source for the given account +final class UnifiedSourceProvider + extends $AsyncNotifierProvider { + /// Provides the message source for the given account + const UnifiedSourceProvider._( + {required UnifiedSourceFamily super.from, + required ({ + UnifiedAccount account, + Mailbox? mailbox, + }) + super.argument}) + : super( + retry: null, + name: r'unifiedSourceProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); @override - Iterable? get allTransitiveDependencies => - _allTransitiveDependencies; + String debugGetCreateSourceHash() => _$unifiedSourceHash(); @override - String? get name => r'findMailboxProvider'; -} - -//// Loads the mailbox tree for the given account -/// -/// Copied from [findMailbox]. -class FindMailboxProvider extends AutoDisposeFutureProvider { - //// Loads the mailbox tree for the given account - /// - /// Copied from [findMailbox]. - FindMailboxProvider({ - required Account account, - required String encodedMailboxPath, - }) : this._internal( - (ref) => findMailbox( - ref as FindMailboxRef, - account: account, - encodedMailboxPath: encodedMailboxPath, - ), - from: findMailboxProvider, - name: r'findMailboxProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$findMailboxHash, - dependencies: FindMailboxFamily._dependencies, - allTransitiveDependencies: - FindMailboxFamily._allTransitiveDependencies, - account: account, - encodedMailboxPath: encodedMailboxPath, - ); - - FindMailboxProvider._internal( - super._createNotifier, { - required super.name, - required super.dependencies, - required super.allTransitiveDependencies, - required super.debugGetCreateSourceHash, - required super.from, - required this.account, - required this.encodedMailboxPath, - }) : super.internal(); - - final Account account; - final String encodedMailboxPath; - - @override - Override overrideWith( - FutureOr Function(FindMailboxRef provider) create, - ) { - return ProviderOverride( - origin: this, - override: FindMailboxProvider._internal( - (ref) => create(ref as FindMailboxRef), - from: from, - name: null, - dependencies: null, - allTransitiveDependencies: null, - debugGetCreateSourceHash: null, - account: account, - encodedMailboxPath: encodedMailboxPath, - ), - ); + String toString() { + return r'unifiedSourceProvider' + '' + '$argument'; } + @$internal @override - AutoDisposeFutureProviderElement createElement() { - return _FindMailboxProviderElement(this); - } + UnifiedSource create() => UnifiedSource(); @override bool operator ==(Object other) { - return other is FindMailboxProvider && - other.account == account && - other.encodedMailboxPath == encodedMailboxPath; + return other is UnifiedSourceProvider && other.argument == argument; } @override int get hashCode { - var hash = _SystemHash.combine(0, runtimeType.hashCode); - hash = _SystemHash.combine(hash, account.hashCode); - hash = _SystemHash.combine(hash, encodedMailboxPath.hashCode); - - return _SystemHash.finish(hash); + return argument.hashCode; } } -mixin FindMailboxRef on AutoDisposeFutureProviderRef { - /// The parameter `account` of this provider. - Account get account; +String _$unifiedSourceHash() => r'9b128c1a2afaa51fa11e0810a9e6ecddfc6c53fd'; - /// The parameter `encodedMailboxPath` of this provider. - String get encodedMailboxPath; -} +/// Provides the message source for the given account -class _FindMailboxProviderElement - extends AutoDisposeFutureProviderElement with FindMailboxRef { - _FindMailboxProviderElement(super.provider); +final class UnifiedSourceFamily extends $Family + with + $ClassFamilyOverride< + UnifiedSource, + AsyncValue, + MultipleMessageSource, + FutureOr, + ({ + UnifiedAccount account, + Mailbox? mailbox, + })> { + const UnifiedSourceFamily._() + : super( + retry: null, + name: r'unifiedSourceProvider', + dependencies: null, + $allTransitiveDependencies: null, + isAutoDispose: false, + ); - @override - Account get account => (origin as FindMailboxProvider).account; - @override - String get encodedMailboxPath => - (origin as FindMailboxProvider).encodedMailboxPath; -} + /// Provides the message source for the given account -String _$mailSearchHash() => r'12e814bd6c0f53f6209dd0f68edf09a0ec769c8b'; + UnifiedSourceProvider call({ + required UnifiedAccount account, + Mailbox? mailbox, + }) => + UnifiedSourceProvider._(argument: ( + account: account, + mailbox: mailbox, + ), from: this); -/// Carries out a search for mail messages -/// -/// Copied from [mailSearch]. -@ProviderFor(mailSearch) -const mailSearchProvider = MailSearchFamily(); + @override + String toString() => r'unifiedSourceProvider'; +} -/// Carries out a search for mail messages -/// -/// Copied from [mailSearch]. -class MailSearchFamily extends Family> { - /// Carries out a search for mail messages - /// - /// Copied from [mailSearch]. - const MailSearchFamily(); +/// Provides the message source for the given account - /// Carries out a search for mail messages - /// - /// Copied from [mailSearch]. - MailSearchProvider call({ - required AppLocalizations localizations, - required MailSearch search, - }) { - return MailSearchProvider( - localizations: localizations, - search: search, - ); - } +abstract class _$UnifiedSource extends $AsyncNotifier { + late final _$args = ref.$arg as ({ + UnifiedAccount account, + Mailbox? mailbox, + }); + UnifiedAccount get account => _$args.account; + Mailbox? get mailbox => _$args.mailbox; + FutureOr build({ + required UnifiedAccount account, + Mailbox? mailbox, + }); + @$mustCallSuper @override - MailSearchProvider getProviderOverride( - covariant MailSearchProvider provider, - ) { - return call( - localizations: provider.localizations, - search: provider.search, + void runBuild() { + final created = build( + account: _$args.account, + mailbox: _$args.mailbox, ); + final ref = this.ref + as $Ref, MultipleMessageSource>; + final element = ref.element as $ClassProviderElement< + AnyNotifier, MultipleMessageSource>, + AsyncValue, + Object?, + Object?>; + element.handleValue(ref, created); } +} - static const Iterable? _dependencies = null; +/// Provides the message source for the given account - @override - Iterable? get dependencies => _dependencies; +@ProviderFor(RealSource) +const realSourceProvider = RealSourceFamily._(); - static const Iterable? _allTransitiveDependencies = null; +/// Provides the message source for the given account +final class RealSourceProvider + extends $AsyncNotifierProvider { + /// Provides the message source for the given account + const RealSourceProvider._( + {required RealSourceFamily super.from, + required ({ + RealAccount account, + Mailbox? mailbox, + }) + super.argument}) + : super( + retry: null, + name: r'realSourceProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); @override - Iterable? get allTransitiveDependencies => - _allTransitiveDependencies; + String debugGetCreateSourceHash() => _$realSourceHash(); @override - String? get name => r'mailSearchProvider'; -} - -/// Carries out a search for mail messages -/// -/// Copied from [mailSearch]. -class MailSearchProvider extends AutoDisposeFutureProvider { - /// Carries out a search for mail messages - /// - /// Copied from [mailSearch]. - MailSearchProvider({ - required AppLocalizations localizations, - required MailSearch search, - }) : this._internal( - (ref) => mailSearch( - ref as MailSearchRef, - localizations: localizations, - search: search, - ), - from: mailSearchProvider, - name: r'mailSearchProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$mailSearchHash, - dependencies: MailSearchFamily._dependencies, - allTransitiveDependencies: - MailSearchFamily._allTransitiveDependencies, - localizations: localizations, - search: search, - ); - - MailSearchProvider._internal( - super._createNotifier, { - required super.name, - required super.dependencies, - required super.allTransitiveDependencies, - required super.debugGetCreateSourceHash, - required super.from, - required this.localizations, - required this.search, - }) : super.internal(); - - final AppLocalizations localizations; - final MailSearch search; - - @override - Override overrideWith( - FutureOr Function(MailSearchRef provider) create, - ) { - return ProviderOverride( - origin: this, - override: MailSearchProvider._internal( - (ref) => create(ref as MailSearchRef), - from: from, - name: null, - dependencies: null, - allTransitiveDependencies: null, - debugGetCreateSourceHash: null, - localizations: localizations, - search: search, - ), - ); + String toString() { + return r'realSourceProvider' + '' + '$argument'; } + @$internal @override - AutoDisposeFutureProviderElement createElement() { - return _MailSearchProviderElement(this); - } + RealSource create() => RealSource(); @override bool operator ==(Object other) { - return other is MailSearchProvider && - other.localizations == localizations && - other.search == search; + return other is RealSourceProvider && other.argument == argument; } @override int get hashCode { - var hash = _SystemHash.combine(0, runtimeType.hashCode); - hash = _SystemHash.combine(hash, localizations.hashCode); - hash = _SystemHash.combine(hash, search.hashCode); - - return _SystemHash.finish(hash); + return argument.hashCode; } } -mixin MailSearchRef on AutoDisposeFutureProviderRef { - /// The parameter `localizations` of this provider. - AppLocalizations get localizations; - - /// The parameter `search` of this provider. - MailSearch get search; -} - -class _MailSearchProviderElement - extends AutoDisposeFutureProviderElement with MailSearchRef { - _MailSearchProviderElement(super.provider); - - @override - AppLocalizations get localizations => - (origin as MailSearchProvider).localizations; - @override - MailSearch get search => (origin as MailSearchProvider).search; -} - -String _$singleMessageLoaderHash() => - r'ec18c48ee5c6ad77cb303cfea02e959979b4c9ce'; - -/// Loads the message source for the given payload -/// -/// Copied from [singleMessageLoader]. -@ProviderFor(singleMessageLoader) -const singleMessageLoaderProvider = SingleMessageLoaderFamily(); - -/// Loads the message source for the given payload -/// -/// Copied from [singleMessageLoader]. -class SingleMessageLoaderFamily extends Family> { - /// Loads the message source for the given payload - /// - /// Copied from [singleMessageLoader]. - const SingleMessageLoaderFamily(); - - /// Loads the message source for the given payload - /// - /// Copied from [singleMessageLoader]. - SingleMessageLoaderProvider call({ - required MailNotificationPayload payload, - }) { - return SingleMessageLoaderProvider( - payload: payload, - ); - } - - @override - SingleMessageLoaderProvider getProviderOverride( - covariant SingleMessageLoaderProvider provider, - ) { - return call( - payload: provider.payload, - ); - } +String _$realSourceHash() => r'b47b7d957d62f73be40a5e8666d7f5c76209e502'; - static const Iterable? _dependencies = null; +/// Provides the message source for the given account - @override - Iterable? get dependencies => _dependencies; +final class RealSourceFamily extends $Family + with + $ClassFamilyOverride< + RealSource, + AsyncValue, + MailboxMessageSource, + FutureOr, + ({ + RealAccount account, + Mailbox? mailbox, + })> { + const RealSourceFamily._() + : super( + retry: null, + name: r'realSourceProvider', + dependencies: null, + $allTransitiveDependencies: null, + isAutoDispose: false, + ); - static const Iterable? _allTransitiveDependencies = null; + /// Provides the message source for the given account - @override - Iterable? get allTransitiveDependencies => - _allTransitiveDependencies; + RealSourceProvider call({ + required RealAccount account, + Mailbox? mailbox, + }) => + RealSourceProvider._(argument: ( + account: account, + mailbox: mailbox, + ), from: this); @override - String? get name => r'singleMessageLoaderProvider'; + String toString() => r'realSourceProvider'; } -/// Loads the message source for the given payload -/// -/// Copied from [singleMessageLoader]. -class SingleMessageLoaderProvider extends AutoDisposeFutureProvider { - /// Loads the message source for the given payload - /// - /// Copied from [singleMessageLoader]. - SingleMessageLoaderProvider({ - required MailNotificationPayload payload, - }) : this._internal( - (ref) => singleMessageLoader( - ref as SingleMessageLoaderRef, - payload: payload, - ), - from: singleMessageLoaderProvider, - name: r'singleMessageLoaderProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$singleMessageLoaderHash, - dependencies: SingleMessageLoaderFamily._dependencies, - allTransitiveDependencies: - SingleMessageLoaderFamily._allTransitiveDependencies, - payload: payload, - ); - - SingleMessageLoaderProvider._internal( - super._createNotifier, { - required super.name, - required super.dependencies, - required super.allTransitiveDependencies, - required super.debugGetCreateSourceHash, - required super.from, - required this.payload, - }) : super.internal(); +/// Provides the message source for the given account - final MailNotificationPayload payload; +abstract class _$RealSource extends $AsyncNotifier { + late final _$args = ref.$arg as ({ + RealAccount account, + Mailbox? mailbox, + }); + RealAccount get account => _$args.account; + Mailbox? get mailbox => _$args.mailbox; + FutureOr build({ + required RealAccount account, + Mailbox? mailbox, + }); + @$mustCallSuper @override - Override overrideWith( - FutureOr Function(SingleMessageLoaderRef provider) create, - ) { - return ProviderOverride( - origin: this, - override: SingleMessageLoaderProvider._internal( - (ref) => create(ref as SingleMessageLoaderRef), - from: from, - name: null, - dependencies: null, - allTransitiveDependencies: null, - debugGetCreateSourceHash: null, - payload: payload, - ), + void runBuild() { + final created = build( + account: _$args.account, + mailbox: _$args.mailbox, ); + final ref = this.ref + as $Ref, MailboxMessageSource>; + final element = ref.element as $ClassProviderElement< + AnyNotifier, MailboxMessageSource>, + AsyncValue, + Object?, + Object?>; + element.handleValue(ref, created); } - - @override - AutoDisposeFutureProviderElement createElement() { - return _SingleMessageLoaderProviderElement(this); - } - - @override - bool operator ==(Object other) { - return other is SingleMessageLoaderProvider && other.payload == payload; - } - - @override - int get hashCode { - var hash = _SystemHash.combine(0, runtimeType.hashCode); - hash = _SystemHash.combine(hash, payload.hashCode); - - return _SystemHash.finish(hash); - } -} - -mixin SingleMessageLoaderRef on AutoDisposeFutureProviderRef { - /// The parameter `payload` of this provider. - MailNotificationPayload get payload; -} - -class _SingleMessageLoaderProviderElement - extends AutoDisposeFutureProviderElement - with SingleMessageLoaderRef { - _SingleMessageLoaderProviderElement(super.provider); - - @override - MailNotificationPayload get payload => - (origin as SingleMessageLoaderProvider).payload; } -String _$firstTimeMailClientSourceHash() => - r'ae11f3a5ed5cb6329488bd3f9ac3569ac8ad1f36'; +//// Loads the mailbox tree for the given account -/// Provides mail clients -/// -/// Copied from [firstTimeMailClientSource]. -@ProviderFor(firstTimeMailClientSource) -const firstTimeMailClientSourceProvider = FirstTimeMailClientSourceFamily(); +@ProviderFor(mailboxTree) +const mailboxTreeProvider = MailboxTreeFamily._(); -/// Provides mail clients -/// -/// Copied from [firstTimeMailClientSource]. -class FirstTimeMailClientSourceFamily - extends Family> { - /// Provides mail clients - /// - /// Copied from [firstTimeMailClientSource]. - const FirstTimeMailClientSourceFamily(); +//// Loads the mailbox tree for the given account - /// Provides mail clients - /// - /// Copied from [firstTimeMailClientSource]. - FirstTimeMailClientSourceProvider call({ - required RealAccount account, - Mailbox? mailbox, - }) { - return FirstTimeMailClientSourceProvider( - account: account, - mailbox: mailbox, - ); - } +final class MailboxTreeProvider extends $FunctionalProvider< + AsyncValue>, Tree, FutureOr>> + with $FutureModifier>, $FutureProvider> { + //// Loads the mailbox tree for the given account + const MailboxTreeProvider._( + {required MailboxTreeFamily super.from, required Account super.argument}) + : super( + retry: null, + name: r'mailboxTreeProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); @override - FirstTimeMailClientSourceProvider getProviderOverride( - covariant FirstTimeMailClientSourceProvider provider, - ) { - return call( - account: provider.account, - mailbox: provider.mailbox, - ); - } - - static const Iterable? _dependencies = null; + String debugGetCreateSourceHash() => _$mailboxTreeHash(); @override - Iterable? get dependencies => _dependencies; - - static const Iterable? _allTransitiveDependencies = null; + String toString() { + return r'mailboxTreeProvider' + '' + '($argument)'; + } + @$internal @override - Iterable? get allTransitiveDependencies => - _allTransitiveDependencies; + $FutureProviderElement> $createElement( + $ProviderPointer pointer) => + $FutureProviderElement(pointer); @override - String? get name => r'firstTimeMailClientSourceProvider'; -} - -/// Provides mail clients -/// -/// Copied from [firstTimeMailClientSource]. -class FirstTimeMailClientSourceProvider - extends AutoDisposeFutureProvider { - /// Provides mail clients - /// - /// Copied from [firstTimeMailClientSource]. - FirstTimeMailClientSourceProvider({ - required RealAccount account, - Mailbox? mailbox, - }) : this._internal( - (ref) => firstTimeMailClientSource( - ref as FirstTimeMailClientSourceRef, - account: account, - mailbox: mailbox, - ), - from: firstTimeMailClientSourceProvider, - name: r'firstTimeMailClientSourceProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$firstTimeMailClientSourceHash, - dependencies: FirstTimeMailClientSourceFamily._dependencies, - allTransitiveDependencies: - FirstTimeMailClientSourceFamily._allTransitiveDependencies, - account: account, - mailbox: mailbox, - ); - - FirstTimeMailClientSourceProvider._internal( - super._createNotifier, { - required super.name, - required super.dependencies, - required super.allTransitiveDependencies, - required super.debugGetCreateSourceHash, - required super.from, - required this.account, - required this.mailbox, - }) : super.internal(); - - final RealAccount account; - final Mailbox? mailbox; - - @override - Override overrideWith( - FutureOr Function(FirstTimeMailClientSourceRef provider) - create, - ) { - return ProviderOverride( - origin: this, - override: FirstTimeMailClientSourceProvider._internal( - (ref) => create(ref as FirstTimeMailClientSourceRef), - from: from, - name: null, - dependencies: null, - allTransitiveDependencies: null, - debugGetCreateSourceHash: null, - account: account, - mailbox: mailbox, - ), + FutureOr> create(Ref ref) { + final argument = this.argument as Account; + return mailboxTree( + ref, + account: argument, ); } - @override - AutoDisposeFutureProviderElement createElement() { - return _FirstTimeMailClientSourceProviderElement(this); - } - @override bool operator ==(Object other) { - return other is FirstTimeMailClientSourceProvider && - other.account == account && - other.mailbox == mailbox; + return other is MailboxTreeProvider && other.argument == argument; } @override int get hashCode { - var hash = _SystemHash.combine(0, runtimeType.hashCode); - hash = _SystemHash.combine(hash, account.hashCode); - hash = _SystemHash.combine(hash, mailbox.hashCode); - - return _SystemHash.finish(hash); + return argument.hashCode; } } -mixin FirstTimeMailClientSourceRef - on AutoDisposeFutureProviderRef { - /// The parameter `account` of this provider. - RealAccount get account; +String _$mailboxTreeHash() => r'72a41a294913925528ee17d233a07f94fbe2ac10'; - /// The parameter `mailbox` of this provider. - Mailbox? get mailbox; -} +//// Loads the mailbox tree for the given account -class _FirstTimeMailClientSourceProviderElement - extends AutoDisposeFutureProviderElement - with FirstTimeMailClientSourceRef { - _FirstTimeMailClientSourceProviderElement(super.provider); +final class MailboxTreeFamily extends $Family + with $FunctionalFamilyOverride>, Account> { + const MailboxTreeFamily._() + : super( + retry: null, + name: r'mailboxTreeProvider', + dependencies: null, + $allTransitiveDependencies: null, + isAutoDispose: false, + ); + + //// Loads the mailbox tree for the given account + + MailboxTreeProvider call({ + required Account account, + }) => + MailboxTreeProvider._(argument: account, from: this); @override - RealAccount get account => - (origin as FirstTimeMailClientSourceProvider).account; - @override - Mailbox? get mailbox => (origin as FirstTimeMailClientSourceProvider).mailbox; + String toString() => r'mailboxTreeProvider'; } +//// Loads the mailbox tree for the given account -String _$mailtoHash() => r'392c1cf4d13bff03113b564193f1f1b21099cdac'; - -/// Creates a new [MessageBuilder] based on the given [mailtoUri] uri -/// -/// Copied from [mailto]. -@ProviderFor(mailto) -const mailtoProvider = MailtoFamily(); +@ProviderFor(findMailbox) +const findMailboxProvider = FindMailboxFamily._(); -/// Creates a new [MessageBuilder] based on the given [mailtoUri] uri -/// -/// Copied from [mailto]. -class MailtoFamily extends Family { - /// Creates a new [MessageBuilder] based on the given [mailtoUri] uri - /// - /// Copied from [mailto]. - const MailtoFamily(); +//// Loads the mailbox tree for the given account - /// Creates a new [MessageBuilder] based on the given [mailtoUri] uri - /// - /// Copied from [mailto]. - MailtoProvider call({ - required Uri mailtoUri, - required MimeMessage originatingMessage, - }) { - return MailtoProvider( - mailtoUri: mailtoUri, - originatingMessage: originatingMessage, - ); - } +final class FindMailboxProvider extends $FunctionalProvider< + AsyncValue, Mailbox?, FutureOr> + with $FutureModifier, $FutureProvider { + //// Loads the mailbox tree for the given account + const FindMailboxProvider._( + {required FindMailboxFamily super.from, + required ({ + Account account, + String encodedMailboxPath, + }) + super.argument}) + : super( + retry: null, + name: r'findMailboxProvider', + isAutoDispose: true, + dependencies: null, + $allTransitiveDependencies: null, + ); @override - MailtoProvider getProviderOverride( - covariant MailtoProvider provider, - ) { - return call( - mailtoUri: provider.mailtoUri, - originatingMessage: provider.originatingMessage, - ); - } - - static const Iterable? _dependencies = null; + String debugGetCreateSourceHash() => _$findMailboxHash(); @override - Iterable? get dependencies => _dependencies; - - static const Iterable? _allTransitiveDependencies = null; + String toString() { + return r'findMailboxProvider' + '' + '$argument'; + } + @$internal @override - Iterable? get allTransitiveDependencies => - _allTransitiveDependencies; + $FutureProviderElement $createElement($ProviderPointer pointer) => + $FutureProviderElement(pointer); @override - String? get name => r'mailtoProvider'; -} - -/// Creates a new [MessageBuilder] based on the given [mailtoUri] uri -/// -/// Copied from [mailto]. -class MailtoProvider extends AutoDisposeProvider { - /// Creates a new [MessageBuilder] based on the given [mailtoUri] uri - /// - /// Copied from [mailto]. - MailtoProvider({ - required Uri mailtoUri, - required MimeMessage originatingMessage, - }) : this._internal( - (ref) => mailto( - ref as MailtoRef, - mailtoUri: mailtoUri, - originatingMessage: originatingMessage, - ), - from: mailtoProvider, - name: r'mailtoProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$mailtoHash, - dependencies: MailtoFamily._dependencies, - allTransitiveDependencies: MailtoFamily._allTransitiveDependencies, - mailtoUri: mailtoUri, - originatingMessage: originatingMessage, - ); - - MailtoProvider._internal( - super._createNotifier, { - required super.name, - required super.dependencies, - required super.allTransitiveDependencies, - required super.debugGetCreateSourceHash, - required super.from, - required this.mailtoUri, - required this.originatingMessage, - }) : super.internal(); - - final Uri mailtoUri; - final MimeMessage originatingMessage; - - @override - Override overrideWith( - MessageBuilder Function(MailtoRef provider) create, - ) { - return ProviderOverride( - origin: this, - override: MailtoProvider._internal( - (ref) => create(ref as MailtoRef), - from: from, - name: null, - dependencies: null, - allTransitiveDependencies: null, - debugGetCreateSourceHash: null, - mailtoUri: mailtoUri, - originatingMessage: originatingMessage, - ), + FutureOr create(Ref ref) { + final argument = this.argument as ({ + Account account, + String encodedMailboxPath, + }); + return findMailbox( + ref, + account: argument.account, + encodedMailboxPath: argument.encodedMailboxPath, ); } - @override - AutoDisposeProviderElement createElement() { - return _MailtoProviderElement(this); - } - @override bool operator ==(Object other) { - return other is MailtoProvider && - other.mailtoUri == mailtoUri && - other.originatingMessage == originatingMessage; + return other is FindMailboxProvider && other.argument == argument; } @override int get hashCode { - var hash = _SystemHash.combine(0, runtimeType.hashCode); - hash = _SystemHash.combine(hash, mailtoUri.hashCode); - hash = _SystemHash.combine(hash, originatingMessage.hashCode); - - return _SystemHash.finish(hash); + return argument.hashCode; } } -mixin MailtoRef on AutoDisposeProviderRef { - /// The parameter `mailtoUri` of this provider. - Uri get mailtoUri; - - /// The parameter `originatingMessage` of this provider. - MimeMessage get originatingMessage; -} - -class _MailtoProviderElement extends AutoDisposeProviderElement - with MailtoRef { - _MailtoProviderElement(super.provider); - - @override - Uri get mailtoUri => (origin as MailtoProvider).mailtoUri; - @override - MimeMessage get originatingMessage => - (origin as MailtoProvider).originatingMessage; -} - -String _$sourceHash() => r'd4e787d804ab333fbd5079af8a66fc5222bdef45'; +String _$findMailboxHash() => r'3c68d43ec6cbf8b057898df55e608b6a4f7f7306'; -abstract class _$Source extends BuildlessAsyncNotifier { - late final Account account; - late final Mailbox? mailbox; - - Future build({ - required Account account, - Mailbox? mailbox, - }); -} +//// Loads the mailbox tree for the given account -/// Provides the message source for the given account -/// -/// Copied from [Source]. -@ProviderFor(Source) -const sourceProvider = SourceFamily(); +final class FindMailboxFamily extends $Family + with + $FunctionalFamilyOverride< + FutureOr, + ({ + Account account, + String encodedMailboxPath, + })> { + const FindMailboxFamily._() + : super( + retry: null, + name: r'findMailboxProvider', + dependencies: null, + $allTransitiveDependencies: null, + isAutoDispose: true, + ); -/// Provides the message source for the given account -/// -/// Copied from [Source]. -class SourceFamily extends Family> { - /// Provides the message source for the given account - /// - /// Copied from [Source]. - const SourceFamily(); + //// Loads the mailbox tree for the given account - /// Provides the message source for the given account - /// - /// Copied from [Source]. - SourceProvider call({ + FindMailboxProvider call({ required Account account, - Mailbox? mailbox, - }) { - return SourceProvider( - account: account, - mailbox: mailbox, - ); - } - - @override - SourceProvider getProviderOverride( - covariant SourceProvider provider, - ) { - return call( - account: provider.account, - mailbox: provider.mailbox, - ); - } - - static const Iterable? _dependencies = null; + required String encodedMailboxPath, + }) => + FindMailboxProvider._(argument: ( + account: account, + encodedMailboxPath: encodedMailboxPath, + ), from: this); @override - Iterable? get dependencies => _dependencies; - - static const Iterable? _allTransitiveDependencies = null; + String toString() => r'findMailboxProvider'; +} - @override - Iterable? get allTransitiveDependencies => - _allTransitiveDependencies; +/// Provides the message source for the given account - @override - String? get name => r'sourceProvider'; -} +@ProviderFor(RealMimeSource) +const realMimeSourceProvider = RealMimeSourceFamily._(); /// Provides the message source for the given account -/// -/// Copied from [Source]. -class SourceProvider extends AsyncNotifierProviderImpl { +final class RealMimeSourceProvider + extends $AsyncNotifierProvider { /// Provides the message source for the given account - /// - /// Copied from [Source]. - SourceProvider({ - required Account account, - Mailbox? mailbox, - }) : this._internal( - () => Source() - ..account = account - ..mailbox = mailbox, - from: sourceProvider, - name: r'sourceProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$sourceHash, - dependencies: SourceFamily._dependencies, - allTransitiveDependencies: SourceFamily._allTransitiveDependencies, - account: account, - mailbox: mailbox, + const RealMimeSourceProvider._( + {required RealMimeSourceFamily super.from, + required ({ + RealAccount account, + Mailbox? mailbox, + }) + super.argument}) + : super( + retry: null, + name: r'realMimeSourceProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, ); - SourceProvider._internal( - super._createNotifier, { - required super.name, - required super.dependencies, - required super.allTransitiveDependencies, - required super.debugGetCreateSourceHash, - required super.from, - required this.account, - required this.mailbox, - }) : super.internal(); - - final Account account; - final Mailbox? mailbox; - - @override - Future runNotifierBuild( - covariant Source notifier, - ) { - return notifier.build( - account: account, - mailbox: mailbox, - ); - } + @override + String debugGetCreateSourceHash() => _$realMimeSourceHash(); @override - Override overrideWith(Source Function() create) { - return ProviderOverride( - origin: this, - override: SourceProvider._internal( - () => create() - ..account = account - ..mailbox = mailbox, - from: from, - name: null, - dependencies: null, - allTransitiveDependencies: null, - debugGetCreateSourceHash: null, - account: account, - mailbox: mailbox, - ), - ); + String toString() { + return r'realMimeSourceProvider' + '' + '$argument'; } + @$internal @override - AsyncNotifierProviderElement createElement() { - return _SourceProviderElement(this); - } + RealMimeSource create() => RealMimeSource(); @override bool operator ==(Object other) { - return other is SourceProvider && - other.account == account && - other.mailbox == mailbox; + return other is RealMimeSourceProvider && other.argument == argument; } @override int get hashCode { - var hash = _SystemHash.combine(0, runtimeType.hashCode); - hash = _SystemHash.combine(hash, account.hashCode); - hash = _SystemHash.combine(hash, mailbox.hashCode); - - return _SystemHash.finish(hash); + return argument.hashCode; } } -mixin SourceRef on AsyncNotifierProviderRef { - /// The parameter `account` of this provider. - Account get account; - - /// The parameter `mailbox` of this provider. - Mailbox? get mailbox; -} - -class _SourceProviderElement - extends AsyncNotifierProviderElement with SourceRef { - _SourceProviderElement(super.provider); +String _$realMimeSourceHash() => r'4c50962bb20d8eacf3a69062ae2a656627393dcb'; - @override - Account get account => (origin as SourceProvider).account; - @override - Mailbox? get mailbox => (origin as SourceProvider).mailbox; -} +/// Provides the message source for the given account -String _$unifiedSourceHash() => r'9b128c1a2afaa51fa11e0810a9e6ecddfc6c53fd'; +final class RealMimeSourceFamily extends $Family + with + $ClassFamilyOverride< + RealMimeSource, + AsyncValue, + AsyncMimeSource, + FutureOr, + ({ + RealAccount account, + Mailbox? mailbox, + })> { + const RealMimeSourceFamily._() + : super( + retry: null, + name: r'realMimeSourceProvider', + dependencies: null, + $allTransitiveDependencies: null, + isAutoDispose: false, + ); -abstract class _$UnifiedSource - extends BuildlessAsyncNotifier { - late final UnifiedAccount account; - late final Mailbox? mailbox; + /// Provides the message source for the given account - Future build({ - required UnifiedAccount account, + RealMimeSourceProvider call({ + required RealAccount account, Mailbox? mailbox, - }); -} + }) => + RealMimeSourceProvider._(argument: ( + account: account, + mailbox: mailbox, + ), from: this); -/// Provides the message source for the given account -/// -/// Copied from [UnifiedSource]. -@ProviderFor(UnifiedSource) -const unifiedSourceProvider = UnifiedSourceFamily(); + @override + String toString() => r'realMimeSourceProvider'; +} /// Provides the message source for the given account -/// -/// Copied from [UnifiedSource]. -class UnifiedSourceFamily extends Family> { - /// Provides the message source for the given account - /// - /// Copied from [UnifiedSource]. - const UnifiedSourceFamily(); - /// Provides the message source for the given account - /// - /// Copied from [UnifiedSource]. - UnifiedSourceProvider call({ - required UnifiedAccount account, +abstract class _$RealMimeSource extends $AsyncNotifier { + late final _$args = ref.$arg as ({ + RealAccount account, Mailbox? mailbox, - }) { - return UnifiedSourceProvider( - account: account, - mailbox: mailbox, - ); - } + }); + RealAccount get account => _$args.account; + Mailbox? get mailbox => _$args.mailbox; + FutureOr build({ + required RealAccount account, + Mailbox? mailbox, + }); + @$mustCallSuper @override - UnifiedSourceProvider getProviderOverride( - covariant UnifiedSourceProvider provider, - ) { - return call( - account: provider.account, - mailbox: provider.mailbox, + void runBuild() { + final created = build( + account: _$args.account, + mailbox: _$args.mailbox, ); + final ref = this.ref as $Ref, AsyncMimeSource>; + final element = ref.element as $ClassProviderElement< + AnyNotifier, AsyncMimeSource>, + AsyncValue, + Object?, + Object?>; + element.handleValue(ref, created); } +} - static const Iterable? _dependencies = null; - - @override - Iterable? get dependencies => _dependencies; - - static const Iterable? _allTransitiveDependencies = null; - - @override - Iterable? get allTransitiveDependencies => - _allTransitiveDependencies; +/// Provides mail clients +/// +/// Expects [Mailbox] to be `null` for the inbox. - @override - String? get name => r'unifiedSourceProvider'; -} +@ProviderFor(MailClientSource) +const mailClientSourceProvider = MailClientSourceFamily._(); -/// Provides the message source for the given account +/// Provides mail clients /// -/// Copied from [UnifiedSource]. -class UnifiedSourceProvider - extends AsyncNotifierProviderImpl { - /// Provides the message source for the given account +/// Expects [Mailbox] to be `null` for the inbox. +final class MailClientSourceProvider + extends $NotifierProvider { + /// Provides mail clients /// - /// Copied from [UnifiedSource]. - UnifiedSourceProvider({ - required UnifiedAccount account, - Mailbox? mailbox, - }) : this._internal( - () => UnifiedSource() - ..account = account - ..mailbox = mailbox, - from: unifiedSourceProvider, - name: r'unifiedSourceProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$unifiedSourceHash, - dependencies: UnifiedSourceFamily._dependencies, - allTransitiveDependencies: - UnifiedSourceFamily._allTransitiveDependencies, - account: account, - mailbox: mailbox, + /// Expects [Mailbox] to be `null` for the inbox. + const MailClientSourceProvider._( + {required MailClientSourceFamily super.from, + required ({ + RealAccount account, + Mailbox? mailbox, + }) + super.argument}) + : super( + retry: null, + name: r'mailClientSourceProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, ); - UnifiedSourceProvider._internal( - super._createNotifier, { - required super.name, - required super.dependencies, - required super.allTransitiveDependencies, - required super.debugGetCreateSourceHash, - required super.from, - required this.account, - required this.mailbox, - }) : super.internal(); - - final UnifiedAccount account; - final Mailbox? mailbox; - - @override - Future runNotifierBuild( - covariant UnifiedSource notifier, - ) { - return notifier.build( - account: account, - mailbox: mailbox, - ); - } + @override + String debugGetCreateSourceHash() => _$mailClientSourceHash(); @override - Override overrideWith(UnifiedSource Function() create) { - return ProviderOverride( - origin: this, - override: UnifiedSourceProvider._internal( - () => create() - ..account = account - ..mailbox = mailbox, - from: from, - name: null, - dependencies: null, - allTransitiveDependencies: null, - debugGetCreateSourceHash: null, - account: account, - mailbox: mailbox, - ), - ); + String toString() { + return r'mailClientSourceProvider' + '' + '$argument'; } + @$internal @override - AsyncNotifierProviderElement - createElement() { - return _UnifiedSourceProviderElement(this); + MailClientSource create() => MailClientSource(); + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(MailClient value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); } @override bool operator ==(Object other) { - return other is UnifiedSourceProvider && - other.account == account && - other.mailbox == mailbox; + return other is MailClientSourceProvider && other.argument == argument; } @override int get hashCode { - var hash = _SystemHash.combine(0, runtimeType.hashCode); - hash = _SystemHash.combine(hash, account.hashCode); - hash = _SystemHash.combine(hash, mailbox.hashCode); - - return _SystemHash.finish(hash); + return argument.hashCode; } } -mixin UnifiedSourceRef on AsyncNotifierProviderRef { - /// The parameter `account` of this provider. - UnifiedAccount get account; - - /// The parameter `mailbox` of this provider. - Mailbox? get mailbox; -} - -class _UnifiedSourceProviderElement - extends AsyncNotifierProviderElement - with UnifiedSourceRef { - _UnifiedSourceProviderElement(super.provider); +String _$mailClientSourceHash() => r'6245fdaddaceb72c43b94b988b7e6dfd5966c8ab'; - @override - UnifiedAccount get account => (origin as UnifiedSourceProvider).account; - @override - Mailbox? get mailbox => (origin as UnifiedSourceProvider).mailbox; -} +/// Provides mail clients +/// +/// Expects [Mailbox] to be `null` for the inbox. -String _$realSourceHash() => r'b47b7d957d62f73be40a5e8666d7f5c76209e502'; +final class MailClientSourceFamily extends $Family + with + $ClassFamilyOverride< + MailClientSource, + MailClient, + MailClient, + MailClient, + ({ + RealAccount account, + Mailbox? mailbox, + })> { + const MailClientSourceFamily._() + : super( + retry: null, + name: r'mailClientSourceProvider', + dependencies: null, + $allTransitiveDependencies: null, + isAutoDispose: false, + ); -abstract class _$RealSource - extends BuildlessAsyncNotifier { - late final RealAccount account; - late final Mailbox? mailbox; + /// Provides mail clients + /// + /// Expects [Mailbox] to be `null` for the inbox. - Future build({ + MailClientSourceProvider call({ required RealAccount account, Mailbox? mailbox, - }); + }) => + MailClientSourceProvider._(argument: ( + account: account, + mailbox: mailbox, + ), from: this); + + @override + String toString() => r'mailClientSourceProvider'; } -/// Provides the message source for the given account +/// Provides mail clients /// -/// Copied from [RealSource]. -@ProviderFor(RealSource) -const realSourceProvider = RealSourceFamily(); +/// Expects [Mailbox] to be `null` for the inbox. -/// Provides the message source for the given account -/// -/// Copied from [RealSource]. -class RealSourceFamily extends Family> { - /// Provides the message source for the given account - /// - /// Copied from [RealSource]. - const RealSourceFamily(); +abstract class _$MailClientSource extends $Notifier { + late final _$args = ref.$arg as ({ + RealAccount account, + Mailbox? mailbox, + }); + RealAccount get account => _$args.account; + Mailbox? get mailbox => _$args.mailbox; - /// Provides the message source for the given account - /// - /// Copied from [RealSource]. - RealSourceProvider call({ + MailClient build({ required RealAccount account, Mailbox? mailbox, - }) { - return RealSourceProvider( - account: account, - mailbox: mailbox, - ); - } - + }); + @$mustCallSuper @override - RealSourceProvider getProviderOverride( - covariant RealSourceProvider provider, - ) { - return call( - account: provider.account, - mailbox: provider.mailbox, + void runBuild() { + final created = build( + account: _$args.account, + mailbox: _$args.mailbox, ); + final ref = this.ref as $Ref; + final element = ref.element as $ClassProviderElement< + AnyNotifier, MailClient, Object?, Object?>; + element.handleValue(ref, created); } +} - static const Iterable? _dependencies = null; +/// Carries out a search for mail messages - @override - Iterable? get dependencies => _dependencies; +@ProviderFor(mailSearch) +const mailSearchProvider = MailSearchFamily._(); - static const Iterable? _allTransitiveDependencies = null; +/// Carries out a search for mail messages - @override - Iterable? get allTransitiveDependencies => - _allTransitiveDependencies; +final class MailSearchProvider extends $FunctionalProvider< + AsyncValue, MessageSource, FutureOr> + with $FutureModifier, $FutureProvider { + /// Carries out a search for mail messages + const MailSearchProvider._( + {required MailSearchFamily super.from, + required ({ + AppLocalizations localizations, + MailSearch search, + }) + super.argument}) + : super( + retry: null, + name: r'mailSearchProvider', + isAutoDispose: true, + dependencies: null, + $allTransitiveDependencies: null, + ); @override - String? get name => r'realSourceProvider'; -} - -/// Provides the message source for the given account -/// -/// Copied from [RealSource]. -class RealSourceProvider - extends AsyncNotifierProviderImpl { - /// Provides the message source for the given account - /// - /// Copied from [RealSource]. - RealSourceProvider({ - required RealAccount account, - Mailbox? mailbox, - }) : this._internal( - () => RealSource() - ..account = account - ..mailbox = mailbox, - from: realSourceProvider, - name: r'realSourceProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$realSourceHash, - dependencies: RealSourceFamily._dependencies, - allTransitiveDependencies: - RealSourceFamily._allTransitiveDependencies, - account: account, - mailbox: mailbox, - ); + String debugGetCreateSourceHash() => _$mailSearchHash(); - RealSourceProvider._internal( - super._createNotifier, { - required super.name, - required super.dependencies, - required super.allTransitiveDependencies, - required super.debugGetCreateSourceHash, - required super.from, - required this.account, - required this.mailbox, - }) : super.internal(); - - final RealAccount account; - final Mailbox? mailbox; - - @override - Future runNotifierBuild( - covariant RealSource notifier, - ) { - return notifier.build( - account: account, - mailbox: mailbox, - ); + @override + String toString() { + return r'mailSearchProvider' + '' + '$argument'; } + @$internal @override - Override overrideWith(RealSource Function() create) { - return ProviderOverride( - origin: this, - override: RealSourceProvider._internal( - () => create() - ..account = account - ..mailbox = mailbox, - from: from, - name: null, - dependencies: null, - allTransitiveDependencies: null, - debugGetCreateSourceHash: null, - account: account, - mailbox: mailbox, - ), - ); - } + $FutureProviderElement $createElement( + $ProviderPointer pointer) => + $FutureProviderElement(pointer); @override - AsyncNotifierProviderElement - createElement() { - return _RealSourceProviderElement(this); + FutureOr create(Ref ref) { + final argument = this.argument as ({ + AppLocalizations localizations, + MailSearch search, + }); + return mailSearch( + ref, + localizations: argument.localizations, + search: argument.search, + ); } @override bool operator ==(Object other) { - return other is RealSourceProvider && - other.account == account && - other.mailbox == mailbox; + return other is MailSearchProvider && other.argument == argument; } @override int get hashCode { - var hash = _SystemHash.combine(0, runtimeType.hashCode); - hash = _SystemHash.combine(hash, account.hashCode); - hash = _SystemHash.combine(hash, mailbox.hashCode); - - return _SystemHash.finish(hash); + return argument.hashCode; } } -mixin RealSourceRef on AsyncNotifierProviderRef { - /// The parameter `account` of this provider. - RealAccount get account; - - /// The parameter `mailbox` of this provider. - Mailbox? get mailbox; -} +String _$mailSearchHash() => r'e59fb426a1d88e9693418cb4860a049d32e26f9a'; -class _RealSourceProviderElement - extends AsyncNotifierProviderElement - with RealSourceRef { - _RealSourceProviderElement(super.provider); +/// Carries out a search for mail messages - @override - RealAccount get account => (origin as RealSourceProvider).account; - @override - Mailbox? get mailbox => (origin as RealSourceProvider).mailbox; -} +final class MailSearchFamily extends $Family + with + $FunctionalFamilyOverride< + FutureOr, + ({ + AppLocalizations localizations, + MailSearch search, + })> { + const MailSearchFamily._() + : super( + retry: null, + name: r'mailSearchProvider', + dependencies: null, + $allTransitiveDependencies: null, + isAutoDispose: true, + ); -String _$realMimeSourceHash() => r'4c50962bb20d8eacf3a69062ae2a656627393dcb'; + /// Carries out a search for mail messages -abstract class _$RealMimeSource - extends BuildlessAsyncNotifier { - late final RealAccount account; - late final Mailbox? mailbox; + MailSearchProvider call({ + required AppLocalizations localizations, + required MailSearch search, + }) => + MailSearchProvider._(argument: ( + localizations: localizations, + search: search, + ), from: this); - Future build({ - required RealAccount account, - Mailbox? mailbox, - }); + @override + String toString() => r'mailSearchProvider'; } -/// Provides the message source for the given account -/// -/// Copied from [RealMimeSource]. -@ProviderFor(RealMimeSource) -const realMimeSourceProvider = RealMimeSourceFamily(); - -/// Provides the message source for the given account -/// -/// Copied from [RealMimeSource]. -class RealMimeSourceFamily extends Family> { - /// Provides the message source for the given account - /// - /// Copied from [RealMimeSource]. - const RealMimeSourceFamily(); - - /// Provides the message source for the given account - /// - /// Copied from [RealMimeSource]. - RealMimeSourceProvider call({ - required RealAccount account, - Mailbox? mailbox, - }) { - return RealMimeSourceProvider( - account: account, - mailbox: mailbox, - ); - } - - @override - RealMimeSourceProvider getProviderOverride( - covariant RealMimeSourceProvider provider, - ) { - return call( - account: provider.account, - mailbox: provider.mailbox, - ); - } +/// Loads the message source for the given payload - static const Iterable? _dependencies = null; +@ProviderFor(singleMessageLoader) +const singleMessageLoaderProvider = SingleMessageLoaderFamily._(); - @override - Iterable? get dependencies => _dependencies; +/// Loads the message source for the given payload - static const Iterable? _allTransitiveDependencies = null; +final class SingleMessageLoaderProvider + extends $FunctionalProvider, Message, FutureOr> + with $FutureModifier, $FutureProvider { + /// Loads the message source for the given payload + const SingleMessageLoaderProvider._( + {required SingleMessageLoaderFamily super.from, + required MailNotificationPayload super.argument}) + : super( + retry: null, + name: r'singleMessageLoaderProvider', + isAutoDispose: true, + dependencies: null, + $allTransitiveDependencies: null, + ); @override - Iterable? get allTransitiveDependencies => - _allTransitiveDependencies; + String debugGetCreateSourceHash() => _$singleMessageLoaderHash(); @override - String? get name => r'realMimeSourceProvider'; -} - -/// Provides the message source for the given account -/// -/// Copied from [RealMimeSource]. -class RealMimeSourceProvider - extends AsyncNotifierProviderImpl { - /// Provides the message source for the given account - /// - /// Copied from [RealMimeSource]. - RealMimeSourceProvider({ - required RealAccount account, - Mailbox? mailbox, - }) : this._internal( - () => RealMimeSource() - ..account = account - ..mailbox = mailbox, - from: realMimeSourceProvider, - name: r'realMimeSourceProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$realMimeSourceHash, - dependencies: RealMimeSourceFamily._dependencies, - allTransitiveDependencies: - RealMimeSourceFamily._allTransitiveDependencies, - account: account, - mailbox: mailbox, - ); - - RealMimeSourceProvider._internal( - super._createNotifier, { - required super.name, - required super.dependencies, - required super.allTransitiveDependencies, - required super.debugGetCreateSourceHash, - required super.from, - required this.account, - required this.mailbox, - }) : super.internal(); - - final RealAccount account; - final Mailbox? mailbox; - - @override - Future runNotifierBuild( - covariant RealMimeSource notifier, - ) { - return notifier.build( - account: account, - mailbox: mailbox, - ); + String toString() { + return r'singleMessageLoaderProvider' + '' + '($argument)'; } + @$internal @override - Override overrideWith(RealMimeSource Function() create) { - return ProviderOverride( - origin: this, - override: RealMimeSourceProvider._internal( - () => create() - ..account = account - ..mailbox = mailbox, - from: from, - name: null, - dependencies: null, - allTransitiveDependencies: null, - debugGetCreateSourceHash: null, - account: account, - mailbox: mailbox, - ), - ); - } + $FutureProviderElement $createElement($ProviderPointer pointer) => + $FutureProviderElement(pointer); @override - AsyncNotifierProviderElement - createElement() { - return _RealMimeSourceProviderElement(this); + FutureOr create(Ref ref) { + final argument = this.argument as MailNotificationPayload; + return singleMessageLoader( + ref, + payload: argument, + ); } @override bool operator ==(Object other) { - return other is RealMimeSourceProvider && - other.account == account && - other.mailbox == mailbox; + return other is SingleMessageLoaderProvider && other.argument == argument; } @override int get hashCode { - var hash = _SystemHash.combine(0, runtimeType.hashCode); - hash = _SystemHash.combine(hash, account.hashCode); - hash = _SystemHash.combine(hash, mailbox.hashCode); - - return _SystemHash.finish(hash); + return argument.hashCode; } } -mixin RealMimeSourceRef on AsyncNotifierProviderRef { - /// The parameter `account` of this provider. - RealAccount get account; - - /// The parameter `mailbox` of this provider. - Mailbox? get mailbox; -} +String _$singleMessageLoaderHash() => + r'79abaabeedf09296099d9b72eaf8d61c4117ab61'; -class _RealMimeSourceProviderElement - extends AsyncNotifierProviderElement - with RealMimeSourceRef { - _RealMimeSourceProviderElement(super.provider); +/// Loads the message source for the given payload - @override - RealAccount get account => (origin as RealMimeSourceProvider).account; - @override - Mailbox? get mailbox => (origin as RealMimeSourceProvider).mailbox; -} +final class SingleMessageLoaderFamily extends $Family + with $FunctionalFamilyOverride, MailNotificationPayload> { + const SingleMessageLoaderFamily._() + : super( + retry: null, + name: r'singleMessageLoaderProvider', + dependencies: null, + $allTransitiveDependencies: null, + isAutoDispose: true, + ); -String _$mailClientSourceHash() => r'6245fdaddaceb72c43b94b988b7e6dfd5966c8ab'; + /// Loads the message source for the given payload -abstract class _$MailClientSource extends BuildlessNotifier { - late final RealAccount account; - late final Mailbox? mailbox; + SingleMessageLoaderProvider call({ + required MailNotificationPayload payload, + }) => + SingleMessageLoaderProvider._(argument: payload, from: this); - MailClient build({ - required RealAccount account, - Mailbox? mailbox, - }); + @override + String toString() => r'singleMessageLoaderProvider'; } /// Provides mail clients -/// -/// Expects [Mailbox] to be `null` for the inbox. -/// -/// Copied from [MailClientSource]. -@ProviderFor(MailClientSource) -const mailClientSourceProvider = MailClientSourceFamily(); + +@ProviderFor(firstTimeMailClientSource) +const firstTimeMailClientSourceProvider = FirstTimeMailClientSourceFamily._(); /// Provides mail clients -/// -/// Expects [Mailbox] to be `null` for the inbox. -/// -/// Copied from [MailClientSource]. -class MailClientSourceFamily extends Family { - /// Provides mail clients - /// - /// Expects [Mailbox] to be `null` for the inbox. - /// - /// Copied from [MailClientSource]. - const MailClientSourceFamily(); +final class FirstTimeMailClientSourceProvider extends $FunctionalProvider< + AsyncValue, + ConnectedAccount?, + FutureOr> + with + $FutureModifier, + $FutureProvider { /// Provides mail clients - /// - /// Expects [Mailbox] to be `null` for the inbox. - /// - /// Copied from [MailClientSource]. - MailClientSourceProvider call({ - required RealAccount account, - Mailbox? mailbox, - }) { - return MailClientSourceProvider( - account: account, - mailbox: mailbox, - ); - } + const FirstTimeMailClientSourceProvider._( + {required FirstTimeMailClientSourceFamily super.from, + required ({ + RealAccount account, + Mailbox? mailbox, + }) + super.argument}) + : super( + retry: null, + name: r'firstTimeMailClientSourceProvider', + isAutoDispose: true, + dependencies: null, + $allTransitiveDependencies: null, + ); @override - MailClientSourceProvider getProviderOverride( - covariant MailClientSourceProvider provider, - ) { - return call( - account: provider.account, - mailbox: provider.mailbox, - ); - } + String debugGetCreateSourceHash() => _$firstTimeMailClientSourceHash(); - static const Iterable? _dependencies = null; + @override + String toString() { + return r'firstTimeMailClientSourceProvider' + '' + '$argument'; + } + @$internal @override - Iterable? get dependencies => _dependencies; + $FutureProviderElement $createElement( + $ProviderPointer pointer) => + $FutureProviderElement(pointer); - static const Iterable? _allTransitiveDependencies = null; + @override + FutureOr create(Ref ref) { + final argument = this.argument as ({ + RealAccount account, + Mailbox? mailbox, + }); + return firstTimeMailClientSource( + ref, + account: argument.account, + mailbox: argument.mailbox, + ); + } @override - Iterable? get allTransitiveDependencies => - _allTransitiveDependencies; + bool operator ==(Object other) { + return other is FirstTimeMailClientSourceProvider && + other.argument == argument; + } @override - String? get name => r'mailClientSourceProvider'; + int get hashCode { + return argument.hashCode; + } } +String _$firstTimeMailClientSourceHash() => + r'f09c3257493bf4d5c7c441b7de5f89e64e259258'; + /// Provides mail clients -/// -/// Expects [Mailbox] to be `null` for the inbox. -/// -/// Copied from [MailClientSource]. -class MailClientSourceProvider - extends NotifierProviderImpl { + +final class FirstTimeMailClientSourceFamily extends $Family + with + $FunctionalFamilyOverride< + FutureOr, + ({ + RealAccount account, + Mailbox? mailbox, + })> { + const FirstTimeMailClientSourceFamily._() + : super( + retry: null, + name: r'firstTimeMailClientSourceProvider', + dependencies: null, + $allTransitiveDependencies: null, + isAutoDispose: true, + ); + /// Provides mail clients - /// - /// Expects [Mailbox] to be `null` for the inbox. - /// - /// Copied from [MailClientSource]. - MailClientSourceProvider({ + + FirstTimeMailClientSourceProvider call({ required RealAccount account, Mailbox? mailbox, - }) : this._internal( - () => MailClientSource() - ..account = account - ..mailbox = mailbox, - from: mailClientSourceProvider, - name: r'mailClientSourceProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$mailClientSourceHash, - dependencies: MailClientSourceFamily._dependencies, - allTransitiveDependencies: - MailClientSourceFamily._allTransitiveDependencies, - account: account, - mailbox: mailbox, + }) => + FirstTimeMailClientSourceProvider._(argument: ( + account: account, + mailbox: mailbox, + ), from: this); + + @override + String toString() => r'firstTimeMailClientSourceProvider'; +} + +/// Creates a new [MessageBuilder] based on the given [mailtoUri] uri + +@ProviderFor(mailto) +const mailtoProvider = MailtoFamily._(); + +/// Creates a new [MessageBuilder] based on the given [mailtoUri] uri + +final class MailtoProvider + extends $FunctionalProvider + with $Provider { + /// Creates a new [MessageBuilder] based on the given [mailtoUri] uri + const MailtoProvider._( + {required MailtoFamily super.from, + required ({ + Uri mailtoUri, + MimeMessage originatingMessage, + }) + super.argument}) + : super( + retry: null, + name: r'mailtoProvider', + isAutoDispose: true, + dependencies: null, + $allTransitiveDependencies: null, ); - MailClientSourceProvider._internal( - super._createNotifier, { - required super.name, - required super.dependencies, - required super.allTransitiveDependencies, - required super.debugGetCreateSourceHash, - required super.from, - required this.account, - required this.mailbox, - }) : super.internal(); - - final RealAccount account; - final Mailbox? mailbox; - - @override - MailClient runNotifierBuild( - covariant MailClientSource notifier, - ) { - return notifier.build( - account: account, - mailbox: mailbox, - ); + @override + String debugGetCreateSourceHash() => _$mailtoHash(); + + @override + String toString() { + return r'mailtoProvider' + '' + '$argument'; } + @$internal @override - Override overrideWith(MailClientSource Function() create) { - return ProviderOverride( - origin: this, - override: MailClientSourceProvider._internal( - () => create() - ..account = account - ..mailbox = mailbox, - from: from, - name: null, - dependencies: null, - allTransitiveDependencies: null, - debugGetCreateSourceHash: null, - account: account, - mailbox: mailbox, - ), + $ProviderElement $createElement($ProviderPointer pointer) => + $ProviderElement(pointer); + + @override + MessageBuilder create(Ref ref) { + final argument = this.argument as ({ + Uri mailtoUri, + MimeMessage originatingMessage, + }); + return mailto( + ref, + mailtoUri: argument.mailtoUri, + originatingMessage: argument.originatingMessage, ); } - @override - NotifierProviderElement createElement() { - return _MailClientSourceProviderElement(this); + /// {@macro riverpod.override_with_value} + Override overrideWithValue(MessageBuilder value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); } @override bool operator ==(Object other) { - return other is MailClientSourceProvider && - other.account == account && - other.mailbox == mailbox; + return other is MailtoProvider && other.argument == argument; } @override int get hashCode { - var hash = _SystemHash.combine(0, runtimeType.hashCode); - hash = _SystemHash.combine(hash, account.hashCode); - hash = _SystemHash.combine(hash, mailbox.hashCode); - - return _SystemHash.finish(hash); + return argument.hashCode; } } -mixin MailClientSourceRef on NotifierProviderRef { - /// The parameter `account` of this provider. - RealAccount get account; +String _$mailtoHash() => r'6b3e700c8a617bf87e3c762891fdf5d18ba28da1'; + +/// Creates a new [MessageBuilder] based on the given [mailtoUri] uri + +final class MailtoFamily extends $Family + with + $FunctionalFamilyOverride< + MessageBuilder, + ({ + Uri mailtoUri, + MimeMessage originatingMessage, + })> { + const MailtoFamily._() + : super( + retry: null, + name: r'mailtoProvider', + dependencies: null, + $allTransitiveDependencies: null, + isAutoDispose: true, + ); + + /// Creates a new [MessageBuilder] based on the given [mailtoUri] uri + + MailtoProvider call({ + required Uri mailtoUri, + required MimeMessage originatingMessage, + }) => + MailtoProvider._(argument: ( + mailtoUri: mailtoUri, + originatingMessage: originatingMessage, + ), from: this); - /// The parameter `mailbox` of this provider. - Mailbox? get mailbox; + @override + String toString() => r'mailtoProvider'; } -class _MailClientSourceProviderElement - extends NotifierProviderElement - with MailClientSourceRef { - _MailClientSourceProviderElement(super.provider); +/// Provides the locally current active mailbox + +@ProviderFor(CurrentMailbox) +const currentMailboxProvider = CurrentMailboxProvider._(); + +/// Provides the locally current active mailbox +final class CurrentMailboxProvider + extends $NotifierProvider { + /// Provides the locally current active mailbox + const CurrentMailboxProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'currentMailboxProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$currentMailboxHash(); + @$internal @override - RealAccount get account => (origin as MailClientSourceProvider).account; + CurrentMailbox create() => CurrentMailbox(); + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(Mailbox? value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); + } +} + +String _$currentMailboxHash() => r'126c6c9f85d750622bebe6b9b24d6277653f0cbc'; + +/// Provides the locally current active mailbox + +abstract class _$CurrentMailbox extends $Notifier { + Mailbox? build(); + @$mustCallSuper @override - Mailbox? get mailbox => (origin as MailClientSourceProvider).mailbox; + void runBuild() { + final created = build(); + final ref = this.ref as $Ref; + final element = ref.element as $ClassProviderElement< + AnyNotifier, Mailbox?, Object?, Object?>; + element.handleValue(ref, created); + } } -// ignore_for_file: type=lint -// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member diff --git a/lib/src/notification/model.g.dart b/lib/src/notification/model.g.dart index 220a617..f21fe76 100644 --- a/lib/src/notification/model.g.dart +++ b/lib/src/notification/model.g.dart @@ -9,12 +9,12 @@ part of 'model.dart'; MailNotificationPayload _$MailNotificationPayloadFromJson( Map json) => MailNotificationPayload( - guid: json['guid'] as int, - uid: json['uid'] as int, - sequenceId: json['id'] as int, + guid: (json['guid'] as num).toInt(), + uid: (json['uid'] as num).toInt(), + sequenceId: (json['id'] as num).toInt(), accountEmail: json['account-email'] as String, subject: json['subject'] as String, - size: json['size'] as int, + size: (json['size'] as num).toInt(), ); Map _$MailNotificationPayloadToJson( diff --git a/lib/src/routes/provider.dart b/lib/src/routes/provider.dart index 661e60c..ee6ae43 100644 --- a/lib/src/routes/provider.dart +++ b/lib/src/routes/provider.dart @@ -20,7 +20,7 @@ part 'provider.g.dart'; /// Provides the [GoRouter] configuration @Riverpod(keepAlive: true) -GoRouter routerConfig(RouterConfigRef ref) => standardRouterConfig; +GoRouter routerConfig(Ref ref) => standardRouterConfig; /// The standard [GoRouter] configuration GoRouter get standardRouterConfig => GoRouter( @@ -87,10 +87,9 @@ GoRoute get _accountAddRoute => GoRoute( builder: (context, state) => const AccountAddScreen(), ); GoRoute get _welcomeRoute => GoRoute( - name: Routes.welcome, - path: Routes.welcome, - builder: (context, state) => const WelcomeScreen(), - ); + name: Routes.welcome, + path: Routes.welcome, + builder: (context, state) => const AppDrawer()); GoRoute get _mailRoute => GoRoute( name: Routes.mail, diff --git a/lib/src/routes/provider.g.dart b/lib/src/routes/provider.g.dart index 4d35d7c..c5987c1 100644 --- a/lib/src/routes/provider.g.dart +++ b/lib/src/routes/provider.g.dart @@ -6,21 +6,50 @@ part of 'provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$routerConfigHash() => r'6f77b87a4a23f8d8541820bbb5111c7189151c66'; - +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, type=warning /// Provides the [GoRouter] configuration -/// -/// Copied from [routerConfig]. + @ProviderFor(routerConfig) -final routerConfigProvider = Provider.internal( - routerConfig, - name: r'routerConfigProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$routerConfigHash, - dependencies: null, - allTransitiveDependencies: null, -); - -typedef RouterConfigRef = ProviderRef; -// ignore_for_file: type=lint -// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member +const routerConfigProvider = RouterConfigProvider._(); + +/// Provides the [GoRouter] configuration + +final class RouterConfigProvider + extends $FunctionalProvider + with $Provider { + /// Provides the [GoRouter] configuration + const RouterConfigProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'routerConfigProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$routerConfigHash(); + + @$internal + @override + $ProviderElement $createElement($ProviderPointer pointer) => + $ProviderElement(pointer); + + @override + GoRouter create(Ref ref) { + return routerConfig(ref); + } + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(GoRouter value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); + } +} + +String _$routerConfigHash() => r'ff847e7b5485889a18a9f16253702284ce01c055'; diff --git a/lib/src/screens/base.dart b/lib/src/screens/base.dart index 2e957ba..7a3b46a 100644 --- a/lib/src/screens/base.dart +++ b/lib/src/screens/base.dart @@ -5,8 +5,7 @@ import 'package:flutter/rendering.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import '../account/provider.dart'; -import '../widgets/app_drawer.dart'; -import '../widgets/menu_with_badge.dart'; +import '../widgets/widgets.dart'; /// Provides a basic page layout with an app bar and a drawer. class BasePage extends ConsumerWidget { @@ -53,18 +52,24 @@ class BasePage extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { + // Use GenericHeader for Material platform, PlatformAppBar for Cupertino + final shouldUseGenericHeader = !PlatformInfo.isCupertino && + (title != null || subtitle != null || appBarActions != null); + PlatformAppBar? buildAppBar() { - final title = this.title; + if (shouldUseGenericHeader) { + // For Material, we'll use Scaffold with GenericHeader + return null; + } + // For Cupertino, use PlatformAppBar + final title = this.title; if (title == null && subtitle == null && appBarActions == null) { return null; } final floatingActionButton = this.floatingActionButton; return PlatformAppBar( - material: (context, platform) => MaterialAppBarData( - elevation: 0, - ), cupertino: (context, platform) => CupertinoNavigationBarData( transitionBetweenRoutes: false, trailing: floatingActionButton == null @@ -88,6 +93,38 @@ class BasePage extends ConsumerWidget { ); } + // Build GenericHeader for Material platform + PreferredSizeWidget? genericHeader; + if (shouldUseGenericHeader) { + final titleText = title ?? ''; + final actions = appBarActions ?? []; + genericHeader = GenericHeader( + title: subtitle != null ? '$titleText\n$subtitle' : titleText, + trailingButton: + actions.isNotEmpty ? actions.last : const SizedBox(width: 48), + secondTrailingButton: actions.length > 1 + ? actions[actions.length - 2] + : const SizedBox(width: 48), + onBackPressed: (includeDrawer && ref.watch(hasAccountWithErrorProvider)) + ? () { + Scaffold.of(context).openDrawer(); + } + : null, + ); + } + + // Use regular Scaffold for Material when using GenericHeader + if (shouldUseGenericHeader) { + return Scaffold( + appBar: genericHeader, + body: content, + drawer: drawer ?? (includeDrawer ? const AppDrawer() : null), + floatingActionButton: floatingActionButton, + bottomNavigationBar: bottom, + ); + } + + // Use PlatformPageScaffold for Cupertino return PlatformPageScaffold( appBar: buildAppBar(), body: content, diff --git a/lib/src/screens/email_screen.dart b/lib/src/screens/email_screen.dart index bf2734e..f605631 100644 --- a/lib/src/screens/email_screen.dart +++ b/lib/src/screens/email_screen.dart @@ -26,10 +26,10 @@ class EMailScreen extends ConsumerWidget { if (account == null) { if (ref.read(realAccountsProvider).isEmpty) { - return const WelcomeScreen(); + throw Exception('No account found for email: $email'); + } else { + return const MailScreenForDefaultAccount(); } - - return const MailScreenForDefaultAccount(); } if (encodedMailboxPath == null) { diff --git a/lib/src/screens/mail_screen.dart b/lib/src/screens/mail_screen.dart index 9695e02..fe70d7e 100644 --- a/lib/src/screens/mail_screen.dart +++ b/lib/src/screens/mail_screen.dart @@ -46,8 +46,8 @@ class MailScreen extends HookConsumerWidget { // set the account and mailbox: useMemoized(() async { await Future.delayed(const Duration(milliseconds: 10)); - ref.read(currentAccountProvider.notifier).state = account; - ref.read(currentMailboxProvider.notifier).state = mailbox; + ref.read(currentAccountProvider.notifier).set(account); + ref.read(currentMailboxProvider.notifier).set(mailbox); }); } @@ -57,8 +57,10 @@ class MailScreen extends HookConsumerWidget { return ProviderScope( overrides: [ - currentMailboxProvider.overrideWith((ref) => mailbox), - currentAccountProvider.overrideWith((ref) => account), + currentMailboxProvider + .overrideWith(() => _CurrentMailboxOverride(mailbox)), + currentAccountProvider + .overrideWith(() => _CurrentAccountOverride(account)), ], child: sourceFuture.when( loading: () => showSplashWhileLoading @@ -79,3 +81,17 @@ class MailScreen extends HookConsumerWidget { ); } } + +class _CurrentMailboxOverride extends CurrentMailbox { + _CurrentMailboxOverride(this._initial); + final Mailbox? _initial; + @override + Mailbox? build() => _initial; +} + +class _CurrentAccountOverride extends CurrentAccount { + _CurrentAccountOverride(this._initial); + final Account? _initial; + @override + Account? build() => _initial; +} diff --git a/lib/src/screens/mail_screen_for_default_account.dart b/lib/src/screens/mail_screen_for_default_account.dart index b146459..ed03a10 100644 --- a/lib/src/screens/mail_screen_for_default_account.dart +++ b/lib/src/screens/mail_screen_for_default_account.dart @@ -11,7 +11,7 @@ class MailScreenForDefaultAccount extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { - final accounts = ref.watch(allAccountsProvider); + final accounts = ref.watch(realAccountsProvider); if (accounts.isEmpty) { return const WelcomeScreen(); } diff --git a/lib/src/screens/message_source_screen.dart b/lib/src/screens/message_source_screen.dart index 5388dbd..c4bef7a 100644 --- a/lib/src/screens/message_source_screen.dart +++ b/lib/src/screens/message_source_screen.dart @@ -6,6 +6,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:hugeicons/hugeicons.dart'; import '../account/provider.dart'; import '../localization/app_localizations.g.dart'; @@ -153,7 +154,7 @@ class _MessageSourceScreenState extends ConsumerState final appBarActions = [ if (_isInSearchMode && _hasSearchInput) IconButton( - icon: Icon(CommonPlatformIcons.clear), + icon: const Icon(HugeIcons.strokeRoundedCancel01), onPressed: () { _searchEditingController.text = ''; setState(() { @@ -164,7 +165,9 @@ class _MessageSourceScreenState extends ConsumerState if (source.supportsSearching && !PlatformInfo.isCupertino) PlatformIconButton( - icon: Icon(_isInSearchMode ? Icons.arrow_back : Icons.search), + icon: Icon(_isInSearchMode + ? HugeIcons.strokeRoundedArrowLeft02 + : HugeIcons.strokeRoundedSearch01), onPressed: () { if (_isInSearchMode) { setState(() { @@ -178,12 +181,11 @@ class _MessageSourceScreenState extends ConsumerState }, ), if (PlatformInfo.isCupertino) - CupertinoButton( - padding: EdgeInsets.zero, - child: Text( + PlatformIconButton( + icon: Icon( _isInSelectionMode - ? localizations.actionCancel - : localizations.actionEdit, + ? HugeIcons.strokeRoundedEditOff + : HugeIcons.strokeRoundedEdit02, ), onPressed: () { setState(() { @@ -351,22 +353,42 @@ class _MessageSourceScreenState extends ConsumerState child: CustomScrollView( physics: const BouncingScrollPhysics(), slivers: [ - EnoughPlatformSliverAppBar( - stretch: true, - title: appBarTitle, - leading: hasAccountWithError - ? MenuWithBadge( - iOSText: - '\u2329 ${localizations.accountsTitle}', - ) - : null, - previousPageTitle: - source.parentName ?? localizations.accountsTitle, - floating: !_isInSearchMode, - pinned: _isInSearchMode, - actions: appBarActions, - cupertinoTransitionBetweenRoutes: true, + // Use GenericHeader for METU app styling + SliverToBoxAdapter( + child: GenericHeader( + title: _isInSearchMode + ? localizations.homeSearchHint + : source.localizedName(localizations, settings), + trailingButton: appBarActions.isNotEmpty + ? appBarActions.last + : const SizedBox(width: 48), + secondTrailingButton: appBarActions.length > 1 + ? appBarActions[appBarActions.length - 2] + : const SizedBox(width: 48), + onBackPressed: hasAccountWithError + ? () { + Scaffold.of(context).openDrawer(); + } + : (_isInSearchMode + ? () { + setState(() { + _isInSearchMode = false; + }); + } + : null), + ), ), + // Show search field below header when in search mode + if (_isInSearchMode && appBarTitle is TextField) + SliverToBoxAdapter( + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 20, + vertical: 8, + ), + child: appBarTitle, + ), + ), if (showSearchTextField) SliverToBoxAdapter( child: Padding( @@ -645,7 +667,7 @@ class _MessageSourceScreenState extends ConsumerState onPressed: () => _handleMultipleChoice(_MultipleChoice.delete), ), PlatformIconButton( - icon: const Icon(Icons.close), + icon: const Icon(HugeIcons.strokeRoundedCancel01), onPressed: leaveSelectionMode, ), PlatformPopupMenuButton<_MultipleChoice>( diff --git a/lib/src/settings/home/provider.g.dart b/lib/src/settings/home/provider.g.dart index aa4464c..4ebdc0c 100644 --- a/lib/src/settings/home/provider.g.dart +++ b/lib/src/settings/home/provider.g.dart @@ -6,22 +6,53 @@ part of 'provider.dart'; // RiverpodGenerator // ************************************************************************** +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, type=warning + +@ProviderFor(SettingsUiElements) +const settingsUiElementsProvider = SettingsUiElementsProvider._(); + +final class SettingsUiElementsProvider + extends $NotifierProvider { + const SettingsUiElementsProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'settingsUiElementsProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$settingsUiElementsHash(); + + @$internal + @override + SettingsUiElements create() => SettingsUiElements(); + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(void value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), + ); + } +} + String _$settingsUiElementsHash() => r'6f166928555e263afd52c81de4234103fe1f6c30'; -/// See also [SettingsUiElements]. -@ProviderFor(SettingsUiElements) -final settingsUiElementsProvider = - NotifierProvider.internal( - SettingsUiElements.new, - name: r'settingsUiElementsProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$settingsUiElementsHash, - dependencies: null, - allTransitiveDependencies: null, -); - -typedef _$SettingsUiElements = Notifier; -// ignore_for_file: type=lint -// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member +abstract class _$SettingsUiElements extends $Notifier { + void build(); + @$mustCallSuper + @override + void runBuild() { + build(); + final ref = this.ref as $Ref; + final element = ref.element as $ClassProviderElement< + AnyNotifier, void, Object?, Object?>; + element.handleValue(ref, null); + } +} diff --git a/lib/src/settings/provider.dart b/lib/src/settings/provider.dart index 1721d7a..c28c37d 100644 --- a/lib/src/settings/provider.dart +++ b/lib/src/settings/provider.dart @@ -1,4 +1,4 @@ -import 'package:riverpod_annotation/riverpod_annotation.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; import '../account/model.dart'; import '../localization/extension.dart'; diff --git a/lib/src/settings/theme/icon_service.dart b/lib/src/settings/theme/icon_service.dart index da19f3c..b9d669b 100644 --- a/lib/src/settings/theme/icon_service.dart +++ b/lib/src/settings/theme/icon_service.dart @@ -3,6 +3,7 @@ import 'package:enough_mail/enough_mail.dart'; import 'package:enough_platform_widgets/enough_platform_widgets.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:hugeicons/hugeicons.dart'; class IconService { IconService._(); @@ -81,13 +82,13 @@ class IconService { IconData get messageActionAddNotification => _isCupertino ? CupertinoIcons.alarm : Icons.notification_add; - IconData get folderGeneric => CommunityMaterialIcons.folder_outline; - IconData get folderInbox => CommunityMaterialIcons.inbox; - IconData get folderDrafts => CommunityMaterialIcons.email_edit_outline; - IconData get folderTrash => CommunityMaterialIcons.trash_can_outline; - IconData get folderSent => CommunityMaterialIcons.inbox_arrow_up; - IconData get folderArchive => CommunityMaterialIcons.archive_outline; - IconData get folderJunk => CommunityMaterialIcons.bug_outline; + IconData get folderGeneric => HugeIcons.strokeRoundedFolder01; + IconData get folderInbox => HugeIcons.strokeRoundedInbox; + IconData get folderDrafts => HugeIcons.strokeRoundedEdit02; + IconData get folderTrash => HugeIcons.strokeRoundedDelete02; + IconData get folderSent => HugeIcons.strokeRoundedMailSend01; + IconData get folderArchive => HugeIcons.strokeRoundedArchive03; + IconData get folderJunk => HugeIcons.strokeRoundedBug01; IconData getForMediaType(MediaType? mediaType) { if (mediaType == null) { diff --git a/lib/src/settings/theme/provider.dart b/lib/src/settings/theme/provider.dart index 20c2129..112942a 100644 --- a/lib/src/settings/theme/provider.dart +++ b/lib/src/settings/theme/provider.dart @@ -1,5 +1,6 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; import '../../app_lifecycle/provider.dart'; @@ -9,8 +10,10 @@ import 'model.dart'; part 'provider.g.dart'; /// The default color provider +/// Using METU primary blue instead of green @Riverpod(keepAlive: true) -Color defaultColorSeed(DefaultColorSeedRef ref) => Colors.green; +Color defaultColorSeed(Ref ref) => + const Color.fromRGBO(67, 89, 120, 1); // METU primaryBlue /// Provides the settings @Riverpod(keepAlive: true) @@ -75,25 +78,87 @@ class ThemeFinder extends _$ThemeFinder { } } - static ThemeData _generateMaterialTheme(Brightness brightness, Color color) => - color is MaterialColor - ? ThemeData( - brightness: brightness, - primarySwatch: color, - useMaterial3: false, - ) - : ThemeData( - brightness: brightness, - colorSchemeSeed: color, - useMaterial3: true, - ); + static ThemeData _generateMaterialTheme(Brightness brightness, Color color) { + // METU primary blue color + const metuPrimaryBlue = Color.fromRGBO(67, 89, 120, 1); + const metuPrimaryRed = Color.fromRGBO(159, 66, 100, 1); + + if (brightness == Brightness.light) { + // Light theme matching METU app + return ThemeData( + brightness: Brightness.light, + scaffoldBackgroundColor: Colors.white, + primaryColor: Colors.white, + colorScheme: const ColorScheme.light( + primary: metuPrimaryBlue, + secondary: metuPrimaryRed, + surface: Colors.white, + onSurface: metuPrimaryBlue, + inverseSurface: Colors.black, + ), + cardColor: Colors.white, + iconTheme: const IconThemeData(color: metuPrimaryBlue), + elevatedButtonTheme: ElevatedButtonThemeData( + style: ElevatedButton.styleFrom( + backgroundColor: metuPrimaryBlue, + foregroundColor: Colors.white, + ), + ), + chipTheme: ChipThemeData( + backgroundColor: Colors.white, + padding: const EdgeInsets.symmetric(horizontal: 4, vertical: 4), + labelPadding: const EdgeInsets.symmetric(horizontal: 4), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(20), + ), + side: BorderSide.none, + ), + useMaterial3: true, + ); + } + // Dark theme matching METU app + return ThemeData( + brightness: Brightness.dark, + scaffoldBackgroundColor: const Color(0xFF202326), + primaryColor: const Color(0xFF121212), + colorScheme: ColorScheme.dark( + primary: Colors.white, + secondary: Colors.deepPurpleAccent, + surface: Colors.grey.shade900, + onSurface: Colors.grey.shade300, + inverseSurface: Colors.white, + ), + cardColor: const Color.fromARGB(255, 26, 26, 26), + iconTheme: IconThemeData(color: Colors.grey.shade300), + elevatedButtonTheme: ElevatedButtonThemeData( + style: ElevatedButton.styleFrom( + backgroundColor: const Color.fromARGB(255, 26, 26, 26), + foregroundColor: Colors.white, + ), + ), + chipTheme: ChipThemeData( + padding: const EdgeInsets.symmetric(horizontal: 4, vertical: 4), + labelPadding: const EdgeInsets.symmetric(horizontal: 4), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(20), + ), + side: BorderSide.none, + ), + useMaterial3: true, + ); + } static CupertinoThemeData _generateCupertinoTheme( Brightness brightness, Color color, - ) => - CupertinoThemeData( - brightness: brightness, - primaryColor: color, - ); + ) { + // METU primary blue color + const metuPrimaryBlue = Color.fromRGBO(67, 89, 120, 1); + + return CupertinoThemeData( + brightness: brightness, + primaryColor: + brightness == Brightness.dark ? Colors.white : metuPrimaryBlue, + ); + } } diff --git a/lib/src/settings/theme/provider.g.dart b/lib/src/settings/theme/provider.g.dart index eb5fa36..796d4a7 100644 --- a/lib/src/settings/theme/provider.g.dart +++ b/lib/src/settings/theme/provider.g.dart @@ -6,196 +6,158 @@ part of 'provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$defaultColorSeedHash() => r'c2bdee6a44fad5bfcada3d31af099906bb24c988'; - +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, type=warning /// The default color provider -/// -/// Copied from [defaultColorSeed]. -@ProviderFor(defaultColorSeed) -final defaultColorSeedProvider = Provider.internal( - defaultColorSeed, - name: r'defaultColorSeedProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$defaultColorSeedHash, - dependencies: null, - allTransitiveDependencies: null, -); - -typedef DefaultColorSeedRef = ProviderRef; -String _$themeFinderHash() => r'484171788a33fa10e91e0f085a1c87cb4a29d8f0'; - -/// Copied from Dart SDK -class _SystemHash { - _SystemHash._(); - - static int combine(int hash, int value) { - // ignore: parameter_assignments - hash = 0x1fffffff & (hash + value); - // ignore: parameter_assignments - hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10)); - return hash ^ (hash >> 6); - } +/// Using METU primary blue instead of green - static int finish(int hash) { - // ignore: parameter_assignments - hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3)); - // ignore: parameter_assignments - hash = hash ^ (hash >> 11); - return 0x1fffffff & (hash + ((0x00003fff & hash) << 15)); - } -} - -abstract class _$ThemeFinder extends BuildlessNotifier { - late final BuildContext context; +@ProviderFor(defaultColorSeed) +const defaultColorSeedProvider = DefaultColorSeedProvider._(); - ThemeSettingsData build({ - required BuildContext context, - }); -} +/// The default color provider +/// Using METU primary blue instead of green + +final class DefaultColorSeedProvider + extends $FunctionalProvider with $Provider { + /// The default color provider + /// Using METU primary blue instead of green + const DefaultColorSeedProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'defaultColorSeedProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); -/// Provides the settings -/// -/// Copied from [ThemeFinder]. -@ProviderFor(ThemeFinder) -const themeFinderProvider = ThemeFinderFamily(); + @override + String debugGetCreateSourceHash() => _$defaultColorSeedHash(); -/// Provides the settings -/// -/// Copied from [ThemeFinder]. -class ThemeFinderFamily extends Family { - /// Provides the settings - /// - /// Copied from [ThemeFinder]. - const ThemeFinderFamily(); + @$internal + @override + $ProviderElement $createElement($ProviderPointer pointer) => + $ProviderElement(pointer); - /// Provides the settings - /// - /// Copied from [ThemeFinder]. - ThemeFinderProvider call({ - required BuildContext context, - }) { - return ThemeFinderProvider( - context: context, - ); + @override + Color create(Ref ref) { + return defaultColorSeed(ref); } - @override - ThemeFinderProvider getProviderOverride( - covariant ThemeFinderProvider provider, - ) { - return call( - context: provider.context, + /// {@macro riverpod.override_with_value} + Override overrideWithValue(Color value) { + return $ProviderOverride( + origin: this, + providerOverride: $SyncValueProvider(value), ); } +} - static const Iterable? _dependencies = null; - - @override - Iterable? get dependencies => _dependencies; - - static const Iterable? _allTransitiveDependencies = null; +String _$defaultColorSeedHash() => r'a0a9a76470a49c5175c78e687ef3ee5b4b3d5746'; - @override - Iterable? get allTransitiveDependencies => - _allTransitiveDependencies; +/// Provides the settings - @override - String? get name => r'themeFinderProvider'; -} +@ProviderFor(ThemeFinder) +const themeFinderProvider = ThemeFinderFamily._(); /// Provides the settings -/// -/// Copied from [ThemeFinder]. -class ThemeFinderProvider - extends NotifierProviderImpl { +final class ThemeFinderProvider + extends $NotifierProvider { /// Provides the settings - /// - /// Copied from [ThemeFinder]. - ThemeFinderProvider({ - required BuildContext context, - }) : this._internal( - () => ThemeFinder()..context = context, - from: themeFinderProvider, + const ThemeFinderProvider._( + {required ThemeFinderFamily super.from, + required BuildContext super.argument}) + : super( + retry: null, name: r'themeFinderProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$themeFinderHash, - dependencies: ThemeFinderFamily._dependencies, - allTransitiveDependencies: - ThemeFinderFamily._allTransitiveDependencies, - context: context, + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, ); - ThemeFinderProvider._internal( - super._createNotifier, { - required super.name, - required super.dependencies, - required super.allTransitiveDependencies, - required super.debugGetCreateSourceHash, - required super.from, - required this.context, - }) : super.internal(); - - final BuildContext context; + @override + String debugGetCreateSourceHash() => _$themeFinderHash(); @override - ThemeSettingsData runNotifierBuild( - covariant ThemeFinder notifier, - ) { - return notifier.build( - context: context, - ); + String toString() { + return r'themeFinderProvider' + '' + '($argument)'; } + @$internal @override - Override overrideWith(ThemeFinder Function() create) { - return ProviderOverride( + ThemeFinder create() => ThemeFinder(); + + /// {@macro riverpod.override_with_value} + Override overrideWithValue(ThemeSettingsData value) { + return $ProviderOverride( origin: this, - override: ThemeFinderProvider._internal( - () => create()..context = context, - from: from, - name: null, - dependencies: null, - allTransitiveDependencies: null, - debugGetCreateSourceHash: null, - context: context, - ), + providerOverride: $SyncValueProvider(value), ); } - @override - NotifierProviderElement createElement() { - return _ThemeFinderProviderElement(this); - } - @override bool operator ==(Object other) { - return other is ThemeFinderProvider && other.context == context; + return other is ThemeFinderProvider && other.argument == argument; } @override int get hashCode { - var hash = _SystemHash.combine(0, runtimeType.hashCode); - hash = _SystemHash.combine(hash, context.hashCode); - - return _SystemHash.finish(hash); + return argument.hashCode; } } -mixin ThemeFinderRef on NotifierProviderRef { - /// The parameter `context` of this provider. - BuildContext get context; +String _$themeFinderHash() => r'c92545bdb8b06520cd5054fbee7a682dc82ea856'; + +/// Provides the settings + +final class ThemeFinderFamily extends $Family + with + $ClassFamilyOverride { + const ThemeFinderFamily._() + : super( + retry: null, + name: r'themeFinderProvider', + dependencies: null, + $allTransitiveDependencies: null, + isAutoDispose: false, + ); + + /// Provides the settings + + ThemeFinderProvider call({ + required BuildContext context, + }) => + ThemeFinderProvider._(argument: context, from: this); + + @override + String toString() => r'themeFinderProvider'; } -class _ThemeFinderProviderElement - extends NotifierProviderElement - with ThemeFinderRef { - _ThemeFinderProviderElement(super.provider); +/// Provides the settings + +abstract class _$ThemeFinder extends $Notifier { + late final _$args = ref.$arg as BuildContext; + BuildContext get context => _$args; + ThemeSettingsData build({ + required BuildContext context, + }); + @$mustCallSuper @override - BuildContext get context => (origin as ThemeFinderProvider).context; + void runBuild() { + final created = build( + context: _$args, + ); + final ref = this.ref as $Ref; + final element = ref.element as $ClassProviderElement< + AnyNotifier, + ThemeSettingsData, + Object?, + Object?>; + element.handleValue(ref, created); + } } -// ignore_for_file: type=lint -// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member diff --git a/lib/src/share/provider.dart b/lib/src/share/provider.dart index 07767ca..42ce7db 100644 --- a/lib/src/share/provider.dart +++ b/lib/src/share/provider.dart @@ -7,6 +7,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:go_router/go_router.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; import '../account/provider.dart'; import '../app_lifecycle/provider.dart'; diff --git a/lib/src/share/provider.g.dart b/lib/src/share/provider.g.dart index 4a61321..3d60610 100644 --- a/lib/src/share/provider.g.dart +++ b/lib/src/share/provider.g.dart @@ -6,23 +6,52 @@ part of 'provider.dart'; // RiverpodGenerator // ************************************************************************** +// GENERATED CODE - DO NOT MODIFY BY HAND +// ignore_for_file: type=lint, type=warning +/// Handles incoming shares + +@ProviderFor(IncomingShare) +const incomingShareProvider = IncomingShareProvider._(); + +/// Handles incoming shares +final class IncomingShareProvider + extends $AsyncNotifierProvider { + /// Handles incoming shares + const IncomingShareProvider._() + : super( + from: null, + argument: null, + retry: null, + name: r'incomingShareProvider', + isAutoDispose: false, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$incomingShareHash(); + + @$internal + @override + IncomingShare create() => IncomingShare(); +} + String _$incomingShareHash() => r'03f2400b8aceda31ac2003e168a460d08499c7be'; /// Handles incoming shares -/// -/// Copied from [IncomingShare]. -@ProviderFor(IncomingShare) -final incomingShareProvider = - AsyncNotifierProvider.internal( - IncomingShare.new, - name: r'incomingShareProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$incomingShareHash, - dependencies: null, - allTransitiveDependencies: null, -); - -typedef _$IncomingShare = AsyncNotifier; -// ignore_for_file: type=lint -// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member + +abstract class _$IncomingShare extends $AsyncNotifier { + FutureOr build(); + @$mustCallSuper + @override + void runBuild() { + build(); + final ref = this.ref as $Ref, void>; + final element = ref.element as $ClassProviderElement< + AnyNotifier, void>, + AsyncValue, + Object?, + Object?>; + element.handleValue(ref, null); + } +} diff --git a/lib/src/widgets/app_drawer.dart b/lib/src/widgets/app_drawer.dart index 3d68288..91b9143 100644 --- a/lib/src/widgets/app_drawer.dart +++ b/lib/src/widgets/app_drawer.dart @@ -5,6 +5,7 @@ import 'package:enough_platform_widgets/enough_platform_widgets.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:hugeicons/hugeicons.dart'; import '../account/model.dart'; import '../account/provider.dart'; @@ -12,8 +13,8 @@ import '../extensions/extension_action_tile.dart'; import '../localization/app_localizations.g.dart'; import '../localization/extension.dart'; import '../routes/routes.dart'; -import '../settings/theme/icon_service.dart'; import '../util/localized_dialog_helper.dart'; +import 'generic_header.dart'; import 'mailbox_tree.dart'; /// Displays the base navigation drawer with all accounts @@ -26,7 +27,6 @@ class AppDrawer extends ConsumerWidget { final accounts = ref.watch(allAccountsProvider); final theme = Theme.of(context); final localizations = ref.text; - final iconService = IconService.instance; final currentAccount = ref.watch(currentAccountProvider); final hasAccountsWithErrors = ref.watch(hasAccountWithErrorProvider); @@ -34,17 +34,23 @@ class AppDrawer extends ConsumerWidget { child: SafeArea( child: Column( children: [ - Material( - elevation: 18, - child: Padding( - padding: const EdgeInsets.all(8), - child: _buildAccountHeader( - context, - currentAccount, - accounts, - theme, - ), + // Use GenericHeader at the top of drawer + GenericHeader( + title: 'METU Mail', + trailingButton: IconButton( + icon: const Icon(HugeIcons.strokeRoundedSettings01), + onPressed: () { + if (!useAppDrawerAsRoot) { + context.pop(); + } + context.pushNamed(Routes.settings); + }, ), + onBackPressed: useAppDrawerAsRoot + ? null + : () { + context.pop(); + }, ), Expanded( child: SingleChildScrollView( @@ -52,6 +58,17 @@ class AppDrawer extends ConsumerWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ + // Show account details below header + if (currentAccount != null) + Padding( + padding: const EdgeInsets.all(16), + child: _buildAccountDetails( + context, + currentAccount, + accounts, + theme, + ), + ), _buildAccountSelection( context, accounts, @@ -67,7 +84,7 @@ class AppDrawer extends ConsumerWidget { ), const Divider(), PlatformListTile( - leading: Icon(iconService.about), + leading: const Icon(HugeIcons.strokeRoundedHelpCircle), title: Text(localizations.drawerEntryAbout), onTap: () { LocalizedDialogHelper.showAbout( @@ -80,31 +97,18 @@ class AppDrawer extends ConsumerWidget { ), ), ), - Material( - elevation: 18, - child: PlatformListTile( - leading: Icon(iconService.settings), - title: Text(localizations.drawerEntrySettings), - onTap: () { - context.pushNamed(Routes.settings); - }, - ), - ), ], ), ), ); } - Widget _buildAccountHeader( + Widget _buildAccountDetails( BuildContext context, - Account? currentAccount, + Account currentAccount, List accounts, ThemeData theme, ) { - if (currentAccount == null) { - return const SizedBox.shrink(); - } final avatarAccount = currentAccount is RealAccount ? currentAccount : (currentAccount is UnifiedAccount @@ -123,7 +127,7 @@ class AppDrawer extends ConsumerWidget { final accountNameWithBadge = hasError ? badges.Badge(child: accountName) : accountName; - return PlatformListTile( + return InkWell( onTap: () { if (currentAccount is UnifiedAccount) { context.pushNamed(Routes.settingsAccounts); @@ -136,7 +140,7 @@ class AppDrawer extends ConsumerWidget { ); } }, - title: avatarAccount == null + child: avatarAccount == null ? const SizedBox.shrink() : Row( children: [ @@ -212,7 +216,7 @@ class AppDrawer extends ConsumerWidget { AppLocalizations localizations, ) => PlatformListTile( - leading: const Icon(Icons.add), + leading: const Icon(HugeIcons.strokeRoundedCalendarAdd01), title: Text(localizations.drawerEntryAddAccount), onTap: () { if (!useAppDrawerAsRoot) { diff --git a/lib/src/widgets/generic_header.dart b/lib/src/widgets/generic_header.dart new file mode 100644 index 0000000..d5c8e04 --- /dev/null +++ b/lib/src/widgets/generic_header.dart @@ -0,0 +1,100 @@ +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:hugeicons/hugeicons.dart'; + +/// Generic header widget matching METU app design +/// +/// Features: +/// - Rounded bottom corners (30px radius) +/// - Red bottom border (4px) +/// - Back button on the left +/// - Title in the center +/// - Optional trailing buttons on the right +class GenericHeader extends StatelessWidget implements PreferredSizeWidget { + /// Creates a new [GenericHeader] + const GenericHeader({ + super.key, + required this.title, + this.trailingButton = const SizedBox(width: 48), + this.secondTrailingButton = const SizedBox(width: 48), + this.onBackPressed, + }); + + /// The title to display in the header + final String title; + + /// The trailing button (rightmost) + final Widget trailingButton; + + /// The second trailing button (second from right) + final Widget secondTrailingButton; + + /// Optional callback for back button press. + /// If null, uses [context.pop()] by default. + final VoidCallback? onBackPressed; + + @override + Widget build(BuildContext context) => Container( + padding: EdgeInsets.only( + left: 20, + right: 20, + top: MediaQuery.of(context).padding.top + 20, + ), + decoration: BoxDecoration( + color: Theme.of(context).primaryColor, + borderRadius: const BorderRadius.only( + bottomLeft: Radius.circular(30), + bottomRight: Radius.circular(30), + ), + border: const Border( + bottom: BorderSide( + color: Color.fromARGB(255, 205, 0, 0), + width: 4, + ), + ), + ), + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + IconButton( + icon: const Icon(HugeIcons.strokeRoundedArrowLeft02), + iconSize: 20, + onPressed: onBackPressed ?? + () { + // Try to pop from current router + if (context.canPop()) { + context.pop(); + } else { + Navigator.of(context, rootNavigator: true).maybePop(); + } + }, + ), + const SizedBox(width: 48), + Expanded( + child: SizedBox( + height: 24, + child: Text( + title, + style: const TextStyle( + fontSize: 15, + fontWeight: FontWeight.w500, + ), + textAlign: TextAlign.center, + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ), + ), + secondTrailingButton, + trailingButton, + ], + ), + ], + ), + ); + + @override + Size get preferredSize => const Size.fromHeight(75); +} diff --git a/lib/src/widgets/message_actions.dart b/lib/src/widgets/message_actions.dart index b4222e0..d94a697 100644 --- a/lib/src/widgets/message_actions.dart +++ b/lib/src/widgets/message_actions.dart @@ -651,7 +651,7 @@ class MessageActions extends HookConsumerWidget { Future? composeFuture, ]) { final formatPreference = ref.read(settingsProvider).replyFormatPreference; - ComposeMode mode; + ComposeMode mode = ComposeMode.html; switch (formatPreference) { case ReplyFormatPreference.alwaysHtml: mode = ComposeMode.html; diff --git a/lib/src/widgets/widgets.dart b/lib/src/widgets/widgets.dart index b526f6a..2f0e9f3 100644 --- a/lib/src/widgets/widgets.dart +++ b/lib/src/widgets/widgets.dart @@ -7,6 +7,7 @@ export 'cupertino_status_bar.dart'; export 'editor_extensions.dart'; export 'empty_message.dart'; export 'expansion_wrap.dart'; +export 'generic_header.dart'; export 'ical_composer.dart'; export 'ical_interactive_media.dart'; export 'icon_text.dart'; diff --git a/pubspec.yaml b/pubspec.yaml index dd26c44..4f1107c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -60,9 +60,10 @@ dependencies: get_it: ^8.2.0 go_router: ^16.2.0 google_fonts: ^6.1.0 + hugeicons: ^0.0.10 hive: ^2.2.3 hive_flutter: ^1.1.0 - hooks_riverpod: ^2.4.4 + hooks_riverpod: ^3.0.0 http: ^1.1.1 intl: any introduction_screen: ^4.0.0 @@ -76,14 +77,14 @@ dependencies: package_info_plus: ^8.3.1 path_provider: ^2.0.8 permission_handler: ^12.0.1 - riverpod_annotation: ^2.1.5 + riverpod_annotation: ^3.0.0 share_plus: ^11.1.0 shared_preferences: ^2.0.11 shimmer_animation: ^2.1.0+1 url_launcher: ^6.0.17 webview_flutter: ^4.0.2 -dependency_overrides: null + # collection: ^1.18.0 # http: ^1.1.1 # for dart_code_metrics # xml: ^6.4.2 @@ -158,16 +159,17 @@ dependency_overrides: null # path: ../enough_platform_widgets dev_dependencies: build_runner: ^2.4.6 - custom_lint: ^0.6.4 + custom_lint: ^0.8.0 flutter_lints: ^6.0.0 flutter_native_splash: ^2.3.2 flutter_test: sdk: flutter - hive_generator: ^2.0.0 json_serializable: ^6.3.1 mocktail: ^1.0.0 - riverpod_generator: ^2.3.2 - riverpod_lint: ^2.1.0 + riverpod_generator: ^3.0.0 + +dependency_overrides: + source_gen: ^3.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec