Flutter中没有LiveData机制,但是可以利用Selector或者Consumer人为加工出一种LiveData效果的写法。假设逻辑是viewmodel执行完某段逻辑,通知页面回退到上个画面,用Cosumer来进行举例:
Dart ui 画面中,使用Consumer包裹需要更新的节点。Consumer包裹要接收通知要执行的逻辑,包裹的返回值是一个不可见的布局,这里用了SizeBox:
Consumer<ForgetPwdViewModel>(
builder: (context, value, child) {
if (context.watch<ForgetPwdViewModel>().isNeedCloseView) {
context
.watch<ForgetPwdViewModel>()
.revertCloseViewFlag();
//back to login
Future(() { Navigator.of(context).pop(); });
return SizedBox(height: 30);
} else {
return SizedBox(height: 30);
}
})
viewModel中:
设置好变量,改变后调用 notifyListeners刷新:
//画面を閉じる必要がありますか
bool isNeedCloseView = false;
void closeViewValue(){
isNeedCloseView = true;
notifyListeners();
}