gpt4 book ai didi

flutter - 我如何在 flutter 中听取 UIApplication 生命周期 iOS

转载 作者:行者123 更新时间:2023-12-01 21:55:21 27 4
gpt4 key购买 nike

我想检测我的 iOS 应用写入 flutter 移动到后台并进入前台。我习惯于 WidgetsBindingObserver 来监听 flutter 中的生命周期。但它并不完全符合我的期望。当我在 flutter app lifecycle trigger AppLifecycleState.paused 中推送 native Controller 时,但我的应用程序正在运行。有人刚遇到这个问题吗?以及你解决问题的方式。谢谢

  @override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
if(state == AppLifecycleState.paused) {
_viewModel.applicationMoveToBackground();

} else if(state == AppLifecycleState.resumed) {
_viewModel.applicationMoveToForeground();
}
}

最佳答案

我通过使用 FlutterBasicMessageChannel 发出 iOS UIApplication 生命周期来 flutter 解决了这个问题。在 iOS Runner 应用中:

import UIKit
import Flutter

@UIApplicationMain@objc class AppDelegate: FlutterAppDelegate {

var applicationLifeCycleChannel: FlutterBasicMessageChannel!

override func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
GeneratedPluginRegistrant.register(with: self)

applicationLifeCycleChannel = FlutterBasicMessageChannel(
name: "applicationLifeCycle",
binaryMessenger: (window.rootViewController as! FlutterViewController).binaryMessenger,
codec: FlutterStringCodec.sharedInstance())
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}

override func applicationWillTerminate(_ application: UIApplication) {
applicationLifeCycleChannel.sendMessage("applicationWillTerminate")
}

override func applicationWillEnterForeground(_ application: UIApplication) {
applicationLifeCycleChannel.sendMessage("applicationWillEnterForeground")
}

override func applicationDidEnterBackground(_ application: UIApplication) {
applicationLifeCycleChannel.sendMessage("applicationDidEnterBackground")
}
}

在 Flutter 应用中:

 static const applicationLifecycleChannel = BasicMessageChannel<String>('applicationLifeCycle', StringCodec());
static const kApplicationWillTerminate = 'applicationWillTerminate';
static const kApplicationWillEnterForeground = 'applicationWillEnterForeground';
static const kApplicationDidEnterBackground = 'applicationDidEnterBackground';

@override
void initState() {
applicationLifecycleChannel.setMessageHandler((message) async {
switch(message) {
case kApplicationWillTerminate:
break;
case kApplicationWillEnterForeground:
_viewModel.applicationMoveToForeground();
break;
case kApplicationDidEnterBackground:
_viewModel.applicationMoveToBackground();
break;
default:
break;
}
return message;
});
super.initState();
}

关于flutter - 我如何在 flutter 中听取 UIApplication 生命周期 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58065632/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com