diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbility.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbility.ets index a6e9dee5d15c2d2b59b85ec4182619e0612d0a3b..338c28452a52969fbb6d776f4669f0e033395254 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbility.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbility.ets @@ -162,6 +162,7 @@ export class FlutterAbility extends UIAbility implements Host { Log.e(TAG, 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? ''); return; } + this.flutterView?.onWindowCreated(); Log.i(TAG, 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? ''); }); @@ -226,9 +227,7 @@ export class FlutterAbility extends UIAbility implements Host { } configureFlutterEngine(flutterEngine: FlutterEngine) { - let _UIContext = this.mainWindow?.getUIContext(); - this.delegate?.setUIContext(_UIContext); - this.delegate?.sendSettings(); + } cleanUpFlutterEngine(flutterEngine: FlutterEngine) { diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbilityAndEntryDelegate.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbilityAndEntryDelegate.ets index b74def84c5fd7b69a4cec0bf9ea9379888e7770c..733a4f24d4919eb9a26646fd50a91488eb4aeadd 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbilityAndEntryDelegate.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterAbilityAndEntryDelegate.ets @@ -32,9 +32,7 @@ import { FlutterPlugin } from '../engine/plugins/FlutterPlugin'; import FlutterEngineCache from '../engine/FlutterEngineCache'; import FlutterEngineGroupCache from '../engine/FlutterEngineGroupCache'; import FlutterEngineGroup, { Options } from '../engine/FlutterEngineGroup'; -import Settings from './Settings'; import FlutterNapi from '../engine/FlutterNapi'; -import { UIContext } from '@ohos.arkui.UIContext'; import { FlutterView } from '../../view/FlutterView'; import FlutterManager from './FlutterManager'; import router from '@ohos.router'; @@ -54,11 +52,9 @@ class FlutterAbilityAndEntryDelegate implements ExclusiveAppComponent flutterEngine?: FlutterEngine | null; platformPlugin?: PlatformPlugin; private context?: common.Context; - private uiContext?: UIContext | undefined; private textInputPlugin?: TextInputPlugin; private isFlutterEngineFromHostOrCache: boolean = false; private engineGroup?: FlutterEngineGroup; - private settings?: Settings; private isHost:boolean = false; private flutterView?: FlutterView @@ -93,7 +89,6 @@ class FlutterAbilityAndEntryDelegate implements ExclusiveAppComponent this.isAttached = true; if (this.flutterEngine) { this.textInputPlugin = new TextInputPlugin(this.flutterEngine.getTextInputChannel()!); - this.settings = new Settings(this.flutterEngine.getSettingsChannel()!); this.flutterEngine.getSystemLanguages(); } if (this.flutterEngine && this.flutterView) { @@ -464,19 +459,6 @@ class FlutterAbilityAndEntryDelegate implements ExclusiveAppComponent this.flutterEngine?.getPlugins()?.remove(plugin.getUniqueClassName()) } - sendSettings(): void { - if (this.uiContext != undefined) { - this.settings?.sendSettings(this.uiContext.getMediaQuery()); - } else { - Log.e(TAG, "UIContext is null, cannot send Settings!"); - } - - } - - setUIContext(uiContext: UIContext | undefined): void { - this.uiContext = uiContext; - } - isFlutterEngineFromHost(): boolean { return this.isFlutterEngineFromHostOrCache; } diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterEntry.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterEntry.ets index db7a17091aafb110e2b6c17040606a62f6dbb582..a8b4845d0f176a8b1978bda139a497443a37e077 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterEntry.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/embedding/ohos/FlutterEntry.ets @@ -56,6 +56,7 @@ export default class FlutterEntry implements Host { if (this.hasInit == false) { this.delegate = new FlutterAbilityAndEntryDelegate(this); this.flutterView = this.delegate?.createView(this.context); + this.flutterView?.onWindowCreated(); await this?.delegate?.onAttach(this.context); Log.i(TAG, 'onAttach end'); this?.delegate?.platformPlugin?.setUIAbilityContext(this.uiAbility!!.context); diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/view/FlutterView.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/view/FlutterView.ets index 053dafe290090da82750371f1671970ea990d404..e19ba2393ce14449f04e9717453e00a9fff7d499 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/view/FlutterView.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/view/FlutterView.ets @@ -21,6 +21,7 @@ import window from '@ohos.window'; import KeyboardManager from '../embedding/ohos/KeyboardManager'; import MouseCursorPlugin from '../plugin/mouse/MouseCursorPlugin'; import Any from '../plugin/common/Any'; +import Settings from '../embedding/ohos/Settings'; const TAG = "FlutterView"; @@ -53,6 +54,8 @@ export class FlutterView { private keyboardManager: KeyboardManager | null = null; private mainWindow: window.Window private mouseCursorPlugin?: MouseCursorPlugin; + private uiContext?: UIContext | undefined; + private settings?: Settings; constructor(viewId: string, context: Context) { this.id = viewId @@ -121,6 +124,8 @@ export class FlutterView { this.updateViewportMetrics() let windowId = this.mainWindow?.getWindowProperties()?.id this.mouseCursorPlugin = new MouseCursorPlugin(windowId, this.flutterEngine?.getMouseCursorChannel()!); + this.settings = new Settings(this.flutterEngine.getSettingsChannel()!); + this.sendSettings(); } detachFromFlutterEngine(): void { @@ -137,6 +142,22 @@ export class FlutterView { this.keyboardManager = null; } + onWindowCreated() { + Log.d(TAG, "received onwindowCreated."); + let _UIContext = this.mainWindow?.getUIContext(); + this.uiContext = _UIContext; + this.sendSettings(); + Log.d(TAG, "uiContext init and sendSettings finished."); + } + + sendSettings(): void { + if (this.uiContext != undefined && this.isAttachedToFlutterEngine()) { + this.settings?.sendSettings(this.uiContext.getMediaQuery()); + } else { + Log.e(TAG, "UIContext is null, cannot send Settings!"); + } + } + onSurfaceCreated() { this.isSurfaceAvailableForRendering = true; if (this.isAttachedToFlutterEngine()) {