hide pinned extensions

This commit is contained in:
Fabian Freund
2026-05-26 11:58:25 +02:00
parent 417586fd8f
commit 0b08d3126d
@@ -18,8 +18,11 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_material_design_icons/flutter_material_design_icons.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/core/routing/routes.dart';
import 'package:weblibre/features/addons/domain/providers.dart';
import 'package:weblibre/features/geckoview/domain/providers.dart'; import 'package:weblibre/features/geckoview/domain/providers.dart';
import 'package:weblibre/features/geckoview/domain/providers/web_extensions_state.dart'; import 'package:weblibre/features/geckoview/domain/providers/web_extensions_state.dart';
import 'package:weblibre/features/geckoview/features/browser/presentation/widgets/extension_badge_icon.dart'; import 'package:weblibre/features/geckoview/features/browser/presentation/widgets/extension_badge_icon.dart';
@@ -36,11 +39,15 @@ class ExtensionShortcutMenu extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, WidgetRef ref) { Widget build(BuildContext context, WidgetRef ref) {
final pinnedIds = ref.watch(pinnedAddonIdsProvider);
final browserExtensions = ref.watch( final browserExtensions = ref.watch(
webExtensionsStateProvider( webExtensionsStateProvider(
WebExtensionActionType.browser, WebExtensionActionType.browser,
).select((value) => value.values.toList()), ).select((value) => value.values.toList()),
); );
final unpinnedBrowserExtensions = browserExtensions
.where((extension) => !pinnedIds.contains(extension.extensionId))
.toList();
return MenuAnchor( return MenuAnchor(
controller: controller, controller: controller,
@@ -48,7 +55,7 @@ class ExtensionShortcutMenu extends HookConsumerWidget {
return child!; return child!;
}, },
menuChildren: [ menuChildren: [
...browserExtensions.map( ...unpinnedBrowserExtensions.map(
(extension) => MenuItemButton( (extension) => MenuItemButton(
onPressed: () async { onPressed: () async {
//Use parents .ref because after onPressed this consumer gets disposed already //Use parents .ref because after onPressed this consumer gets disposed already
@@ -66,6 +73,14 @@ class ExtensionShortcutMenu extends HookConsumerWidget {
child: Text(extension.title ?? ''), child: Text(extension.title ?? ''),
), ),
), ),
if (unpinnedBrowserExtensions.isNotEmpty) const Divider(),
MenuItemButton(
onPressed: () async {
await const AddonManagerRoute().push<void>(context);
},
leadingIcon: const Icon(MdiIcons.puzzleEdit),
child: const Text('Manage extensions'),
),
], ],
child: Visibility(visible: browserExtensions.isNotEmpty, child: child), child: Visibility(visible: browserExtensions.isNotEmpty, child: child),
); );