Android的LiveData允许在Activity处于活动状态时更新用户界面。因此,如果在Activity暂停时后台操作已经完成,Activity不会收到通知,因此应用不会崩溃。Flutter能执行同样的行为吗?
ct3nt3jp1#
对于那些对LiveData在其他场景中的等价物感兴趣的人,我向您介绍StreamController:
class ExampleViewModel { StreamController<bool> loggedInStream = StreamController<bool>(); logIn() { loggedInStream.add(true); } } class ExampleScreen extends StatefulWidget { @override State<StatefulWidget> createState() => ExampleScreenState(); } class ExampleScreenState extends State<ExampleScreen> { ExampleViewModel _viewModel; BuildContext _ctx; @override void initState() { super.initState(); _viewModel = ExampleViewModel() _viewModel.loggedInStream.stream.listen( (loggedIn) { if ( loggedIn != null && loggedIn ) { Navigator.of(_ctx).pushReplacementNamed("/home"); } }); } @override Widget build(BuildContext context) { _ctx = context; var loginBtn = RaisedButton( onPressed: _viewModel.logIn(true), child: Text( "LOGIN", style: new TextStyle( fontSize: 24.0, ) ), color: Colors.green, textColor: Colors.white, ); return loginBtn; } @override void dispose() { super.dispose(); _viewModel.loggedInStream.close(); } }
您可以像订阅LiveData一样订阅它,使用:
loggedInStream.stream.listen( (data) { code } )
并且您应该清除dispose中的侦听器以避免内存泄漏:
loggedInStream.close()
这段代码主要做以下事情:1.创建带有按钮的屏幕。1.收听流(观察LiveData)。1.单击该按钮时,将更改值。1.监听器(观察器)被触发。1.启动新屏幕。
agxfikkp2#
您可以使用WidgetsBindingObserver来侦听应用程序状态。
WidgetsBindingObserver
class AppLifecycleReactor extends StatefulWidget { const AppLifecycleReactor({ Key key }) : super(key: key); @override _AppLifecycleReactorState createState() => new _AppLifecycleReactorState(); } class _AppLifecycleReactorState extends State<AppLifecycleReactor> with WidgetsBindingObserver { @override void initState() { super.initState(); WidgetsBinding.instance.addObserver(this); } @override void dispose() { WidgetsBinding.instance.removeObserver(this); super.dispose(); } AppLifecycleState _notification; @override void didChangeAppLifecycleState(AppLifecycleState state) { setState(() { _notification = state; }); } @override Widget build(BuildContext context) { return new Text('Last notification: $_notification'); } }
62lalag43#
简单:Flutterx Live Data无需观察App生命周期:小部件是建立只有当应用程序是恢复这个库完美地集成了LiveData的概念,也是有据可查的。是开发的Flutter1.14.x-dev你需要掌握Flutter通道的时刻
mrwjdhj34#
抱歉,聚会迟到了,我和同事开发了一个模仿安卓实时数据的库,在flutter上。看看吧:https://pub.dev/packages/stream_live_data
4条答案
按热度按时间ct3nt3jp1#
对于那些对LiveData在其他场景中的等价物感兴趣的人,我向您介绍StreamController:
您可以像订阅LiveData一样订阅它,使用:
并且您应该清除dispose中的侦听器以避免内存泄漏:
这段代码主要做以下事情:
1.创建带有按钮的屏幕。
1.收听流(观察LiveData)。
1.单击该按钮时,将更改值。
1.监听器(观察器)被触发。
1.启动新屏幕。
agxfikkp2#
您可以使用
WidgetsBindingObserver
来侦听应用程序状态。62lalag43#
简单:Flutterx Live Data
无需观察App生命周期:小部件是建立只有当应用程序是恢复这个库完美地集成了LiveData的概念,也是有据可查的。是开发的Flutter1.14.x-dev你需要掌握Flutter通道的时刻
mrwjdhj34#
抱歉,聚会迟到了,我和同事开发了一个模仿安卓实时数据的库,在flutter上。看看吧:https://pub.dev/packages/stream_live_data