remove provider

This commit is contained in:
Fabian Freund
2026-01-19 10:34:13 +01:00
parent 3111de9d44
commit 8d6664c2b1
3 changed files with 35 additions and 117 deletions
@@ -22,7 +22,6 @@ import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:weblibre/features/geckoview/domain/providers/tab_session.dart';
import 'package:weblibre/features/geckoview/features/browser/presentation/widgets/sheets/site_permissions_provider.dart';
import 'package:weblibre/utils/ui_helper.dart';
/// Section widget for clearing site data
@@ -35,7 +34,20 @@ class ClearSiteDataSection extends HookConsumerWidget {
Widget build(BuildContext context, WidgetRef ref) {
final isExpanded = useState(false);
final isClearing = useState(false);
final selectedTypes = ref.watch(selectedClearDataTypesProvider);
final selectedTypes = useState<Set<ClearDataType>>({
ClearDataType.allSiteData,
ClearDataType.authSessions,
});
void toggleType(ClearDataType type) {
final newTypes = Set<ClearDataType>.from(selectedTypes.value);
if (newTypes.contains(type)) {
newTypes.remove(type);
} else {
newTypes.add(type);
}
selectedTypes.value = newTypes;
}
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -59,45 +71,31 @@ class ClearSiteDataSection extends HookConsumerWidget {
label: 'Cookies',
subtitle: 'Login tokens, preferences, tracking data',
type: ClearDataType.cookies,
isSelected: selectedTypes.contains(ClearDataType.cookies),
onChanged: (selected) {
ref
.read(selectedClearDataTypesProvider.notifier)
.toggle(ClearDataType.cookies);
},
isSelected: selectedTypes.value.contains(ClearDataType.cookies),
onChanged: (selected) => toggleType(ClearDataType.cookies),
),
_DataTypeCheckbox(
label: 'Cached Files',
subtitle: 'Images, scripts, stylesheets',
type: ClearDataType.allCaches,
isSelected: selectedTypes.contains(ClearDataType.allCaches),
onChanged: (selected) {
ref
.read(selectedClearDataTypesProvider.notifier)
.toggle(ClearDataType.allCaches);
},
isSelected: selectedTypes.value.contains(ClearDataType.allCaches),
onChanged: (selected) => toggleType(ClearDataType.allCaches),
),
_DataTypeCheckbox(
label: 'Site Data',
subtitle: 'Offline storage, databases, local files',
type: ClearDataType.allSiteData,
isSelected: selectedTypes.contains(ClearDataType.allSiteData),
onChanged: (selected) {
ref
.read(selectedClearDataTypesProvider.notifier)
.toggle(ClearDataType.allSiteData);
},
isSelected: selectedTypes.value.contains(ClearDataType.allSiteData),
onChanged: (selected) => toggleType(ClearDataType.allSiteData),
),
_DataTypeCheckbox(
label: 'Auth Sessions',
subtitle: 'Saved logins, active sessions',
type: ClearDataType.authSessions,
isSelected: selectedTypes.contains(ClearDataType.authSessions),
onChanged: (selected) {
ref
.read(selectedClearDataTypesProvider.notifier)
.toggle(ClearDataType.authSessions);
},
isSelected: selectedTypes.value.contains(
ClearDataType.authSessions,
),
onChanged: (selected) => toggleType(ClearDataType.authSessions),
),
Padding(
padding: const EdgeInsets.symmetric(
@@ -107,9 +105,14 @@ class ClearSiteDataSection extends HookConsumerWidget {
child: SizedBox(
width: double.infinity,
child: FilledButton.icon(
onPressed: isClearing.value || selectedTypes.isEmpty
onPressed: isClearing.value || selectedTypes.value.isEmpty
? null
: () => _showConfirmationAndClear(context, ref, isClearing),
: () => _showConfirmationAndClear(
context,
ref,
isClearing,
selectedTypes,
),
icon: isClearing.value
? const SizedBox(
width: 16,
@@ -130,9 +133,9 @@ class ClearSiteDataSection extends HookConsumerWidget {
BuildContext context,
WidgetRef ref,
ValueNotifier<bool> isClearing,
ValueNotifier<Set<ClearDataType>> selectedTypes,
) async {
final selectedTypes = ref.read(selectedClearDataTypesProvider);
if (selectedTypes.isEmpty) {
if (selectedTypes.value.isEmpty) {
showErrorMessage(context, 'Select at least one data type');
return;
}
@@ -143,7 +146,7 @@ class ClearSiteDataSection extends HookConsumerWidget {
icon: const Icon(Icons.warning),
title: const Text('Clear Site Data'),
content: Text(
'This will clear ${_formatTypes(selectedTypes)} for ${url.host}.\n\n'
'This will clear ${_formatTypes(selectedTypes.value)} for ${url.host}.\n\n'
'You may need to log in again.',
),
actions: [
@@ -162,7 +165,7 @@ class ClearSiteDataSection extends HookConsumerWidget {
if (confirmed == true && context.mounted) {
isClearing.value = true;
try {
await _clearData(ref, selectedTypes);
await _clearData(ref, selectedTypes.value);
if (context.mounted) {
showInfoMessage(context, 'Site data cleared');
}
@@ -28,29 +28,3 @@ Future<String> publicSuffixPlusOne(Ref ref, String host) {
final api = GeckoPublicSuffixListApi();
return api.getPublicSuffixPlusOne(host);
}
/// Notifier for managing selected clear data types
@Riverpod()
class SelectedClearDataTypes extends _$SelectedClearDataTypes {
@override
Set<ClearDataType> build() {
// Default to clearing all site data and auth sessions (most common use case)
return {ClearDataType.allSiteData, ClearDataType.authSessions};
}
void toggle(ClearDataType type) {
if (state.contains(type)) {
state = Set.from(state)..remove(type);
} else {
state = Set.from(state)..add(type);
}
}
void selectAll() {
state = Set.from(ClearDataType.values);
}
void clearAll() {
state = {};
}
}
@@ -86,62 +86,3 @@ final class PublicSuffixPlusOneFamily extends $Family
@override
String toString() => r'publicSuffixPlusOneProvider';
}
/// Notifier for managing selected clear data types
@ProviderFor(SelectedClearDataTypes)
final selectedClearDataTypesProvider = SelectedClearDataTypesProvider._();
/// Notifier for managing selected clear data types
final class SelectedClearDataTypesProvider
extends $NotifierProvider<SelectedClearDataTypes, Set<ClearDataType>> {
/// Notifier for managing selected clear data types
SelectedClearDataTypesProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'selectedClearDataTypesProvider',
isAutoDispose: true,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$selectedClearDataTypesHash();
@$internal
@override
SelectedClearDataTypes create() => SelectedClearDataTypes();
/// {@macro riverpod.override_with_value}
Override overrideWithValue(Set<ClearDataType> value) {
return $ProviderOverride(
origin: this,
providerOverride: $SyncValueProvider<Set<ClearDataType>>(value),
);
}
}
String _$selectedClearDataTypesHash() =>
r'f010b5dc724bd214add09f7f85c56dd615003915';
/// Notifier for managing selected clear data types
abstract class _$SelectedClearDataTypes extends $Notifier<Set<ClearDataType>> {
Set<ClearDataType> build();
@$mustCallSuper
@override
void runBuild() {
final ref = this.ref as $Ref<Set<ClearDataType>, Set<ClearDataType>>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<Set<ClearDataType>, Set<ClearDataType>>,
Set<ClearDataType>,
Object?,
Object?
>;
element.handleCreate(ref, build);
}
}