flutter - Flutter 中的 Android LiveData 相当于什么?

标签 flutter android-livedata

Android 的 LiveData 允许在 Activity 处于事件状态时更新 UI。因此,如果在 Activity 暂停时后台操作已完成,则 Activity 不会收到通知,因此应用程序不会崩溃。 Flutter 可以执行相同的行为吗?

最佳答案

对于对其他场景的 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. 创建一个带有按钮的屏幕。
  2. 收听流(观察 LiveData)。
  3. 当您点击按钮时,它会更改值。
  4. 监听器(观察器)被触发。
  5. 启动新屏幕。

关于flutter - Flutter 中的 Android LiveData 相当于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50194163/

相关文章:

android - 如何过滤Livedata或Rxjava flowable

android - 我的数据库应该存储在 Flutter 中的什么位置?

android - Flow LifeCycle 是否可以识别为 LiveData?

MutableLiveData 的 Android XML 绑定(bind)不起作用

java - 如何使用 kotlin 在内部存储中创建文件夹和文件

kotlin - LiveData的正确实现方式

android - 为什么 LiveData 观察者会被新附加的观察者触发两次

flutter - 如何将两个列表合并为一个具有特定顺序的列表?

flutter - 从浏览量页面中删除填充

flutter - 如何使用 flutter 禁用键盘中的表情符号按钮