You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MultiProvider时调用notifyListeners后Flutter单选按钮未更新问题

问题根因

你在初始化Provider时使用了基础的Provider类,该类仅用于对外提供静态实例,不会监听ChangeNotifier子类发出的状态更新通知。即使你在Post类中调用了notifyListeners(),UI层也收不到更新信号,因此不会重绘单选按钮组件。

修复方案

步骤1:替换Provider注册类型

将入口文件中继承了ChangeNotifier的类的注册方式,从普通Provider替换为ChangeNotifierProvider,修改后代码如下:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider<Post>(
          create: (context) => Post(),
        ),
        ChangeNotifierProvider<Content>(
          create: (context) => Content(),
        ),
      ],
      child: MaterialApp(
      ),
    );
  }
}

可选优化:缩小组件重建范围

你可以用Consumer包裹单选按钮组件,避免所在页面的其他无关组件跟随状态更新重绘,优化性能,示例代码如下:

ListTile(
  leading: Icon(Icons.edit_outlined),
  title: Text('Post now'),
  trailing: Consumer<Post>(
    builder: (context, postState, child) => Radio<PostOption>(
      value: PostOption.now,
      groupValue: postState.postOption,
      onChanged: (value) {
        postState.choosePostOption(value);
      },
    ),
  ),
)

内容的提问来源于stack exchange,提问作者Ammar Mohamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:48:03