Flutter使用ChangeNotifierProvider提示MyUser不符合ChangeNotifier类型约束报错
问题解决方法
错误根因
ChangeNotifierProvider 的泛型约束要求传入的类型必须是 ChangeNotifier 的子类/实现类,你当前的 MyUser 类没有继承或混入 ChangeNotifier,因此触发边界校验报错。
修复步骤
1. 调整MyUser类定义
给MyUser类混入或继承ChangeNotifier,如果有修改类属性的需求,在属性变更后调用notifyListeners()通知监听者更新:
import 'package:flutter/foundation.dart'; // 可选:用extends继承,或者用with混入ChangeNotifier class MyUser with ChangeNotifier { String uid; MyUser({required this.uid}); // 示例:属性修改方法 void modifyUid(String newUid) { uid = newUid; notifyListeners(); } }
2. 优化冗余代码
你当前的实现里外层包裹的普通Provider属于冗余逻辑,和内层ChangeNotifierProvider重复提供了MyUser实例,可直接删除外层冗余的Provider:
class SettingsForm extends StatefulWidget { static Widget getWidget() { return ChangeNotifierProvider( create: (BuildContext context) => MyUser(uid: ''), builder: (_, __) => SettingsForm(), ); } }
其他可选方案
如果你不需要监听MyUser的属性变化、不需要通知UI更新,完全不需要使用ChangeNotifierProvider,直接用普通Provider提供MyUser实例即可,也不会触发该报错。
内容的提问来源于stack exchange,提问作者Mike Osborn
相关产品推荐
相关产品推荐

