From 52bffd4030f74e0869b01f04476f4cf0483ee989 Mon Sep 17 00:00:00 2001 From: 21pages Date: Wed, 9 Aug 2023 14:59:52 +0800 Subject: [PATCH] fix waiting for image, should not await dialogManager.show Signed-off-by: 21pages --- flutter/lib/models/model.dart | 27 +++++++++++++-------------- src/flutter.rs | 8 ++++++++ src/flutter_ffi.rs | 6 ++++++ 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/flutter/lib/models/model.dart b/flutter/lib/models/model.dart index 9fa73e1b7..e54bc0d07 100644 --- a/flutter/lib/models/model.dart +++ b/flutter/lib/models/model.dart @@ -425,19 +425,18 @@ class FfiModel with ChangeNotifier { closeConnection(); } - Future.delayed(Duration.zero, () async { - await dialogManager.show( - (setState, close, context) => CustomAlertDialog( - title: null, - content: SelectionArea(child: msgboxContent(type, title, text)), - actions: [ - dialogButton("Cancel", onPressed: onClose, isOutline: true) - ], - onCancel: onClose), - tag: '$sessionId-waiting-for-image', - ); - _waitForImageDialogShow[sessionId] = true; - }); + dialogManager.show( + (setState, close, context) => CustomAlertDialog( + title: null, + content: SelectionArea(child: msgboxContent(type, title, text)), + actions: [ + dialogButton("Cancel", onPressed: onClose, isOutline: true) + ], + onCancel: onClose), + tag: '$sessionId-waiting-for-image', + ); + _waitForImageDialogShow[sessionId] = true; + bind.sessionOnWaitingForImageDialogShow(sessionId: sessionId); } _updateSessionWidthHeight(SessionID sessionId) { @@ -1902,7 +1901,7 @@ Future initializeCursorAndCanvas(FFI ffi) async { } clearWaitingForImage(OverlayDialogManager? dialogManager, SessionID sessionId) { - final durations = [100, 500, 1000, 2000]; + final durations = [0, 100, 500, 1000, 2000]; for (var duration in durations) { Future.delayed(Duration(milliseconds: duration), () { dialogManager?.dismissByTag('$sessionId-waiting-for-image'); diff --git a/src/flutter.rs b/src/flutter.rs index 88290897d..52190ce2e 100644 --- a/src/flutter.rs +++ b/src/flutter.rs @@ -345,6 +345,14 @@ impl FlutterHandler { *self.notify_rendered.write().unwrap() = false; self.renderer.write().unwrap().set_size(width, height); } + + pub fn on_waiting_for_image_dialog_show(&self) { + #[cfg(any(feature = "flutter_texture_render"))] + { + *self.notify_rendered.write().unwrap() = false; + } + // rgba array render will notify every frame + } } impl InvokeUiSession for FlutterHandler { diff --git a/src/flutter_ffi.rs b/src/flutter_ffi.rs index 4a12ee19f..122af0c2b 100644 --- a/src/flutter_ffi.rs +++ b/src/flutter_ffi.rs @@ -1266,6 +1266,12 @@ pub fn session_change_prefer_codec(session_id: SessionID) { } } +pub fn session_on_waiting_for_image_dialog_show(session_id: SessionID) { + if let Some(session) = SESSIONS.read().unwrap().get(&session_id) { + session.ui_handler.on_waiting_for_image_dialog_show(); + } +} + pub fn main_set_home_dir(_home: String) { #[cfg(any(target_os = "android", target_os = "ios"))] {