added support for overriding locales
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
import 'package:flutter/widgets.dart' hide Locale;
|
||||
import 'package:intl/locale.dart' as intl;
|
||||
import 'package:locale_resolver/locale_resolver.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
import 'package:weblibre/extensions/locale.dart';
|
||||
|
||||
part 'locale_resolver.g.dart';
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
class LocaleResolverRepository extends _$LocaleResolverRepository {
|
||||
final _service = LocaleResolver();
|
||||
final _cache = <intl.Locale, LocalizedResult>{};
|
||||
|
||||
Future<LocalizedResult> resolve(intl.Locale locale) async {
|
||||
final cached = _cache[locale];
|
||||
if (cached != null) {
|
||||
return cached;
|
||||
}
|
||||
|
||||
return _cache[locale] = await _service.resolve(
|
||||
locale.toLanguageTag(),
|
||||
targetLocale.toLanguageTag(),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void build(intl.Locale targetLocale) {}
|
||||
}
|
||||
|
||||
@Riverpod()
|
||||
Future<LocalizedResult> resolveLocale(Ref ref, intl.Locale locale) {
|
||||
return ref
|
||||
.read(
|
||||
localeResolverRepositoryProvider(
|
||||
WidgetsBinding.instance.platformDispatcher.locale.toIntlLocale(),
|
||||
).notifier,
|
||||
)
|
||||
.resolve(locale);
|
||||
}
|
||||
@@ -0,0 +1,185 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'locale_resolver.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
// **************************************************************************
|
||||
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
// ignore_for_file: type=lint, type=warning
|
||||
|
||||
@ProviderFor(LocaleResolverRepository)
|
||||
const localeResolverRepositoryProvider = LocaleResolverRepositoryFamily._();
|
||||
|
||||
final class LocaleResolverRepositoryProvider
|
||||
extends $NotifierProvider<LocaleResolverRepository, void> {
|
||||
const LocaleResolverRepositoryProvider._({
|
||||
required LocaleResolverRepositoryFamily super.from,
|
||||
required intl.Locale super.argument,
|
||||
}) : super(
|
||||
retry: null,
|
||||
name: r'localeResolverRepositoryProvider',
|
||||
isAutoDispose: false,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$localeResolverRepositoryHash();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return r'localeResolverRepositoryProvider'
|
||||
''
|
||||
'($argument)';
|
||||
}
|
||||
|
||||
@$internal
|
||||
@override
|
||||
LocaleResolverRepository create() => LocaleResolverRepository();
|
||||
|
||||
/// {@macro riverpod.override_with_value}
|
||||
Override overrideWithValue(void value) {
|
||||
return $ProviderOverride(
|
||||
origin: this,
|
||||
providerOverride: $SyncValueProvider<void>(value),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is LocaleResolverRepositoryProvider &&
|
||||
other.argument == argument;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return argument.hashCode;
|
||||
}
|
||||
}
|
||||
|
||||
String _$localeResolverRepositoryHash() =>
|
||||
r'dc74908d6ac1f5cc851e2a10dcf33b0dc68b5b15';
|
||||
|
||||
final class LocaleResolverRepositoryFamily extends $Family
|
||||
with
|
||||
$ClassFamilyOverride<
|
||||
LocaleResolverRepository,
|
||||
void,
|
||||
void,
|
||||
void,
|
||||
intl.Locale
|
||||
> {
|
||||
const LocaleResolverRepositoryFamily._()
|
||||
: super(
|
||||
retry: null,
|
||||
name: r'localeResolverRepositoryProvider',
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
isAutoDispose: false,
|
||||
);
|
||||
|
||||
LocaleResolverRepositoryProvider call(intl.Locale targetLocale) =>
|
||||
LocaleResolverRepositoryProvider._(argument: targetLocale, from: this);
|
||||
|
||||
@override
|
||||
String toString() => r'localeResolverRepositoryProvider';
|
||||
}
|
||||
|
||||
abstract class _$LocaleResolverRepository extends $Notifier<void> {
|
||||
late final _$args = ref.$arg as intl.Locale;
|
||||
intl.Locale get targetLocale => _$args;
|
||||
|
||||
void build(intl.Locale targetLocale);
|
||||
@$mustCallSuper
|
||||
@override
|
||||
void runBuild() {
|
||||
build(_$args);
|
||||
final ref = this.ref as $Ref<void, void>;
|
||||
final element =
|
||||
ref.element
|
||||
as $ClassProviderElement<
|
||||
AnyNotifier<void, void>,
|
||||
void,
|
||||
Object?,
|
||||
Object?
|
||||
>;
|
||||
element.handleValue(ref, null);
|
||||
}
|
||||
}
|
||||
|
||||
@ProviderFor(resolveLocale)
|
||||
const resolveLocaleProvider = ResolveLocaleFamily._();
|
||||
|
||||
final class ResolveLocaleProvider
|
||||
extends
|
||||
$FunctionalProvider<
|
||||
AsyncValue<LocalizedResult>,
|
||||
LocalizedResult,
|
||||
FutureOr<LocalizedResult>
|
||||
>
|
||||
with $FutureModifier<LocalizedResult>, $FutureProvider<LocalizedResult> {
|
||||
const ResolveLocaleProvider._({
|
||||
required ResolveLocaleFamily super.from,
|
||||
required intl.Locale super.argument,
|
||||
}) : super(
|
||||
retry: null,
|
||||
name: r'resolveLocaleProvider',
|
||||
isAutoDispose: true,
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@override
|
||||
String debugGetCreateSourceHash() => _$resolveLocaleHash();
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return r'resolveLocaleProvider'
|
||||
''
|
||||
'($argument)';
|
||||
}
|
||||
|
||||
@$internal
|
||||
@override
|
||||
$FutureProviderElement<LocalizedResult> $createElement(
|
||||
$ProviderPointer pointer,
|
||||
) => $FutureProviderElement(pointer);
|
||||
|
||||
@override
|
||||
FutureOr<LocalizedResult> create(Ref ref) {
|
||||
final argument = this.argument as intl.Locale;
|
||||
return resolveLocale(ref, argument);
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return other is ResolveLocaleProvider && other.argument == argument;
|
||||
}
|
||||
|
||||
@override
|
||||
int get hashCode {
|
||||
return argument.hashCode;
|
||||
}
|
||||
}
|
||||
|
||||
String _$resolveLocaleHash() => r'94d7a9b307a81de372b8b40b06f046acc76e01c8';
|
||||
|
||||
final class ResolveLocaleFamily extends $Family
|
||||
with $FunctionalFamilyOverride<FutureOr<LocalizedResult>, intl.Locale> {
|
||||
const ResolveLocaleFamily._()
|
||||
: super(
|
||||
retry: null,
|
||||
name: r'resolveLocaleProvider',
|
||||
dependencies: null,
|
||||
$allTransitiveDependencies: null,
|
||||
isAutoDispose: true,
|
||||
);
|
||||
|
||||
ResolveLocaleProvider call(intl.Locale locale) =>
|
||||
ResolveLocaleProvider._(argument: locale, from: this);
|
||||
|
||||
@override
|
||||
String toString() => r'resolveLocaleProvider';
|
||||
}
|
||||
Reference in New Issue
Block a user