Flutter中Android LiveData的等价物是什么?

n7taea2i  于 2022-12-30  发布在  Flutter
关注(0)|答案(4)|浏览(144)

Android的LiveData允许在Activity处于活动状态时更新用户界面。因此,如果在Activity暂停时后台操作已经完成,Activity不会收到通知,因此应用不会崩溃。Flutter能执行同样的行为吗?

ct3nt3jp

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.启动新屏幕。

agxfikkp

agxfikkp2#

您可以使用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');
  }
}
62lalag4

62lalag43#

简单:Flutterx Live Data
无需观察App生命周期:小部件是建立只有当应用程序是恢复这个库完美地集成了LiveData的概念,也是有据可查的。是开发的Flutter1.14.x-dev你需要掌握Flutter通道的时刻

mrwjdhj3

mrwjdhj34#

抱歉,聚会迟到了,我和同事开发了一个模仿安卓实时数据的库,在flutter上。看看吧:https://pub.dev/packages/stream_live_data

相关问题