Flutter中NotifyListeners不生效,新增SQFlite数据后TextField未更新问题
问题根因
你的代码确实存在数据同步逻辑缺失的问题:
- 界面展示的数值来源于
BmiListViewModel中存储的bmiVm列表,该列表仅在调用readAllBmi方法时才会从数据库拉取最新数据更新 - 你当前的
addNewBmi方法仅完成了数据库写入操作,没有主动触发readAllBmi更新本地列表,仅调用notifyListeners()只能通知界面重绘,但数据源没有变化,所以界面不会更新 - 重启应用后ViewModel会重新初始化,自动拉取全量数据,此时才能读到新写入的内容
修复方案
修改BmiListViewModel中的addNewBmi方法,写入数据库完成后调用readAllBmi拉取最新数据即可:
addNewBmi(Bmi bmi) async { log(bmi.value); await DbHelper.instance.create(bmi); // 新增该行代码,拉取最新数据更新列表并触发界面刷新 await readAllBmi(); }
注:readAllBmi方法内部已经实现了bmiVm列表更新和notifyListeners()调用逻辑,不需要额外写其他代码,修改完成后点击添加按钮即可同步刷新界面展示的数值。
内容的提问来源于stack exchange,提问作者user16712640
相关产品推荐
相关产品推荐

