From 7321c04dc16b85dce7ea2e17244a936e31ae311a Mon Sep 17 00:00:00 2001 From: Ming Ming Date: Mon, 26 Jul 2021 04:25:16 +0800 Subject: [PATCH] Fix NPE pressing edit before album initialized --- lib/widget/album_viewer.dart | 3 ++ lib/widget/album_viewer_mixin.dart | 51 +++++++++++++++------------- lib/widget/dynamic_album_viewer.dart | 3 ++ 3 files changed, 34 insertions(+), 23 deletions(-) diff --git a/lib/widget/album_viewer.dart b/lib/widget/album_viewer.dart index 8894bed9..f7636927 100644 --- a/lib/widget/album_viewer.dart +++ b/lib/widget/album_viewer.dart @@ -97,6 +97,9 @@ class _AlbumViewerState extends State ); } + @protected + get canEdit => _album != null; + @override enterEditMode() { super.enterEditMode(); diff --git a/lib/widget/album_viewer_mixin.dart b/lib/widget/album_viewer_mixin.dart index e00fdb91..20c74cd8 100644 --- a/lib/widget/album_viewer_mixin.dart +++ b/lib/widget/album_viewer_mixin.dart @@ -56,31 +56,33 @@ mixin AlbumViewerMixin }, ), ...(actions ?? []), - PopupMenuButton( - tooltip: MaterialLocalizations.of(context).moreButtonTooltip, - itemBuilder: (context) => [ - PopupMenuItem( - value: -1, - child: Text(L10n.of(context).editAlbumMenuLabel), - ), - ...(menuItemBuilder?.call(context) ?? []), - ], - onSelected: (option) { - if (option >= 0) { - onSelectedMenuItem?.call(option); - } else { - switch (option) { - case _menuValueEdit: - _onAppBarEditPressed(context, album); - break; + if (menuItemBuilder != null || canEdit) + PopupMenuButton( + tooltip: MaterialLocalizations.of(context).moreButtonTooltip, + itemBuilder: (context) => [ + if (canEdit) + PopupMenuItem( + value: -1, + child: Text(L10n.of(context).editAlbumMenuLabel), + ), + ...(menuItemBuilder?.call(context) ?? []), + ], + onSelected: (option) { + if (option >= 0) { + onSelectedMenuItem?.call(option); + } else { + switch (option) { + case _menuValueEdit: + _onAppBarEditPressed(context, album); + break; - default: - _log.shout("[buildNormalAppBar] Unknown value: $option"); - break; + default: + _log.shout("[buildNormalAppBar] Unknown value: $option"); + break; + } } - } - }, - ), + }, + ), ], ); } @@ -127,6 +129,9 @@ mixin AlbumViewerMixin @protected bool get isEditMode => _isEditMode; + @protected + bool get canEdit => true; + @protected @mustCallSuper void enterEditMode() {} diff --git a/lib/widget/dynamic_album_viewer.dart b/lib/widget/dynamic_album_viewer.dart index 1981e955..07814a0b 100644 --- a/lib/widget/dynamic_album_viewer.dart +++ b/lib/widget/dynamic_album_viewer.dart @@ -98,6 +98,9 @@ class _DynamicAlbumViewerState extends State ); } + @protected + get canEdit => _album != null; + @override enterEditMode() { super.enterEditMode();