使用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
相关产品推荐
相关产品推荐

