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:flutter_mozilla_components/flutter_mozilla_components.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:weblibre/features/geckoview/domain/providers/tab_session.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';
|
import 'package:weblibre/utils/ui_helper.dart';
|
||||||
|
|
||||||
/// Section widget for clearing site data
|
/// Section widget for clearing site data
|
||||||
@@ -35,7 +34,20 @@ class ClearSiteDataSection extends HookConsumerWidget {
|
|||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final isExpanded = useState(false);
|
final isExpanded = useState(false);
|
||||||
final isClearing = 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(
|
return Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
@@ -59,45 +71,31 @@ class ClearSiteDataSection extends HookConsumerWidget {
|
|||||||
label: 'Cookies',
|
label: 'Cookies',
|
||||||
subtitle: 'Login tokens, preferences, tracking data',
|
subtitle: 'Login tokens, preferences, tracking data',
|
||||||
type: ClearDataType.cookies,
|
type: ClearDataType.cookies,
|
||||||
isSelected: selectedTypes.contains(ClearDataType.cookies),
|
isSelected: selectedTypes.value.contains(ClearDataType.cookies),
|
||||||
onChanged: (selected) {
|
onChanged: (selected) => toggleType(ClearDataType.cookies),
|
||||||
ref
|
|
||||||
.read(selectedClearDataTypesProvider.notifier)
|
|
||||||
.toggle(ClearDataType.cookies);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
_DataTypeCheckbox(
|
_DataTypeCheckbox(
|
||||||
label: 'Cached Files',
|
label: 'Cached Files',
|
||||||
subtitle: 'Images, scripts, stylesheets',
|
subtitle: 'Images, scripts, stylesheets',
|
||||||
type: ClearDataType.allCaches,
|
type: ClearDataType.allCaches,
|
||||||
isSelected: selectedTypes.contains(ClearDataType.allCaches),
|
isSelected: selectedTypes.value.contains(ClearDataType.allCaches),
|
||||||
onChanged: (selected) {
|
onChanged: (selected) => toggleType(ClearDataType.allCaches),
|
||||||
ref
|
|
||||||
.read(selectedClearDataTypesProvider.notifier)
|
|
||||||
.toggle(ClearDataType.allCaches);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
_DataTypeCheckbox(
|
_DataTypeCheckbox(
|
||||||
label: 'Site Data',
|
label: 'Site Data',
|
||||||
subtitle: 'Offline storage, databases, local files',
|
subtitle: 'Offline storage, databases, local files',
|
||||||
type: ClearDataType.allSiteData,
|
type: ClearDataType.allSiteData,
|
||||||
isSelected: selectedTypes.contains(ClearDataType.allSiteData),
|
isSelected: selectedTypes.value.contains(ClearDataType.allSiteData),
|
||||||
onChanged: (selected) {
|
onChanged: (selected) => toggleType(ClearDataType.allSiteData),
|
||||||
ref
|
|
||||||
.read(selectedClearDataTypesProvider.notifier)
|
|
||||||
.toggle(ClearDataType.allSiteData);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
_DataTypeCheckbox(
|
_DataTypeCheckbox(
|
||||||
label: 'Auth Sessions',
|
label: 'Auth Sessions',
|
||||||
subtitle: 'Saved logins, active sessions',
|
subtitle: 'Saved logins, active sessions',
|
||||||
type: ClearDataType.authSessions,
|
type: ClearDataType.authSessions,
|
||||||
isSelected: selectedTypes.contains(ClearDataType.authSessions),
|
isSelected: selectedTypes.value.contains(
|
||||||
onChanged: (selected) {
|
ClearDataType.authSessions,
|
||||||
ref
|
),
|
||||||
.read(selectedClearDataTypesProvider.notifier)
|
onChanged: (selected) => toggleType(ClearDataType.authSessions),
|
||||||
.toggle(ClearDataType.authSessions);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(
|
padding: const EdgeInsets.symmetric(
|
||||||
@@ -107,9 +105,14 @@ class ClearSiteDataSection extends HookConsumerWidget {
|
|||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
child: FilledButton.icon(
|
child: FilledButton.icon(
|
||||||
onPressed: isClearing.value || selectedTypes.isEmpty
|
onPressed: isClearing.value || selectedTypes.value.isEmpty
|
||||||
? null
|
? null
|
||||||
: () => _showConfirmationAndClear(context, ref, isClearing),
|
: () => _showConfirmationAndClear(
|
||||||
|
context,
|
||||||
|
ref,
|
||||||
|
isClearing,
|
||||||
|
selectedTypes,
|
||||||
|
),
|
||||||
icon: isClearing.value
|
icon: isClearing.value
|
||||||
? const SizedBox(
|
? const SizedBox(
|
||||||
width: 16,
|
width: 16,
|
||||||
@@ -130,9 +133,9 @@ class ClearSiteDataSection extends HookConsumerWidget {
|
|||||||
BuildContext context,
|
BuildContext context,
|
||||||
WidgetRef ref,
|
WidgetRef ref,
|
||||||
ValueNotifier<bool> isClearing,
|
ValueNotifier<bool> isClearing,
|
||||||
|
ValueNotifier<Set<ClearDataType>> selectedTypes,
|
||||||
) async {
|
) async {
|
||||||
final selectedTypes = ref.read(selectedClearDataTypesProvider);
|
if (selectedTypes.value.isEmpty) {
|
||||||
if (selectedTypes.isEmpty) {
|
|
||||||
showErrorMessage(context, 'Select at least one data type');
|
showErrorMessage(context, 'Select at least one data type');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -143,7 +146,7 @@ class ClearSiteDataSection extends HookConsumerWidget {
|
|||||||
icon: const Icon(Icons.warning),
|
icon: const Icon(Icons.warning),
|
||||||
title: const Text('Clear Site Data'),
|
title: const Text('Clear Site Data'),
|
||||||
content: Text(
|
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.',
|
'You may need to log in again.',
|
||||||
),
|
),
|
||||||
actions: [
|
actions: [
|
||||||
@@ -162,7 +165,7 @@ class ClearSiteDataSection extends HookConsumerWidget {
|
|||||||
if (confirmed == true && context.mounted) {
|
if (confirmed == true && context.mounted) {
|
||||||
isClearing.value = true;
|
isClearing.value = true;
|
||||||
try {
|
try {
|
||||||
await _clearData(ref, selectedTypes);
|
await _clearData(ref, selectedTypes.value);
|
||||||
if (context.mounted) {
|
if (context.mounted) {
|
||||||
showInfoMessage(context, 'Site data cleared');
|
showInfoMessage(context, 'Site data cleared');
|
||||||
}
|
}
|
||||||
|
|||||||
-26
@@ -28,29 +28,3 @@ Future<String> publicSuffixPlusOne(Ref ref, String host) {
|
|||||||
final api = GeckoPublicSuffixListApi();
|
final api = GeckoPublicSuffixListApi();
|
||||||
return api.getPublicSuffixPlusOne(host);
|
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
|
@override
|
||||||
String toString() => r'publicSuffixPlusOneProvider';
|
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