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()
这段代码主要做了以下事情:
- 创建一个带有按钮的屏幕。
- 收听流(观察 LiveData)。
- 当您点击按钮时,它会更改值。
- 监听器(观察器)被触发。
- 启动新屏幕。
关于flutter - Flutter 中的 Android LiveData 相当于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50194163/