From 40ef8a63b088e89b5f58157482a044c3ea09f987 Mon Sep 17 00:00:00 2001 From: nyne Date: Sat, 29 Nov 2025 15:00:30 +0800 Subject: [PATCH] fix: enable multi-select actions in local comics search mode --- lib/pages/local_comics_page.dart | 49 ++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/lib/pages/local_comics_page.dart b/lib/pages/local_comics_page.dart index 1021010..8a2b56e 100644 --- a/lib/pages/local_comics_page.dart +++ b/lib/pages/local_comics_page.dart @@ -258,29 +258,41 @@ class _LocalComicsPageState extends State { else if (searchMode) SliverAppbar( leading: Tooltip( - message: "Cancel".tl, + message: multiSelectMode ? "Cancel".tl : "Cancel".tl, child: IconButton( - icon: const Icon(Icons.close), + icon: multiSelectMode + ? const Icon(Icons.close) + : const Icon(Icons.close), onPressed: () { - setState(() { - searchMode = false; - keyword = ""; - update(); - }); + if (multiSelectMode) { + setState(() { + multiSelectMode = false; + selectedComics.clear(); + }); + } else { + setState(() { + searchMode = false; + keyword = ""; + update(); + }); + } }, ), ), - title: TextField( - autofocus: true, - decoration: InputDecoration( - hintText: "Search".tl, - border: InputBorder.none, - ), - onChanged: (v) { - keyword = v; - update(); - }, - ), + title: multiSelectMode + ? Text(selectedComics.length.toString()) + : TextField( + autofocus: true, + decoration: InputDecoration( + hintText: "Search".tl, + border: InputBorder.none, + ), + onChanged: (v) { + keyword = v; + update(); + }, + ), + actions: multiSelectMode ? selectActions : null, ), SliverGridComics( comics: comics, @@ -344,6 +356,7 @@ class _LocalComicsPageState extends State { return PopScope( canPop: !multiSelectMode && !searchMode, onPopInvokedWithResult: (didPop, result) { + if (didPop) return; if (multiSelectMode) { setState(() { multiSelectMode = false;