remove provider
This commit is contained in:
+35
-32
@@ -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');
|
||||
}
|
||||
|
||||
-26
@@ -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 = {};
|
||||
}
|
||||
}
|
||||
|
||||
-59
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user