作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想检测我的 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/
我在 Android 中创建了一个应用程序小部件,并想向其添加一些基于手势的功能。例如:当用户向上滑动时会显示一组新数据。AFAIK,AppWidgets 不支持手势,但我见过具有类似功能的小部件(例
我正在为我的网络应用程序使用 Bootstrap 和 Angular 2 (v4)。我想听取可见性更改指令中的一个元素。我的元素有一个可以使用 hidden-sm-up 隐藏其子元素的父元素,每次隐藏
我是一名优秀的程序员,十分优秀!