From 1abf9c151e84f7e4efca80f018f0e6006b3fee03 Mon Sep 17 00:00:00 2001 From: nyne Date: Sat, 18 Jan 2025 16:24:46 +0800 Subject: [PATCH] Fix setTimeout --- assets/init.js | 7 +++++++ lib/foundation/js_engine.dart | 6 ++++++ lib/pages/comic_source_page.dart | 13 +++++++++---- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/assets/init.js b/assets/init.js index 242cff1..f87f487 100644 --- a/assets/init.js +++ b/assets/init.js @@ -4,6 +4,13 @@ Venera JavaScript Library This library provides a set of APIs for interacting with the Venera app. */ +function setTimeout(callback, delay) { + sendMessage({ + method: 'delay', + time: delay, + }).then(callback); +} + /// encode, decode, hash, decrypt let Convert = { /** diff --git a/lib/foundation/js_engine.dart b/lib/foundation/js_engine.dart index 1dcfca8..bc0d8a6 100644 --- a/lib/foundation/js_engine.dart +++ b/lib/foundation/js_engine.dart @@ -172,6 +172,12 @@ class JsEngine with _JSEngineApi { { return ComicSource.find(message["key"])!.isLogged; } + // temporary solution for [setTimeout] function + // TODO: implement [setTimeout] in quickjs project + case "delay": + { + return Future.delayed(Duration(milliseconds: message["time"])); + } } } return null; diff --git a/lib/pages/comic_source_page.dart b/lib/pages/comic_source_page.dart index 72063b3..c642ec0 100644 --- a/lib/pages/comic_source_page.dart +++ b/lib/pages/comic_source_page.dart @@ -8,6 +8,7 @@ import 'package:venera/foundation/comic_source/comic_source.dart'; import 'package:venera/foundation/log.dart'; import 'package:venera/network/app_dio.dart'; import 'package:venera/utils/ext.dart'; +import 'package:venera/utils/image.dart'; import 'package:venera/utils/io.dart'; import 'package:venera/utils/translations.dart'; @@ -705,10 +706,14 @@ class _CallbackSettingState extends State<_CallbackSetting> { setState(() { isLoading = true; }); - await result; - setState(() { - isLoading = false; - }); + try { + await result; + } + finally { + setState(() { + isLoading = false; + }); + } } }