diff --git a/lib/foundation/comic_source/models.dart b/lib/foundation/comic_source/models.dart index 9989097..5e2bc62 100644 --- a/lib/foundation/comic_source/models.dart +++ b/lib/foundation/comic_source/models.dart @@ -169,7 +169,9 @@ class ComicDetails with HistoryMixin { static Map> _generateMap(Map map) { var res = >{}; map.forEach((key, value) { - res[key] = List.from(value); + if (value is List) { + res[key] = List.from(value); + } }); return res; } diff --git a/lib/foundation/comic_source/parser.dart b/lib/foundation/comic_source/parser.dart index b27e9fa..6a2e590 100644 --- a/lib/foundation/comic_source/parser.dart +++ b/lib/foundation/comic_source/parser.dart @@ -1035,9 +1035,12 @@ class ComicSourceParser { var res = JsEngine().runCode(""" ComicSource.sources.$_key.comic.onClickTag(${jsonEncode(namespace)}, ${jsonEncode(tag)}) """); - var r = Map.from(res); + if (res is! Map) { + return null; + } + var r = Map.from(res); r.removeWhere((key, value) => value == null); - return Map.from(r); + return PageJumpTarget.parse(_key!, r); }; } diff --git a/lib/foundation/comic_source/types.dart b/lib/foundation/comic_source/types.dart index fbacc8f..d75c3eb 100644 --- a/lib/foundation/comic_source/types.dart +++ b/lib/foundation/comic_source/types.dart @@ -41,7 +41,7 @@ typedef LikeCommentFunc = Future> Function( typedef VoteCommentFunc = Future> Function( String comicId, String? subId, String commentId, bool isUp, bool isCancel); -typedef HandleClickTagEvent = Map Function( +typedef HandleClickTagEvent = PageJumpTarget? Function( String namespace, String tag); /// [rating] is the rating value, 0-10. 1 represents 0.5 star. diff --git a/lib/pages/comic_details_page/actions.dart b/lib/pages/comic_details_page/actions.dart index aaa68bc..b71a0bf 100644 --- a/lib/pages/comic_details_page/actions.dart +++ b/lib/pages/comic_details_page/actions.dart @@ -294,14 +294,9 @@ abstract mixin class _ComicPageActions { } void onTapTag(String tag, String namespace) { - var config = comicSource.handleClickTagEvent?.call(namespace, tag) ?? - { - 'action': 'search', - 'keyword': tag, - }; + var target = comicSource.handleClickTagEvent?.call(namespace, tag); var context = App.mainNavigatorKey!.currentContext!; - var target = PageJumpTarget.parse(comicSource.key, config); - target.jump(context); + target?.jump(context); } void showMoreActions() {