Provider状态更新后UI为什么不刷新?

长孙之芳 阅读 53

我在用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……

我来解答 赞 4 收藏
二维码
手机扫码查看
1 条解答
Mr-米娅
Mr-米娅 Lv1
问题应该出在Provider的绑定环节没做好。虽然你调用了notifyListeners(),但可能上层widget没有正确监听这个provider。

检查两个地方:
第一,确保顶层widget用ChangeNotifierProvider包好了。比如:
void main() {
runApp(
ChangeNotifierProvider(
create: (context) => CounterModel(),
child: MyApp(),
),
);
}


第二,看看Consumer的用法对不对。虽然你说用了Consumer,但可能放错位置了。正确用法应该把需要刷新的widget包进去:
Consumer<CounterModel>(
builder: (context, model, child) {
return Text('${model.count}');
},
)


常见坑点:
1. 在main.dart里忘了包裹Provider
2. 把Consumer包在了不会刷新的父widget上
3. 同一个widget树里用了多个Provider导致冲突

如果还不行,建议在increment()方法里加个print,确认确实调用了notifyListeners(),然后检查flutter run的输出看有没有报错。
点赞
2026-03-09 20:16