From fa6878d2b2942fffce5db10130d0078ad4449ef2 Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Tue, 13 Jan 2026 18:08:23 +0100 Subject: [PATCH] fix formatting --- app/lib/domain/entities/equatable_image.dart | 4 +- app/lib/domain/services/generic_website.dart | 5 +- .../geckoview/domain/repositories/tab.dart | 7 +- .../bookmarks/domain/providers/bookmarks.dart | 26 +++- .../presentation/screens/bookmark_list.dart | 35 +++-- .../browser_modules/bottom_app_bar.dart | 5 +- .../widgets/tab_view/tab_preview.dart | 4 +- .../widgets/tab_view/tab_tree_view.dart | 4 +- .../features/tabs/data/database/daos/tab.dart | 11 +- .../screens/advanced_settings.dart | 26 ++-- .../screens/appearance_display_settings.dart | 57 +++---- .../screens/fingerprinting_settings.dart | 30 ++-- .../screens/privacy_security_settings.dart | 146 ++++++------------ .../screens/search_content_settings.dart | 77 +++++---- .../screens/tabs_behavior_settings.dart | 77 ++++----- .../src/domain/services/gecko_viewport.dart | 26 ++-- .../flutter_tor/example/test/widget_test.dart | 4 +- .../plugin_integration_test.dart | 1 - .../example/lib/main.dart | 6 +- .../example/test/widget_test.dart | 4 +- .../lib/speech_to_text_dialog.dart | 8 +- .../pigeons/speech_to_text.dart | 1 - 22 files changed, 243 insertions(+), 321 deletions(-) diff --git a/app/lib/domain/entities/equatable_image.dart b/app/lib/domain/entities/equatable_image.dart index 1ff8ad38..4b905052 100644 --- a/app/lib/domain/entities/equatable_image.dart +++ b/app/lib/domain/entities/equatable_image.dart @@ -25,8 +25,8 @@ class EquatableImage { bool _isDisposed = false; EquatableImage(Image value, {required int hash}) - : _value = value, - _imageHash = hash; + : _value = value, + _imageHash = hash; /// The underlying ui.Image. Returns null if disposed. Image? get value => _isDisposed ? null : _value; diff --git a/app/lib/domain/services/generic_website.dart b/app/lib/domain/services/generic_website.dart index 9b0fc3fb..a9c33ac6 100644 --- a/app/lib/domain/services/generic_website.dart +++ b/app/lib/domain/services/generic_website.dart @@ -90,10 +90,7 @@ class GenericWebsiteService extends _$GenericWebsiteService { GenericWebsiteService() : _iconsService = GeckoIconService(), - _browserIconCache = LRUCache( - 50, - onEvict: (icon) => icon.image.dispose(), - ); + _browserIconCache = LRUCache(50, onEvict: (icon) => icon.image.dispose()); @override void build() { diff --git a/app/lib/features/geckoview/domain/repositories/tab.dart b/app/lib/features/geckoview/domain/repositories/tab.dart index 879abf17..cb5a0f25 100644 --- a/app/lib/features/geckoview/domain/repositories/tab.dart +++ b/app/lib/features/geckoview/domain/repositories/tab.dart @@ -460,14 +460,17 @@ class TabRepository extends _$TabRepository { .read(tabDataRepositoryProvider.notifier) .getTabContainerData(tabState.id); - final contextChanging = containerData.metadata.contextualIdentity != + final contextChanging = + containerData.metadata.contextualIdentity != currentContainerData?.metadata.contextualIdentity; await addTab( url: uri, private: tabState.isPrivate, container: Value(containerData), - parentId: contextChanging ? null : tabState.id, // Break parent chain if context changes + parentId: contextChanging + ? null + : tabState.id, // Break parent chain if context changes selectTab: true, ); diff --git a/app/lib/features/geckoview/features/bookmarks/domain/providers/bookmarks.dart b/app/lib/features/geckoview/features/bookmarks/domain/providers/bookmarks.dart index 5473fda8..2883af0d 100644 --- a/app/lib/features/geckoview/features/bookmarks/domain/providers/bookmarks.dart +++ b/app/lib/features/geckoview/features/bookmarks/domain/providers/bookmarks.dart @@ -31,7 +31,9 @@ part 'bookmarks.g.dart'; bool _isEmptyRootFolder(BookmarkFolder folder) { if (folder.children == null) return true; // A root folder is empty if it has no children, or only contains other root folders - return folder.children!.every((child) => bookmarkRootIds.contains(child.guid)); + return folder.children!.every( + (child) => bookmarkRootIds.contains(child.guid), + ); } T? _selectChildRecursive( @@ -152,10 +154,12 @@ AsyncValue bookmarks( entryGuid == BookmarkRoot.root.id && result is BookmarkFolder) { final filteredChildren = result.children - ?.where((child) => - child is! BookmarkFolder || - child.guid == BookmarkRoot.mobile.id || - !_isEmptyRootFolder(child)) + ?.where( + (child) => + child is! BookmarkFolder || + child.guid == BookmarkRoot.mobile.id || + !_isEmptyRootFolder(child), + ) .toList(); result = result.copyWith.children(filteredChildren) as T; } @@ -187,8 +191,16 @@ class SeamlessBookmarks extends _$SeamlessBookmarks { } @override - AsyncValue build(String entryGuid, {bool hideEmptyRoots = false}) { - final bookmarks = ref.watch(bookmarksProvider(entryGuid, hideEmptyRoots: hideEmptyRoots)); + AsyncValue build( + String entryGuid, { + bool hideEmptyRoots = false, + }) { + final bookmarks = ref.watch( + bookmarksProvider( + entryGuid, + hideEmptyRoots: hideEmptyRoots, + ), + ); if (_hasSearch) { final filterGuids = ref.watch(bookmarksSearchProvider); diff --git a/app/lib/features/geckoview/features/bookmarks/presentation/screens/bookmark_list.dart b/app/lib/features/geckoview/features/bookmarks/presentation/screens/bookmark_list.dart index 71f9600c..d389d1be 100644 --- a/app/lib/features/geckoview/features/bookmarks/presentation/screens/bookmark_list.dart +++ b/app/lib/features/geckoview/features/bookmarks/presentation/screens/bookmark_list.dart @@ -49,15 +49,30 @@ class BookmarkListScreen extends HookConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final treeKey = useMemoized(() => GlobalKey()); final hideEmptyRoots = useState(true); - final bookmarkList = ref.watch(seamlessBookmarksProvider(entryGuid, hideEmptyRoots: hideEmptyRoots.value)); + final bookmarkList = ref.watch( + seamlessBookmarksProvider( + entryGuid, + hideEmptyRoots: hideEmptyRoots.value, + ), + ); final textFilterEnabled = useState(false); final textFilterController = useTextEditingController(); useOnListenableChange(textFilterController, () { - if (ref.exists(seamlessBookmarksProvider(entryGuid, hideEmptyRoots: hideEmptyRoots.value))) { + if (ref.exists( + seamlessBookmarksProvider( + entryGuid, + hideEmptyRoots: hideEmptyRoots.value, + ), + )) { ref - .read(seamlessBookmarksProvider(entryGuid, hideEmptyRoots: hideEmptyRoots.value).notifier) + .read( + seamlessBookmarksProvider( + entryGuid, + hideEmptyRoots: hideEmptyRoots.value, + ).notifier, + ) .search(textFilterController.text); } }); @@ -109,12 +124,14 @@ class BookmarkListScreen extends HookConsumerWidget { ), if (entryGuid == BookmarkRoot.root.id) MenuItemButton( - leadingIcon: Icon(hideEmptyRoots.value - ? MdiIcons.eyeOff - : MdiIcons.eye), - child: Text(hideEmptyRoots.value - ? 'Show Empty Root Folders' - : 'Hide Empty Root Folders'), + leadingIcon: Icon( + hideEmptyRoots.value ? MdiIcons.eyeOff : MdiIcons.eye, + ), + child: Text( + hideEmptyRoots.value + ? 'Show Empty Root Folders' + : 'Hide Empty Root Folders', + ), onPressed: () { hideEmptyRoots.value = !hideEmptyRoots.value; }, diff --git a/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/bottom_app_bar.dart b/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/bottom_app_bar.dart index 8023a876..b57e0542 100644 --- a/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/bottom_app_bar.dart +++ b/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/bottom_app_bar.dart @@ -128,10 +128,7 @@ class BrowserBottomAppBar extends HookConsumerWidget { color: Theme.of(context).colorScheme.surfaceContainer, child: Padding( padding: EdgeInsets.only(bottom: bottomPadding), - child: SizedBox( - height: _size.height, - child: _tabBar, - ), + child: SizedBox(height: _size.height, child: _tabBar), ), ); } diff --git a/app/lib/features/geckoview/features/browser/presentation/widgets/tab_view/tab_preview.dart b/app/lib/features/geckoview/features/browser/presentation/widgets/tab_view/tab_preview.dart index 9c84c834..a80cfe09 100644 --- a/app/lib/features/geckoview/features/browser/presentation/widgets/tab_view/tab_preview.dart +++ b/app/lib/features/geckoview/features/browser/presentation/widgets/tab_view/tab_preview.dart @@ -319,7 +319,9 @@ class ListTabPreview extends HookConsumerWidget { child: UriBreadcrumb( uri: tabState.url, style: Theme.of(context).textTheme.bodySmall?.copyWith( - color: tabState.isPrivate ? colorScheme.onSurface : null, + color: tabState.isPrivate + ? colorScheme.onSurface + : null, ), ), ), diff --git a/app/lib/features/geckoview/features/browser/presentation/widgets/tab_view/tab_tree_view.dart b/app/lib/features/geckoview/features/browser/presentation/widgets/tab_view/tab_tree_view.dart index 9e43d6ce..de2adc3d 100644 --- a/app/lib/features/geckoview/features/browser/presentation/widgets/tab_view/tab_tree_view.dart +++ b/app/lib/features/geckoview/features/browser/presentation/widgets/tab_view/tab_tree_view.dart @@ -184,7 +184,9 @@ class ViewTabTreesWidget extends HookConsumerWidget { searchPartition: TabSearchPartition.preview, // ignore: document_ignores using fast equatable // ignore: provider_parameters - containerFilter: ContainerFilterById(containerId: containerId), + containerFilter: ContainerFilterById( + containerId: containerId, + ), groupTrees: true, ), ); diff --git a/app/lib/features/geckoview/features/tabs/data/database/daos/tab.dart b/app/lib/features/geckoview/features/tabs/data/database/daos/tab.dart index fab80941..439fda2a 100644 --- a/app/lib/features/geckoview/features/tabs/data/database/daos/tab.dart +++ b/app/lib/features/geckoview/features/tabs/data/database/daos/tab.dart @@ -260,7 +260,8 @@ class TabDao extends DatabaseAccessor with $TabDaoMixin { for (final state in next.values) { final previousState = previous?[state.id]; - if (previousState?.parentId != state.parentId && state.parentId != null) { + if (previousState?.parentId != state.parentId && + state.parentId != null) { if (next.containsKey(state.parentId)) { // Parent exists in current state validatedParentIds[state.id] = state.parentId; @@ -272,8 +273,9 @@ class TabDao extends DatabaseAccessor with $TabDaoMixin { } // Batch validate parent IDs that aren't in the current state - final existingParentIds = - await getExistingTabIds(parentIdsToValidate).get().then((ids) => ids.toSet()); + final existingParentIds = await getExistingTabIds( + parentIdsToValidate, + ).get().then((ids) => ids.toSet()); // Complete validation map for (final state in next.values) { @@ -282,7 +284,8 @@ class TabDao extends DatabaseAccessor with $TabDaoMixin { if (previousState?.parentId != state.parentId) { if (!validatedParentIds.containsKey(state.id)) { // This parent ID needed database validation - if (state.parentId != null && existingParentIds.contains(state.parentId)) { + if (state.parentId != null && + existingParentIds.contains(state.parentId)) { validatedParentIds[state.id] = state.parentId; } else { validatedParentIds[state.id] = null; diff --git a/app/lib/features/settings/presentation/screens/advanced_settings.dart b/app/lib/features/settings/presentation/screens/advanced_settings.dart index 2934896a..b32de5e5 100644 --- a/app/lib/features/settings/presentation/screens/advanced_settings.dart +++ b/app/lib/features/settings/presentation/screens/advanced_settings.dart @@ -51,17 +51,17 @@ class AdvancedSettingsScreen extends StatelessWidget { child: FadingScroll( fadingSize: 25, builder: (context, controller) { - return ListView( - controller: controller, - padding: const EdgeInsets.symmetric(horizontal: 12.0), - children: const [ - _ContentBehaviorSection(), - _StorageDebuggingSection(), - _ResetSection(), - ], - ); - }, - ), + return ListView( + controller: controller, + padding: const EdgeInsets.symmetric(horizontal: 12.0), + children: const [ + _ContentBehaviorSection(), + _StorageDebuggingSection(), + _ResetSection(), + ], + ); + }, + ), ), ); } @@ -119,9 +119,7 @@ class _JavaScriptTile extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final javascriptEnabled = ref.watch( - engineSettingsWithDefaultsProvider.select( - (s) => s.javascriptEnabled, - ), + engineSettingsWithDefaultsProvider.select((s) => s.javascriptEnabled), ); return SwitchListTile.adaptive( diff --git a/app/lib/features/settings/presentation/screens/appearance_display_settings.dart b/app/lib/features/settings/presentation/screens/appearance_display_settings.dart index 23ae8bba..757ce566 100644 --- a/app/lib/features/settings/presentation/screens/appearance_display_settings.dart +++ b/app/lib/features/settings/presentation/screens/appearance_display_settings.dart @@ -111,10 +111,7 @@ class _ThemeSection extends HookConsumerWidget { ); return Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0, - vertical: 8, - ), + padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, @@ -146,9 +143,7 @@ class _ThemeSection extends HookConsumerWidget { selected: {themeMode}, onSelectionChanged: (value) async { await ref - .read( - saveGeneralSettingsControllerProvider.notifier, - ) + .read(saveGeneralSettingsControllerProvider.notifier) .save( (currentSettings) => currentSettings.copyWith.themeMode(value.first), @@ -172,10 +167,7 @@ class _TabBarPositionSection extends HookConsumerWidget { ); return Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0, - vertical: 8, - ), + padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, @@ -190,9 +182,7 @@ class _TabBarPositionSection extends HookConsumerWidget { onChanged: (value) async { if (value != null) { await ref - .read( - saveGeneralSettingsControllerProvider.notifier, - ) + .read(saveGeneralSettingsControllerProvider.notifier) .save( (currentSettings) => currentSettings.copyWith.tabBarPosition(value), @@ -204,9 +194,7 @@ class _TabBarPositionSection extends HookConsumerWidget { RadioListTile.adaptive( value: TabBarPosition.top, title: Text('Top'), - subtitle: Text( - 'Persistent tab bar without auto-hide', - ), + subtitle: Text('Persistent tab bar without auto-hide'), ), RadioListTile.adaptive( value: TabBarPosition.bottom, @@ -228,8 +216,9 @@ class _ShowContextualTabBarTile extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final tabBarShowContextualBar = ref.watch( - generalSettingsWithDefaultsProvider - .select((s) => s.tabBarShowContextualBar), + generalSettingsWithDefaultsProvider.select( + (s) => s.tabBarShowContextualBar, + ), ); return SwitchListTile.adaptive( @@ -257,8 +246,9 @@ class _ShowQuickTabSwitcherBarTile extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final tabBarShowQuickTabSwitcherBar = ref.watch( - generalSettingsWithDefaultsProvider - .select((s) => s.tabBarShowQuickTabSwitcherBar), + generalSettingsWithDefaultsProvider.select( + (s) => s.tabBarShowQuickTabSwitcherBar, + ), ); return SwitchListTile.adaptive( @@ -272,8 +262,8 @@ class _ShowQuickTabSwitcherBarTile extends HookConsumerWidget { await ref .read(saveGeneralSettingsControllerProvider.notifier) .save( - (currentSettings) => currentSettings.copyWith - .tabBarShowQuickTabSwitcherBar(value), + (currentSettings) => + currentSettings.copyWith.tabBarShowQuickTabSwitcherBar(value), ); }, ); @@ -290,10 +280,7 @@ class _QuickTabSwitcherModeSection extends HookConsumerWidget { ); return Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0, - vertical: 8, - ), + padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, @@ -308,12 +295,10 @@ class _QuickTabSwitcherModeSection extends HookConsumerWidget { onChanged: (value) async { if (value != null) { await ref - .read( - saveGeneralSettingsControllerProvider.notifier, - ) + .read(saveGeneralSettingsControllerProvider.notifier) .save( - (currentSettings) => currentSettings.copyWith - .quickTabSwitcherMode(value), + (currentSettings) => + currentSettings.copyWith.quickTabSwitcherMode(value), ); } }, @@ -322,16 +307,12 @@ class _QuickTabSwitcherModeSection extends HookConsumerWidget { RadioListTile.adaptive( value: QuickTabSwitcherMode.lastUsedTabs, title: Text('Recently Used Tabs'), - subtitle: Text( - 'Recently used tabs across all containers', - ), + subtitle: Text('Recently used tabs across all containers'), ), RadioListTile.adaptive( value: QuickTabSwitcherMode.containerTabs, title: Text('Container Tabs'), - subtitle: Text( - 'Ordered tabs of the selected container', - ), + subtitle: Text('Ordered tabs of the selected container'), ), ], ), diff --git a/app/lib/features/settings/presentation/screens/fingerprinting_settings.dart b/app/lib/features/settings/presentation/screens/fingerprinting_settings.dart index b0cadea9..d902fb06 100644 --- a/app/lib/features/settings/presentation/screens/fingerprinting_settings.dart +++ b/app/lib/features/settings/presentation/screens/fingerprinting_settings.dart @@ -34,17 +34,17 @@ class FingerprintingSettingsScreen extends StatelessWidget { child: FadingScroll( fadingSize: 25, builder: (context, controller) { - return ListView( - controller: controller, - padding: const EdgeInsets.symmetric(horizontal: 12.0), - children: const [ - _MainProtectionSection(), - _IdentitySection(), - _AdvancedSection(), - ], - ); - }, - ), + return ListView( + controller: controller, + padding: const EdgeInsets.symmetric(horizontal: 12.0), + children: const [ + _MainProtectionSection(), + _IdentitySection(), + _AdvancedSection(), + ], + ); + }, + ), ), ); } @@ -120,9 +120,7 @@ class _FingerprintProtectionTile extends StatelessWidget { Widget build(BuildContext context) { return ListTile( title: const Text('Fingerprint Protection'), - subtitle: const Text( - 'Granular control over browser fingerprinting', - ), + subtitle: const Text('Granular control over browser fingerprinting'), contentPadding: const EdgeInsets.symmetric( vertical: 8.0, horizontal: 16.0, @@ -143,9 +141,7 @@ class _ResistFingerprintingTile extends StatelessWidget { Widget build(BuildContext context) { return ListTile( title: const Text('Resist Fingerprinting'), - subtitle: const Text( - 'Advanced fingerprinting protection hardening', - ), + subtitle: const Text('Advanced fingerprinting protection hardening'), contentPadding: const EdgeInsets.symmetric( vertical: 8.0, horizontal: 16.0, diff --git a/app/lib/features/settings/presentation/screens/privacy_security_settings.dart b/app/lib/features/settings/presentation/screens/privacy_security_settings.dart index b444a006..ae3d5988 100644 --- a/app/lib/features/settings/presentation/screens/privacy_security_settings.dart +++ b/app/lib/features/settings/presentation/screens/privacy_security_settings.dart @@ -43,19 +43,19 @@ class PrivacySecuritySettingsScreen extends StatelessWidget { child: FadingScroll( fadingSize: 25, builder: (context, controller) { - return ListView( - controller: controller, - padding: const EdgeInsets.symmetric(horizontal: 12.0), - children: const [ - _PrivacyModesSection(), - _TrackingProtectionSection(), - _ConnectionSecuritySection(), - _DataManagementSection(), - _AdvancedSection(), - ], - ); - }, - ), + return ListView( + controller: controller, + padding: const EdgeInsets.symmetric(horizontal: 12.0), + children: const [ + _PrivacyModesSection(), + _TrackingProtectionSection(), + _ConnectionSecuritySection(), + _DataManagementSection(), + _AdvancedSection(), + ], + ); + }, + ), ), ); } @@ -161,19 +161,13 @@ class _IncognitoModeSection extends HookConsumerWidget { .read(saveGeneralSettingsControllerProvider.notifier) .save( (currentSettings) => value - ? currentSettings.copyWith.deleteBrowsingDataOnQuit( - {}, - ) - : currentSettings.copyWith.deleteBrowsingDataOnQuit( - null, - ), + ? currentSettings.copyWith.deleteBrowsingDataOnQuit({}) + : currentSettings.copyWith.deleteBrowsingDataOnQuit(null), ); }, ), if (deleteBrowsingDataOnQuit != null) - _DeleteBrowsingDataTypes( - selectedTypes: deleteBrowsingDataOnQuit, - ), + _DeleteBrowsingDataTypes(selectedTypes: deleteBrowsingDataOnQuit), ], ); } @@ -187,10 +181,7 @@ class _DeleteBrowsingDataTypes extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { return Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0, - vertical: 8, - ), + padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8), child: Column( children: [ for (final type in DeleteBrowsingDataType.values) @@ -208,20 +199,19 @@ class _DeleteBrowsingDataTypes extends HookConsumerWidget { if (value == true) { await notifier.save( - (currentSettings) => currentSettings.copyWith - .deleteBrowsingDataOnQuit({ - ...currentSettings.deleteBrowsingDataOnQuit!, - type, - }), + (currentSettings) => + currentSettings.copyWith.deleteBrowsingDataOnQuit({ + ...currentSettings.deleteBrowsingDataOnQuit!, + type, + }), ); } else { await notifier.save( - (currentSettings) => currentSettings.copyWith - .deleteBrowsingDataOnQuit( - { - ...currentSettings.deleteBrowsingDataOnQuit!, - }..remove(type), - ), + (currentSettings) => + currentSettings.copyWith.deleteBrowsingDataOnQuit( + {...currentSettings.deleteBrowsingDataOnQuit!} + ..remove(type), + ), ); } }, @@ -269,10 +259,7 @@ class _AutoClearHistorySection extends HookConsumerWidget { ); return Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0, - vertical: 8, - ), + padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, @@ -296,41 +283,19 @@ class _AutoClearHistorySection extends HookConsumerWidget { ), width: double.infinity, dropdownMenuEntries: const [ - DropdownMenuEntry( - value: Duration.zero, - label: 'Never', - ), - DropdownMenuEntry( - value: Duration(days: 1), - label: '1 Day', - ), - DropdownMenuEntry( - value: Duration(days: 7), - label: '1 Week', - ), - DropdownMenuEntry( - value: Duration(days: 14), - label: '2 Weeks', - ), - DropdownMenuEntry( - value: Duration(days: 30), - label: '1 Month', - ), - DropdownMenuEntry( - value: Duration(days: 90), - label: '3 Months', - ), + DropdownMenuEntry(value: Duration.zero, label: 'Never'), + DropdownMenuEntry(value: Duration(days: 1), label: '1 Day'), + DropdownMenuEntry(value: Duration(days: 7), label: '1 Week'), + DropdownMenuEntry(value: Duration(days: 14), label: '2 Weeks'), + DropdownMenuEntry(value: Duration(days: 30), label: '1 Month'), + DropdownMenuEntry(value: Duration(days: 90), label: '3 Months'), ], onSelected: (value) async { await ref - .read( - saveGeneralSettingsControllerProvider.notifier, - ) + .read(saveGeneralSettingsControllerProvider.notifier) .save( (currentSettings) => currentSettings.copyWith - .historyAutoCleanInterval( - value ?? Duration.zero, - ), + .historyAutoCleanInterval(value ?? Duration.zero), ); }, ), @@ -378,10 +343,7 @@ class _HttpsOnlyModeSection extends HookConsumerWidget { ); return Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0, - vertical: 8, - ), + padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, @@ -410,9 +372,7 @@ class _HttpsOnlyModeSection extends HookConsumerWidget { selected: {httpsOnlyMode}, onSelectionChanged: (value) async { await ref - .read( - saveEngineSettingsControllerProvider.notifier, - ) + .read(saveEngineSettingsControllerProvider.notifier) .save( (currentSettings) => currentSettings.copyWith.httpsOnlyMode(value.first), @@ -458,10 +418,7 @@ class _EnhancedTrackingProtectionSection extends HookConsumerWidget { ); return Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0, - vertical: 8, - ), + padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, @@ -477,8 +434,8 @@ class _EnhancedTrackingProtectionSection extends HookConsumerWidget { await ref .read(saveEngineSettingsControllerProvider.notifier) .save( - (currentSettings) => - currentSettings.copyWith.trackingProtectionPolicy(value), + (currentSettings) => currentSettings.copyWith + .trackingProtectionPolicy(value), ); }, child: const Column( @@ -504,9 +461,7 @@ class _EnhancedTrackingProtectionSection extends HookConsumerWidget { RadioListTile.adaptive( value: TrackingProtectionPolicy.custom, title: Text('Custom'), - subtitle: Text( - 'Choose which trackers and scripts to block.', - ), + subtitle: Text('Choose which trackers and scripts to block.'), ), ], ), @@ -546,8 +501,8 @@ class _BounceTrackingProtectionTile extends HookConsumerWidget { await ref .read(saveEngineSettingsControllerProvider.notifier) .save( - (currentSettings) => currentSettings.copyWith - .bounceTrackingProtectionMode( + (currentSettings) => + currentSettings.copyWith.bounceTrackingProtectionMode( value ? BounceTrackingProtectionMode.enabled : BounceTrackingProtectionMode.disabled, @@ -570,10 +525,7 @@ class _QueryParameterStrippingSection extends HookConsumerWidget { ); return Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0, - vertical: 8, - ), + padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, @@ -605,12 +557,10 @@ class _QueryParameterStrippingSection extends HookConsumerWidget { selected: {queryParameterStripping}, onSelectionChanged: (value) async { await ref - .read( - saveEngineSettingsControllerProvider.notifier, - ) + .read(saveEngineSettingsControllerProvider.notifier) .save( - (currentSettings) => - currentSettings.copyWith.queryParameterStripping(value.first), + (currentSettings) => currentSettings.copyWith + .queryParameterStripping(value.first), ); }, ), diff --git a/app/lib/features/settings/presentation/screens/search_content_settings.dart b/app/lib/features/settings/presentation/screens/search_content_settings.dart index 1a791bd8..1f4e8ef2 100644 --- a/app/lib/features/settings/presentation/screens/search_content_settings.dart +++ b/app/lib/features/settings/presentation/screens/search_content_settings.dart @@ -44,18 +44,18 @@ class SearchContentSettingsScreen extends StatelessWidget { child: FadingScroll( fadingSize: 25, builder: (context, controller) { - return ListView( - controller: controller, - padding: const EdgeInsets.symmetric(horizontal: 12.0), - children: const [ - _SearchSection(), - _ContentViewingSection(), - _ContentEnhancementSection(), - _ExtensionsSection(), - ], - ); - }, - ), + return ListView( + controller: controller, + padding: const EdgeInsets.symmetric(horizontal: 12.0), + children: const [ + _SearchSection(), + _ContentViewingSection(), + _ContentEnhancementSection(), + _ExtensionsSection(), + ], + ); + }, + ), ), ); } @@ -154,16 +154,14 @@ class _AutocompleteProviderSection extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final defaultSearchSuggestionsProvider = ref.watch( - generalSettingsWithDefaultsProvider - .select((s) => s.defaultSearchSuggestionsProvider), + generalSettingsWithDefaultsProvider.select( + (s) => s.defaultSearchSuggestionsProvider, + ), ); final relatedBang = defaultSearchSuggestionsProvider.relatedBang; return Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0, - vertical: 8, - ), + padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, @@ -183,28 +181,27 @@ class _AutocompleteProviderSection extends HookConsumerWidget { ), ), width: double.infinity, - leadingIcon: - relatedBang.mapNotNull((trigger) => BangIcon(trigger: trigger)), - dropdownMenuEntries: SearchSuggestionProviders.values - .map((provider) { - return DropdownMenuEntry( - value: provider, - label: provider.label, - leadingIcon: provider.relatedBang.mapNotNull( - (trigger) => BangIcon(trigger: trigger), - ), - ); - }) - .toList(), + leadingIcon: relatedBang.mapNotNull( + (trigger) => BangIcon(trigger: trigger), + ), + dropdownMenuEntries: SearchSuggestionProviders.values.map(( + provider, + ) { + return DropdownMenuEntry( + value: provider, + label: provider.label, + leadingIcon: provider.relatedBang.mapNotNull( + (trigger) => BangIcon(trigger: trigger), + ), + ); + }).toList(), onSelected: (value) async { if (value != null) { await ref - .read( - saveGeneralSettingsControllerProvider.notifier, - ) + .read(saveGeneralSettingsControllerProvider.notifier) .save( - (currentSettings) => - currentSettings.copyWith.defaultSearchSuggestionsProvider(value), + (currentSettings) => currentSettings.copyWith + .defaultSearchSuggestionsProvider(value), ); } }, @@ -243,7 +240,9 @@ class _OnDeviceAiTile extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final enableLocalAiFeatures = ref.watch( - generalSettingsWithDefaultsProvider.select((s) => s.enableLocalAiFeatures), + generalSettingsWithDefaultsProvider.select( + (s) => s.enableLocalAiFeatures, + ), ); return SwitchListTile.adaptive( @@ -315,9 +314,7 @@ class _EnforceReaderModeTile extends HookConsumerWidget { onChanged: enableReadability ? (value) async { await ref - .read( - saveGeneralSettingsControllerProvider.notifier, - ) + .read(saveGeneralSettingsControllerProvider.notifier) .save( (currentSettings) => currentSettings.copyWith.enforceReadability(value), diff --git a/app/lib/features/settings/presentation/screens/tabs_behavior_settings.dart b/app/lib/features/settings/presentation/screens/tabs_behavior_settings.dart index bd13671e..0c0d7e4e 100644 --- a/app/lib/features/settings/presentation/screens/tabs_behavior_settings.dart +++ b/app/lib/features/settings/presentation/screens/tabs_behavior_settings.dart @@ -39,17 +39,17 @@ class TabsBehaviorSettingsScreen extends StatelessWidget { child: FadingScroll( fadingSize: 25, builder: (context, controller) { - return ListView( - controller: controller, - padding: const EdgeInsets.symmetric(horizontal: 12.0), - children: const [ - _TabCreationSection(), - _TabOrganizationSection(), - _TabInteractionSection(), - ], - ); - }, - ), + return ListView( + controller: controller, + padding: const EdgeInsets.symmetric(horizontal: 12.0), + children: const [ + _TabCreationSection(), + _TabOrganizationSection(), + _TabInteractionSection(), + ], + ); + }, + ), ), ); } @@ -110,19 +110,14 @@ class _NewTabDefaultSection extends HookConsumerWidget { ); return Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0, - vertical: 8, - ), + padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ const ListTile( title: Text('New Tab Default'), - subtitle: Text( - 'Choose the default type for manually created tabs', - ), + subtitle: Text('Choose the default type for manually created tabs'), leading: Icon(MdiIcons.tab), contentPadding: EdgeInsets.zero, ), @@ -144,12 +139,10 @@ class _NewTabDefaultSection extends HookConsumerWidget { selected: {defaultCreateTabType}, onSelectionChanged: (value) async { await ref - .read( - saveGeneralSettingsControllerProvider.notifier, - ) + .read(saveGeneralSettingsControllerProvider.notifier) .save( - (currentSettings) => - currentSettings.copyWith.defaultCreateTabType(value.first), + (currentSettings) => currentSettings.copyWith + .defaultCreateTabType(value.first), ); }, style: switch (defaultCreateTabType) { @@ -178,19 +171,14 @@ class _ExternalLinkHandlingSection extends HookConsumerWidget { ); return Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0, - vertical: 8, - ), + padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ const ListTile( title: Text('External Link Handling'), - subtitle: Text( - 'Choose how external links open in WebLibre', - ), + subtitle: Text('Choose how external links open in WebLibre'), leading: Icon(MdiIcons.tabPlus), contentPadding: EdgeInsets.zero, ), @@ -217,12 +205,10 @@ class _ExternalLinkHandlingSection extends HookConsumerWidget { selected: {tabIntentOpenSetting}, onSelectionChanged: (value) async { await ref - .read( - saveGeneralSettingsControllerProvider.notifier, - ) + .read(saveGeneralSettingsControllerProvider.notifier) .save( - (currentSettings) => - currentSettings.copyWith.tabIntentOpenSetting(value.first), + (currentSettings) => currentSettings.copyWith + .tabIntentOpenSetting(value.first), ); }, style: switch (tabIntentOpenSetting) { @@ -246,7 +232,9 @@ class _CreateChildTabsTile extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final createChildTabsOption = ref.watch( - generalSettingsWithDefaultsProvider.select((s) => s.createChildTabsOption), + generalSettingsWithDefaultsProvider.select( + (s) => s.createChildTabsOption, + ), ); return SwitchListTile.adaptive( @@ -274,14 +262,14 @@ class _ShowExtensionShortcutTile extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final showExtensionShortcut = ref.watch( - generalSettingsWithDefaultsProvider.select((s) => s.showExtensionShortcut), + generalSettingsWithDefaultsProvider.select( + (s) => s.showExtensionShortcut, + ), ); return SwitchListTile.adaptive( title: const Text('Show Extension Shortcut'), - subtitle: const Text( - 'Display an extension menu directly on the tab bar', - ), + subtitle: const Text('Display an extension menu directly on the tab bar'), secondary: const Icon(MdiIcons.puzzleHeart), value: showExtensionShortcut, onChanged: (value) async { @@ -306,10 +294,7 @@ class _TabBarSwipeBehaviorSection extends HookConsumerWidget { ); return Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16.0, - vertical: 8, - ), + padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, @@ -324,9 +309,7 @@ class _TabBarSwipeBehaviorSection extends HookConsumerWidget { onChanged: (value) async { if (value != null) { await ref - .read( - saveGeneralSettingsControllerProvider.notifier, - ) + .read(saveGeneralSettingsControllerProvider.notifier) .save( (currentSettings) => currentSettings.copyWith.tabBarSwipeAction(value), diff --git a/packages/flutter_mozilla_components/lib/src/domain/services/gecko_viewport.dart b/packages/flutter_mozilla_components/lib/src/domain/services/gecko_viewport.dart index 53ab2307..1a2cc257 100644 --- a/packages/flutter_mozilla_components/lib/src/domain/services/gecko_viewport.dart +++ b/packages/flutter_mozilla_components/lib/src/domain/services/gecko_viewport.dart @@ -10,11 +10,7 @@ import 'package:flutter_mozilla_components/src/pigeons/gecko.g.dart'; import 'package:rxdart/rxdart.dart'; /// Keyboard visibility event data -typedef KeyboardEvent = ({ - int heightPx, - bool isVisible, - bool isAnimating, -}); +typedef KeyboardEvent = ({int heightPx, bool isVisible, bool isAnimating}); /// Service for controlling GeckoView's viewport behavior. /// @@ -57,9 +53,9 @@ class GeckoViewportService extends GeckoViewportEvents { BinaryMessenger? binaryMessenger, String messageChannelSuffix = '', }) : _api = GeckoViewportApi( - binaryMessenger: binaryMessenger, - messageChannelSuffix: messageChannelSuffix, - ); + binaryMessenger: binaryMessenger, + messageChannelSuffix: messageChannelSuffix, + ); /// Sets up the service to receive events from native. /// @@ -110,15 +106,11 @@ class GeckoViewportService extends GeckoViewportEvents { bool isVisible, bool isAnimating, ) { - _keyboardSubject.addWhenMoreRecent( - timestamp, - null, - ( - heightPx: heightPx, - isVisible: isVisible, - isAnimating: isAnimating, - ), - ); + _keyboardSubject.addWhenMoreRecent(timestamp, null, ( + heightPx: heightPx, + isVisible: isVisible, + isAnimating: isAnimating, + )); } /// Disposes the service and closes all streams. diff --git a/packages/flutter_tor/example/test/widget_test.dart b/packages/flutter_tor/example/test/widget_test.dart index e96b6944..0ae87bd2 100644 --- a/packages/flutter_tor/example/test/widget_test.dart +++ b/packages/flutter_tor/example/test/widget_test.dart @@ -18,8 +18,8 @@ void main() { // Verify that platform version is retrieved. expect( find.byWidgetPredicate( - (Widget widget) => widget is Text && - widget.data!.startsWith('Running on:'), + (Widget widget) => + widget is Text && widget.data!.startsWith('Running on:'), ), findsOneWidget, ); diff --git a/packages/speech_to_text_dialog/example/integration_test/plugin_integration_test.dart b/packages/speech_to_text_dialog/example/integration_test/plugin_integration_test.dart index 6ebb6c10..6ee556d0 100644 --- a/packages/speech_to_text_dialog/example/integration_test/plugin_integration_test.dart +++ b/packages/speech_to_text_dialog/example/integration_test/plugin_integration_test.dart @@ -6,7 +6,6 @@ // For more information about Flutter integration tests, please see // https://flutter.dev/to/integration-testing - import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; diff --git a/packages/speech_to_text_dialog/example/lib/main.dart b/packages/speech_to_text_dialog/example/lib/main.dart index efa4c7e7..7ec33c3f 100644 --- a/packages/speech_to_text_dialog/example/lib/main.dart +++ b/packages/speech_to_text_dialog/example/lib/main.dart @@ -84,11 +84,7 @@ class _MyAppState extends State { child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - const Icon( - Icons.mic, - size: 80, - color: Colors.blue, - ), + const Icon(Icons.mic, size: 80, color: Colors.blue), const SizedBox(height: 24), Text( _recognizedText, diff --git a/packages/speech_to_text_dialog/example/test/widget_test.dart b/packages/speech_to_text_dialog/example/test/widget_test.dart index d72f4d27..68bddcf4 100644 --- a/packages/speech_to_text_dialog/example/test/widget_test.dart +++ b/packages/speech_to_text_dialog/example/test/widget_test.dart @@ -18,8 +18,8 @@ void main() { // Verify that platform version is retrieved. expect( find.byWidgetPredicate( - (Widget widget) => widget is Text && - widget.data!.startsWith('Running on:'), + (Widget widget) => + widget is Text && widget.data!.startsWith('Running on:'), ), findsOneWidget, ); diff --git a/packages/speech_to_text_dialog/lib/speech_to_text_dialog.dart b/packages/speech_to_text_dialog/lib/speech_to_text_dialog.dart index c29f1e23..2d6f5b0d 100644 --- a/packages/speech_to_text_dialog/lib/speech_to_text_dialog.dart +++ b/packages/speech_to_text_dialog/lib/speech_to_text_dialog.dart @@ -48,11 +48,9 @@ class SpeechToTextDialog implements SpeechToTextEvents { /// /// Optionally provide a custom [api] for testing or dependency injection. /// If [binaryMessenger] is provided, it will be used for Pigeon communication. - SpeechToTextDialog({ - SpeechToTextApi? api, - BinaryMessenger? binaryMessenger, - }) : _api = api ?? SpeechToTextApi(binaryMessenger: binaryMessenger), - _binaryMessenger = binaryMessenger { + SpeechToTextDialog({SpeechToTextApi? api, BinaryMessenger? binaryMessenger}) + : _api = api ?? SpeechToTextApi(binaryMessenger: binaryMessenger), + _binaryMessenger = binaryMessenger { // Set up the event handler SpeechToTextEvents.setUp(this, binaryMessenger: binaryMessenger); } diff --git a/packages/speech_to_text_dialog/pigeons/speech_to_text.dart b/packages/speech_to_text_dialog/pigeons/speech_to_text.dart index 245254e7..217a5c14 100644 --- a/packages/speech_to_text_dialog/pigeons/speech_to_text.dart +++ b/packages/speech_to_text_dialog/pigeons/speech_to_text.dart @@ -35,7 +35,6 @@ import 'package:pigeon/pigeon.dart'; dartPackageName: 'speech_to_text_dialog', ), ) - /// Host API - methods called from Flutter to native Android. @HostApi() abstract class SpeechToTextApi {