diff --git a/add_to_app/multiple_flutters/multiple_flutters_module/lib/main.dart b/add_to_app/multiple_flutters/multiple_flutters_module/lib/main.dart index 71c6a37af457548397e99c402f723279ab038a93..0a630c3769a574e4f205b154095f67103c83bf6b 100644 --- a/add_to_app/multiple_flutters/multiple_flutters_module/lib/main.dart +++ b/add_to_app/multiple_flutters/multiple_flutters_module/lib/main.dart @@ -45,7 +45,7 @@ class MyHomePage extends StatefulWidget { State createState() => _MyHomePageState(); } -class _MyHomePageState extends State { +class _MyHomePageState extends State with WidgetsBindingObserver { int? _counter = 0; late MethodChannel _channel; @@ -63,6 +63,19 @@ class _MyHomePageState extends State { throw Exception('not implemented ${call.method}'); } }); + WidgetsBinding.instance.addObserver(this); + } + + @override + void didChangeAppLifecycleState(AppLifecycleState state) { + super.didChangeAppLifecycleState(state); + debugPrint('AppLifecycleState State: $state'); + } + + @override + void dispose() { + super.dispose(); + WidgetsBinding.instance.removeObserver(this); } void _incrementCounter() { diff --git a/add_to_app/multiple_flutters/multiple_flutters_ohos/entry/src/main/ets/pages/DoubleFlutterPage.ets b/add_to_app/multiple_flutters/multiple_flutters_ohos/entry/src/main/ets/pages/DoubleFlutterPage.ets index e9b55234f3bc1e74dd38177d0a1b8edc18a64bf0..21481f689b40dbab9f40e39248be6668c9c89372 100644 --- a/add_to_app/multiple_flutters/multiple_flutters_ohos/entry/src/main/ets/pages/DoubleFlutterPage.ets +++ b/add_to_app/multiple_flutters/multiple_flutters_ohos/entry/src/main/ets/pages/DoubleFlutterPage.ets @@ -44,6 +44,20 @@ struct DoubleFlutterPage { this.bottomBindings.detach(); } + onPageShow(): void { + this.topBindings.getEngine()?.getLifecycleChannel()?.appIsResumed(); + this.topBindings.getEngine()?.getLifecycleChannel()?.aWindowIsFocused(); + this.bottomBindings.getEngine()?.getLifecycleChannel()?.appIsResumed(); + this.bottomBindings.getEngine()?.getLifecycleChannel()?.aWindowIsFocused(); + } + + onPageHide(): void { + this.topBindings.getEngine()?.getLifecycleChannel()?.noWindowsAreFocused(); + this.topBindings.getEngine()?.getLifecycleChannel()?.appIsPaused(); + this.bottomBindings.getEngine()?.getLifecycleChannel()?.noWindowsAreFocused(); + this.bottomBindings.getEngine()?.getLifecycleChannel()?.appIsPaused(); + } + build() { Column() { FlutterPage({ viewId: this.topViewId, xComponentType: XComponentType.TEXTURE }) diff --git a/add_to_app/multiple_flutters/multiple_flutters_ohos/entry/src/main/ets/pages/EngineBindings.ets b/add_to_app/multiple_flutters/multiple_flutters_ohos/entry/src/main/ets/pages/EngineBindings.ets index 036ae4d8947946b5df6101718b5cae4e59266431..64c3218df0eb812762e6267b4168cf07038f4c21 100644 --- a/add_to_app/multiple_flutters/multiple_flutters_ohos/entry/src/main/ets/pages/EngineBindings.ets +++ b/add_to_app/multiple_flutters/multiple_flutters_ohos/entry/src/main/ets/pages/EngineBindings.ets @@ -52,6 +52,10 @@ export class EngineBindings implements DataModelObserver { return this.flutterView.getId(); } + getEngine() { + return this.engine; + } + async attach() { if (this.engine) { Log.i("Multi->attach", "engine is "); diff --git a/add_to_app/multiple_flutters/multiple_flutters_ohos/entry/src/main/ets/pages/SingleFlutterPage.ets b/add_to_app/multiple_flutters/multiple_flutters_ohos/entry/src/main/ets/pages/SingleFlutterPage.ets index 3a4aa0bd2a0d22bfa86d6ef8ab911a5615674741..3a04e2370f3a948424fa75591622b6564f8b7da9 100644 --- a/add_to_app/multiple_flutters/multiple_flutters_ohos/entry/src/main/ets/pages/SingleFlutterPage.ets +++ b/add_to_app/multiple_flutters/multiple_flutters_ohos/entry/src/main/ets/pages/SingleFlutterPage.ets @@ -43,6 +43,18 @@ struct SingleFlutterPage { this.engineBindings.detach(); } + // Navigation的生命周期是onShown + onPageShow(): void { + this.engineBindings.getEngine()?.getLifecycleChannel()?.appIsResumed(); + this.engineBindings.getEngine()?.getLifecycleChannel()?.aWindowIsFocused(); + } + + // Navigation的生命周期是onHidden + onPageHide(): void { + this.engineBindings.getEngine()?.getLifecycleChannel()?.noWindowsAreFocused(); + this.engineBindings.getEngine()?.getLifecycleChannel()?.appIsPaused(); + } + build() { Column() { Row() {