intermediate prefs

This commit is contained in:
Fabian Freund
2025-01-30 10:46:38 +01:00
parent 78c17a70c5
commit 36acd46318
51 changed files with 3744 additions and 1719 deletions
@@ -0,0 +1,75 @@
import 'package:copy_with_extension/copy_with_extension.dart';
import 'package:fast_equatable/fast_equatable.dart';
import 'package:json_annotation/json_annotation.dart';
part 'preference_setting.g.dart';
@CopyWith()
class PreferenceSettingGroup with FastEquatable {
final String? description;
final Map<String, PreferenceSetting> settings;
bool get isActive => settings.values
.every((setting) => setting.requireUserOptIn || setting.isActive);
bool get isPartlyActive => settings.values.any((setting) => setting.isActive);
PreferenceSettingGroup({
required this.description,
required this.settings,
});
@override
bool get cacheHash => true;
@override
List<Object?> get hashParameters => [
description,
settings,
];
}
@JsonSerializable()
@CopyWith()
class PreferenceSetting with FastEquatable {
final Object value;
@JsonKey(includeFromJson: false, includeToJson: false)
final Object? actualValue;
bool get isActive => value == actualValue;
final String title;
final String? description;
final bool requireUserOptIn;
final bool shouldBeDefault;
PreferenceSetting({
required this.value,
required this.title,
required this.description,
this.actualValue,
this.requireUserOptIn = false,
this.shouldBeDefault = false,
});
factory PreferenceSetting.fromJson(Map<String, dynamic> json) =>
_$PreferenceSettingFromJson(json);
Map<String, dynamic> toJson() => _$PreferenceSettingToJson(this);
@override
bool get cacheHash => true;
@override
List<Object?> get hashParameters => [
value,
actualValue,
title,
description,
requireUserOptIn,
shouldBeDefault,
];
}
@@ -0,0 +1,202 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'preference_setting.dart';
// **************************************************************************
// CopyWithGenerator
// **************************************************************************
abstract class _$PreferenceSettingGroupCWProxy {
PreferenceSettingGroup description(String? description);
PreferenceSettingGroup settings(Map<String, PreferenceSetting> settings);
/// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `PreferenceSettingGroup(...).copyWith.fieldName(...)` to override fields one at a time with nullification support.
///
/// Usage
/// ```dart
/// PreferenceSettingGroup(...).copyWith(id: 12, name: "My name")
/// ````
PreferenceSettingGroup call({
String? description,
Map<String, PreferenceSetting> settings,
});
}
/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfPreferenceSettingGroup.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfPreferenceSettingGroup.copyWith.fieldName(...)`
class _$PreferenceSettingGroupCWProxyImpl
implements _$PreferenceSettingGroupCWProxy {
const _$PreferenceSettingGroupCWProxyImpl(this._value);
final PreferenceSettingGroup _value;
@override
PreferenceSettingGroup description(String? description) =>
this(description: description);
@override
PreferenceSettingGroup settings(Map<String, PreferenceSetting> settings) =>
this(settings: settings);
@override
/// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `PreferenceSettingGroup(...).copyWith.fieldName(...)` to override fields one at a time with nullification support.
///
/// Usage
/// ```dart
/// PreferenceSettingGroup(...).copyWith(id: 12, name: "My name")
/// ````
PreferenceSettingGroup call({
Object? description = const $CopyWithPlaceholder(),
Object? settings = const $CopyWithPlaceholder(),
}) {
return PreferenceSettingGroup(
description: description == const $CopyWithPlaceholder()
? _value.description
// ignore: cast_nullable_to_non_nullable
: description as String?,
settings: settings == const $CopyWithPlaceholder()
? _value.settings
// ignore: cast_nullable_to_non_nullable
: settings as Map<String, PreferenceSetting>,
);
}
}
extension $PreferenceSettingGroupCopyWith on PreferenceSettingGroup {
/// Returns a callable class that can be used as follows: `instanceOfPreferenceSettingGroup.copyWith(...)` or like so:`instanceOfPreferenceSettingGroup.copyWith.fieldName(...)`.
// ignore: library_private_types_in_public_api
_$PreferenceSettingGroupCWProxy get copyWith =>
_$PreferenceSettingGroupCWProxyImpl(this);
}
abstract class _$PreferenceSettingCWProxy {
PreferenceSetting value(Object value);
PreferenceSetting title(String title);
PreferenceSetting description(String? description);
PreferenceSetting actualValue(Object? actualValue);
PreferenceSetting requireUserOptIn(bool requireUserOptIn);
PreferenceSetting shouldBeDefault(bool shouldBeDefault);
/// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `PreferenceSetting(...).copyWith.fieldName(...)` to override fields one at a time with nullification support.
///
/// Usage
/// ```dart
/// PreferenceSetting(...).copyWith(id: 12, name: "My name")
/// ````
PreferenceSetting call({
Object value,
String title,
String? description,
Object? actualValue,
bool requireUserOptIn,
bool shouldBeDefault,
});
}
/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfPreferenceSetting.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfPreferenceSetting.copyWith.fieldName(...)`
class _$PreferenceSettingCWProxyImpl implements _$PreferenceSettingCWProxy {
const _$PreferenceSettingCWProxyImpl(this._value);
final PreferenceSetting _value;
@override
PreferenceSetting value(Object value) => this(value: value);
@override
PreferenceSetting title(String title) => this(title: title);
@override
PreferenceSetting description(String? description) =>
this(description: description);
@override
PreferenceSetting actualValue(Object? actualValue) =>
this(actualValue: actualValue);
@override
PreferenceSetting requireUserOptIn(bool requireUserOptIn) =>
this(requireUserOptIn: requireUserOptIn);
@override
PreferenceSetting shouldBeDefault(bool shouldBeDefault) =>
this(shouldBeDefault: shouldBeDefault);
@override
/// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `PreferenceSetting(...).copyWith.fieldName(...)` to override fields one at a time with nullification support.
///
/// Usage
/// ```dart
/// PreferenceSetting(...).copyWith(id: 12, name: "My name")
/// ````
PreferenceSetting call({
Object? value = const $CopyWithPlaceholder(),
Object? title = const $CopyWithPlaceholder(),
Object? description = const $CopyWithPlaceholder(),
Object? actualValue = const $CopyWithPlaceholder(),
Object? requireUserOptIn = const $CopyWithPlaceholder(),
Object? shouldBeDefault = const $CopyWithPlaceholder(),
}) {
return PreferenceSetting(
value: value == const $CopyWithPlaceholder()
? _value.value
// ignore: cast_nullable_to_non_nullable
: value as Object,
title: title == const $CopyWithPlaceholder()
? _value.title
// ignore: cast_nullable_to_non_nullable
: title as String,
description: description == const $CopyWithPlaceholder()
? _value.description
// ignore: cast_nullable_to_non_nullable
: description as String?,
actualValue: actualValue == const $CopyWithPlaceholder()
? _value.actualValue
// ignore: cast_nullable_to_non_nullable
: actualValue as Object?,
requireUserOptIn: requireUserOptIn == const $CopyWithPlaceholder()
? _value.requireUserOptIn
// ignore: cast_nullable_to_non_nullable
: requireUserOptIn as bool,
shouldBeDefault: shouldBeDefault == const $CopyWithPlaceholder()
? _value.shouldBeDefault
// ignore: cast_nullable_to_non_nullable
: shouldBeDefault as bool,
);
}
}
extension $PreferenceSettingCopyWith on PreferenceSetting {
/// Returns a callable class that can be used as follows: `instanceOfPreferenceSetting.copyWith(...)` or like so:`instanceOfPreferenceSetting.copyWith.fieldName(...)`.
// ignore: library_private_types_in_public_api
_$PreferenceSettingCWProxy get copyWith =>
_$PreferenceSettingCWProxyImpl(this);
}
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
PreferenceSetting _$PreferenceSettingFromJson(Map<String, dynamic> json) =>
PreferenceSetting(
value: json['value'] as Object,
title: json['title'] as String,
description: json['description'] as String?,
requireUserOptIn: json['requireUserOptIn'] as bool? ?? false,
shouldBeDefault: json['shouldBeDefault'] as bool? ?? false,
);
Map<String, dynamic> _$PreferenceSettingToJson(PreferenceSetting instance) =>
<String, dynamic>{
'value': instance.value,
'title': instance.title,
'description': instance.description,
'requireUserOptIn': instance.requireUserOptIn,
'shouldBeDefault': instance.shouldBeDefault,
};
@@ -0,0 +1,193 @@
import 'dart:async';
import 'dart:convert';
import 'package:collection/collection.dart';
import 'package:flutter/services.dart';
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:lensai/features/geckoview/features/preferences/data/models/preference_setting.dart';
import 'package:riverpod/riverpod.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:rxdart/rxdart.dart';
part 'preference_settings.g.dart';
@Riverpod(keepAlive: true)
Future<Map<String, PreferenceSettingGroup>> _preferenceSettingGroups(
Ref ref,
) async {
final content = await rootBundle
.loadString('assets/preferences/settings.json')
.then(jsonDecode) as Map<String, dynamic>;
final userContent = content['user'] as Map<String, dynamic>;
return userContent.map(
(key, value) => MapEntry(
key,
PreferenceSettingGroup(
// ignore: avoid_dynamic_calls
description: value['description'] as String?,
// ignore: avoid_dynamic_calls
settings: (value['preferences'] as Map<String, dynamic>).map(
(key, value) => MapEntry(
key,
PreferenceSetting.fromJson(value as Map<String, dynamic>),
),
),
),
),
);
}
@Riverpod(keepAlive: true)
Future<PreferenceSettingGroup> _preferenceSettingGroup(
Ref ref,
String groupName,
) {
return ref.watch(
_preferenceSettingGroupsProvider.selectAsync(
(groups) =>
groups[groupName] ?? (throw Exception('Unknown setting group')),
),
);
}
@Riverpod()
class _PreferenceRepository extends _$PreferenceRepository {
final _prefManager = GeckoPrefService();
// Use BehaviorSubject instead of StreamController
late BehaviorSubject<Map<String, Object>> _prefSubject;
Future<void> _updatePrefs() async {
final prefs = await _prefManager.getAllPrefs();
_prefSubject.add(prefs);
}
Future<void> applyPrefs(Map<String, Object> prefs) async {
await _prefManager.applyPrefs(prefs);
await _updatePrefs();
}
Future<void> resetPrefs(List<String> prefNames) async {
await _prefManager.resetPrefs(prefNames);
await _updatePrefs();
}
@override
Raw<Stream<Map<String, Object>>> build() {
_prefSubject = BehaviorSubject<Map<String, Object>>();
ref.onDispose(() {
unawaited(_prefSubject.close());
});
ref.onAddListener(() async {
await _updatePrefs();
});
return _prefSubject.stream;
}
}
@Riverpod()
class PreferenceSettingsGeneralRepository
extends _$PreferenceSettingsGeneralRepository {
late Map<String, PreferenceSettingGroup> _statelessGroups;
Future<void> apply() async {
final prefs = {
for (final group in _statelessGroups.values)
...Map.fromEntries(
group.settings.entries
.where((e) => !e.value.requireUserOptIn)
.map((e) => MapEntry(e.key, e.value.value)),
),
};
await ref.read(_preferenceRepositoryProvider.notifier).applyPrefs(prefs);
}
Future<void> reset() async {
final prefs = _statelessGroups.values
.map((group) => group.settings.keys)
.flattened
.toList();
await ref.read(_preferenceRepositoryProvider.notifier).resetPrefs(prefs);
}
@override
Stream<Map<String, PreferenceSettingGroup>> build() async* {
_statelessGroups = await ref.watch(_preferenceSettingGroupsProvider.future);
final prefStream = ref.watch(_preferenceRepositoryProvider);
yield* prefStream.map(
(prefs) => _statelessGroups.map(
(groupName, group) => MapEntry(
groupName,
group.copyWith.settings(
group.settings.map(
(prefName, setting) => MapEntry(
prefName,
setting.copyWith.actualValue(prefs[prefName]),
),
),
),
),
),
);
}
}
@Riverpod()
class PreferenceSettingsGroupRepository
extends _$PreferenceSettingsGroupRepository {
late PreferenceSettingGroup _statelessSettingGroup;
Future<void> apply({List<String>? filter}) async {
final prefs = Map.fromEntries(
filter?.map(
(e) => MapEntry(
e,
_statelessSettingGroup.settings[e]?.value ??
(throw Exception('Preference not part of group')),
),
) ??
_statelessSettingGroup.settings.entries
.where((e) => !e.value.requireUserOptIn)
.map((e) => MapEntry(e.key, e.value.value)),
);
await ref.read(_preferenceRepositoryProvider.notifier).applyPrefs(prefs);
}
Future<void> reset({List<String>? filter}) async {
if (filter != null &&
filter.any(
(value) => !_statelessSettingGroup.settings.containsKey(value),
)) {
throw Exception('Preference not part of group');
}
await ref
.read(_preferenceRepositoryProvider.notifier)
.resetPrefs(filter ?? _statelessSettingGroup.settings.keys.toList());
}
@override
Stream<PreferenceSettingGroup> build(String groupName) async* {
_statelessSettingGroup =
await ref.watch(_preferenceSettingGroupProvider(groupName).future);
final prefStream = ref.watch(_preferenceRepositoryProvider);
yield* prefStream.map(
(prefs) => _statelessSettingGroup.copyWith.settings(
_statelessSettingGroup.settings.map(
(key, value) => MapEntry(key, value.copyWith.actualValue(prefs[key])),
),
),
);
}
}
@@ -0,0 +1,378 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'preference_settings.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$preferenceSettingGroupsHash() =>
r'fa9286248cc71c88c888a518441721dc99b7e0c2';
/// See also [_preferenceSettingGroups].
@ProviderFor(_preferenceSettingGroups)
final _preferenceSettingGroupsProvider =
FutureProvider<Map<String, PreferenceSettingGroup>>.internal(
_preferenceSettingGroups,
name: r'_preferenceSettingGroupsProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$preferenceSettingGroupsHash,
dependencies: null,
allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef _PreferenceSettingGroupsRef
= FutureProviderRef<Map<String, PreferenceSettingGroup>>;
String _$preferenceSettingGroupHash() =>
r'960169ab9f6985a5b73a63663e671a8eac7cd776';
/// 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));
}
}
/// See also [_preferenceSettingGroup].
@ProviderFor(_preferenceSettingGroup)
const _preferenceSettingGroupProvider = _PreferenceSettingGroupFamily();
/// See also [_preferenceSettingGroup].
class _PreferenceSettingGroupFamily
extends Family<AsyncValue<PreferenceSettingGroup>> {
/// See also [_preferenceSettingGroup].
const _PreferenceSettingGroupFamily();
/// See also [_preferenceSettingGroup].
_PreferenceSettingGroupProvider call(
String groupName,
) {
return _PreferenceSettingGroupProvider(
groupName,
);
}
@override
_PreferenceSettingGroupProvider getProviderOverride(
covariant _PreferenceSettingGroupProvider provider,
) {
return call(
provider.groupName,
);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@override
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'_preferenceSettingGroupProvider';
}
/// See also [_preferenceSettingGroup].
class _PreferenceSettingGroupProvider
extends FutureProvider<PreferenceSettingGroup> {
/// See also [_preferenceSettingGroup].
_PreferenceSettingGroupProvider(
String groupName,
) : this._internal(
(ref) => _preferenceSettingGroup(
ref as _PreferenceSettingGroupRef,
groupName,
),
from: _preferenceSettingGroupProvider,
name: r'_preferenceSettingGroupProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$preferenceSettingGroupHash,
dependencies: _PreferenceSettingGroupFamily._dependencies,
allTransitiveDependencies:
_PreferenceSettingGroupFamily._allTransitiveDependencies,
groupName: groupName,
);
_PreferenceSettingGroupProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.groupName,
}) : super.internal();
final String groupName;
@override
Override overrideWith(
FutureOr<PreferenceSettingGroup> Function(
_PreferenceSettingGroupRef provider)
create,
) {
return ProviderOverride(
origin: this,
override: _PreferenceSettingGroupProvider._internal(
(ref) => create(ref as _PreferenceSettingGroupRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
groupName: groupName,
),
);
}
@override
FutureProviderElement<PreferenceSettingGroup> createElement() {
return _PreferenceSettingGroupProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is _PreferenceSettingGroupProvider &&
other.groupName == groupName;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, groupName.hashCode);
return _SystemHash.finish(hash);
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin _PreferenceSettingGroupRef on FutureProviderRef<PreferenceSettingGroup> {
/// The parameter `groupName` of this provider.
String get groupName;
}
class _PreferenceSettingGroupProviderElement
extends FutureProviderElement<PreferenceSettingGroup>
with _PreferenceSettingGroupRef {
_PreferenceSettingGroupProviderElement(super.provider);
@override
String get groupName => (origin as _PreferenceSettingGroupProvider).groupName;
}
String _$preferenceRepositoryHash() =>
r'53c0cbbf60e44c3834fe3e3255836f7e27f09c7f';
/// See also [_PreferenceRepository].
@ProviderFor(_PreferenceRepository)
final _preferenceRepositoryProvider = AutoDisposeNotifierProvider<
_PreferenceRepository, Raw<Stream<Map<String, Object>>>>.internal(
_PreferenceRepository.new,
name: r'_preferenceRepositoryProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$preferenceRepositoryHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$PreferenceRepository
= AutoDisposeNotifier<Raw<Stream<Map<String, Object>>>>;
String _$preferenceSettingsGeneralRepositoryHash() =>
r'24a70de8284107bb43778e1014abe41bd805987a';
/// See also [PreferenceSettingsGeneralRepository].
@ProviderFor(PreferenceSettingsGeneralRepository)
final preferenceSettingsGeneralRepositoryProvider =
AutoDisposeStreamNotifierProvider<PreferenceSettingsGeneralRepository,
Map<String, PreferenceSettingGroup>>.internal(
PreferenceSettingsGeneralRepository.new,
name: r'preferenceSettingsGeneralRepositoryProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$preferenceSettingsGeneralRepositoryHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$PreferenceSettingsGeneralRepository
= AutoDisposeStreamNotifier<Map<String, PreferenceSettingGroup>>;
String _$preferenceSettingsGroupRepositoryHash() =>
r'023794294c5639ac6c6941f87a4ed91e1551fbc9';
abstract class _$PreferenceSettingsGroupRepository
extends BuildlessAutoDisposeStreamNotifier<PreferenceSettingGroup> {
late final String groupName;
Stream<PreferenceSettingGroup> build(
String groupName,
);
}
/// See also [PreferenceSettingsGroupRepository].
@ProviderFor(PreferenceSettingsGroupRepository)
const preferenceSettingsGroupRepositoryProvider =
PreferenceSettingsGroupRepositoryFamily();
/// See also [PreferenceSettingsGroupRepository].
class PreferenceSettingsGroupRepositoryFamily
extends Family<AsyncValue<PreferenceSettingGroup>> {
/// See also [PreferenceSettingsGroupRepository].
const PreferenceSettingsGroupRepositoryFamily();
/// See also [PreferenceSettingsGroupRepository].
PreferenceSettingsGroupRepositoryProvider call(
String groupName,
) {
return PreferenceSettingsGroupRepositoryProvider(
groupName,
);
}
@override
PreferenceSettingsGroupRepositoryProvider getProviderOverride(
covariant PreferenceSettingsGroupRepositoryProvider provider,
) {
return call(
provider.groupName,
);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@override
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'preferenceSettingsGroupRepositoryProvider';
}
/// See also [PreferenceSettingsGroupRepository].
class PreferenceSettingsGroupRepositoryProvider
extends AutoDisposeStreamNotifierProviderImpl<
PreferenceSettingsGroupRepository, PreferenceSettingGroup> {
/// See also [PreferenceSettingsGroupRepository].
PreferenceSettingsGroupRepositoryProvider(
String groupName,
) : this._internal(
() => PreferenceSettingsGroupRepository()..groupName = groupName,
from: preferenceSettingsGroupRepositoryProvider,
name: r'preferenceSettingsGroupRepositoryProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$preferenceSettingsGroupRepositoryHash,
dependencies: PreferenceSettingsGroupRepositoryFamily._dependencies,
allTransitiveDependencies: PreferenceSettingsGroupRepositoryFamily
._allTransitiveDependencies,
groupName: groupName,
);
PreferenceSettingsGroupRepositoryProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.groupName,
}) : super.internal();
final String groupName;
@override
Stream<PreferenceSettingGroup> runNotifierBuild(
covariant PreferenceSettingsGroupRepository notifier,
) {
return notifier.build(
groupName,
);
}
@override
Override overrideWith(PreferenceSettingsGroupRepository Function() create) {
return ProviderOverride(
origin: this,
override: PreferenceSettingsGroupRepositoryProvider._internal(
() => create()..groupName = groupName,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
groupName: groupName,
),
);
}
@override
AutoDisposeStreamNotifierProviderElement<PreferenceSettingsGroupRepository,
PreferenceSettingGroup> createElement() {
return _PreferenceSettingsGroupRepositoryProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is PreferenceSettingsGroupRepositoryProvider &&
other.groupName == groupName;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, groupName.hashCode);
return _SystemHash.finish(hash);
}
}
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
mixin PreferenceSettingsGroupRepositoryRef
on AutoDisposeStreamNotifierProviderRef<PreferenceSettingGroup> {
/// The parameter `groupName` of this provider.
String get groupName;
}
class _PreferenceSettingsGroupRepositoryProviderElement
extends AutoDisposeStreamNotifierProviderElement<
PreferenceSettingsGroupRepository,
PreferenceSettingGroup> with PreferenceSettingsGroupRepositoryRef {
_PreferenceSettingsGroupRepositoryProviderElement(super.provider);
@override
String get groupName =>
(origin as PreferenceSettingsGroupRepositoryProvider).groupName;
}
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package