diff --git a/assets/translation.json b/assets/translation.json index 9bb2ea3..9de20d2 100644 --- a/assets/translation.json +++ b/assets/translation.json @@ -392,7 +392,8 @@ "Source URL": "源地址", "The URL should point to a 'index.json' file": "该URL应指向一个'index.json'文件", "Double tap to zoom": "双击缩放", - "Clear Unfavorited": "清除未收藏" + "Clear Unfavorited": "清除未收藏", + "Reverse": "反转" }, "zh_TW": { "Home": "首頁", @@ -787,6 +788,7 @@ "Source URL": "源地址", "The URL should point to a 'index.json' file": "該URL應指向一個'index.json'文件", "Double tap to zoom": "雙擊縮放", - "Clear Unfavorited": "清除未收藏" + "Clear Unfavorited": "清除未收藏", + "Reverse": "反轉" } } \ No newline at end of file diff --git a/lib/foundation/appdata.dart b/lib/foundation/appdata.dart index 822312f..5600664 100644 --- a/lib/foundation/appdata.dart +++ b/lib/foundation/appdata.dart @@ -205,7 +205,9 @@ class Settings with ChangeNotifier { operator []=(String key, dynamic value) { _data[key] = value; - notifyListeners(); + if (key != "dataVersion") { + notifyListeners(); + } } @override diff --git a/lib/foundation/favorites.dart b/lib/foundation/favorites.dart index 2fce8f5..5e453f0 100644 --- a/lib/foundation/favorites.dart +++ b/lib/foundation/favorites.dart @@ -714,11 +714,26 @@ class LocalFavoritesManager with ChangeNotifier { if (!existsFolder(folder)) { throw Exception("Failed to reorder: folder not found"); } - deleteFolder(folder); - createFolder(folder); - for (int i = 0; i < newFolder.length; i++) { - addComic(folder, newFolder[i], i); + _db.execute("BEGIN TRANSACTION"); + try { + for (int i = 0; i < newFolder.length; i++) { + _db.execute(""" + update "$folder" + set display_order = ? + where id == ? and type == ?; + """, [ + i, + newFolder[i].id, + newFolder[i].type.value + ]); + } } + catch (e) { + Log.error("Reorder", e.toString()); + _db.execute("ROLLBACK"); + return; + } + _db.execute("COMMIT"); notifyListeners(); } diff --git a/lib/pages/favorites/local_favorites_page.dart b/lib/pages/favorites/local_favorites_page.dart index 7dfe925..fc45c0f 100644 --- a/lib/pages/favorites/local_favorites_page.dart +++ b/lib/pages/favorites/local_favorites_page.dart @@ -864,7 +864,10 @@ class _ReorderComicsPageState extends State<_ReorderComicsPage> { @override void dispose() { if (changed) { - LocalFavoritesManager().reorder(comics, widget.name); + // Delay to ensure navigation is completed + Future.delayed(const Duration(milliseconds: 200), () { + LocalFavoritesManager().reorder(comics, widget.name); + }); } super.dispose(); } @@ -899,27 +902,31 @@ class _ReorderComicsPageState extends State<_ReorderComicsPage> { appBar: Appbar( title: Text("Reorder".tl), actions: [ - IconButton( - icon: const Icon(Icons.info_outline), - onPressed: () { - showInfoDialog( - context: context, - title: "Reorder".tl, - content: "Long press and drag to reorder.".tl, - ); - }, - ), - IconButton( - icon: const Icon(Icons.swap_vert), - onPressed: () { - setState(() { - comics = comics.reversed.toList(); - changed = true; - showToast( - message: "Reversed successfully".tl, context: context); - }); - }, + Tooltip( + message: "Information".tl, + child: IconButton( + icon: const Icon(Icons.info_outline), + onPressed: () { + showInfoDialog( + context: context, + title: "Reorder".tl, + content: "Long press and drag to reorder.".tl, + ); + }, + ), ), + Tooltip( + message: "Reverse".tl, + child: IconButton( + icon: const Icon(Icons.swap_vert), + onPressed: () { + setState(() { + comics = comics.reversed.toList(); + changed = true; + }); + }, + ), + ) ], ), body: ReorderableBuilder( diff --git a/pubspec.lock b/pubspec.lock index 1d4a5da..5deaedf 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -45,10 +45,10 @@ packages: dependency: transitive description: name: async - sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 + sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" url: "https://pub.dev" source: hosted - version: "2.12.0" + version: "2.13.0" battery_plus: dependency: "direct main" description: @@ -190,10 +190,10 @@ packages: dependency: transitive description: name: fake_async - sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" + sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.3.3" ffi: dependency: transitive description: @@ -524,10 +524,10 @@ packages: dependency: "direct main" description: name: intl - sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf + sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5" url: "https://pub.dev" source: hosted - version: "0.19.0" + version: "0.20.2" io: dependency: transitive description: @@ -548,10 +548,10 @@ packages: dependency: transitive description: name: leak_tracker - sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec + sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" url: "https://pub.dev" source: hosted - version: "10.0.8" + version: "10.0.9" leak_tracker_flutter_testing: dependency: transitive description: @@ -1037,10 +1037,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" + sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 url: "https://pub.dev" source: hosted - version: "14.3.1" + version: "15.0.0" web: dependency: transitive description: