我在用Flutter的Provider做状态管理,修改了数据但页面没重新构建,明明调用了notifyListeners()啊。
我的模型类是这样写的:
class CounterModel with ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
}
在Widget里用Consumer包裹了Text,但点击按钮后数字就是不更新,是不是哪里漏了?
第一个是Consumer的位置不对,必须包裹需要更新的widget,不能只包父组件。比如这样写是对的:
第二个是没在顶层用ChangeNotifierProvider。你得确保widget树顶层有这样的代码:
第三个是用了context不对。如果在回调里调用notifyListeners(),得确保context是同一个。可以试试把context存成成员变量或者用Provider.of
另外检查下是不是在build方法里创建了新的model实例,这样每次都会覆盖状态。Provider应该在widget树顶层初始化一次就行。