Provider状态更新后UI为什么不刷新?
我在用Flutter的Provider做状态管理,修改了model里的数据,但页面没重新build,这是为啥?
我试过调用notifyListeners(),也确认数据确实变了,但UI就是不动。下面是我的Provider代码:
class CounterModel with ChangeNotifier {
int _count = 0;
int get count => _count;
void increment() {
_count++;
notifyListeners();
}
}
然后在页面里用Consumer<CounterModel>包着Text,但数字一直显示0……
检查两个地方:
第一,确保顶层widget用ChangeNotifierProvider包好了。比如:
第二,看看Consumer的用法对不对。虽然你说用了Consumer,但可能放错位置了。正确用法应该把需要刷新的widget包进去:
常见坑点:
1. 在main.dart里忘了包裹Provider
2. 把Consumer包在了不会刷新的父widget上
3. 同一个widget树里用了多个Provider导致冲突
如果还不行,建议在increment()方法里加个print,确认确实调用了notifyListeners(),然后检查flutter run的输出看有没有报错。