ChangeNotifierProxyProvider传入3个类型参数报错问题咨询
解决ChangeNotifierProxyProvider多依赖报错的问题
这个报错逻辑很直白——ChangeNotifierProxyProvider本身是仅支持单个依赖Provider的快捷封装类(它其实是ChangeNotifierProxyProvider1的别名),所以你传入3个类型参数必然会触发类型不匹配的错误。
当需要让一个ChangeNotifier同时依赖多个其他Provider时,Flutter的provider库提供了带数字后缀的系列类,比如ChangeNotifierProxyProvider2(对应2个依赖)、ChangeNotifierProxyProvider3(对应3个依赖),以此类推。
正确的实现代码
把你的代码替换成ChangeNotifierProxyProvider2即可,注意它的类型参数顺序是:第一个依赖类型、第二个依赖类型、目标ChangeNotifier类型,同时update回调会自动传入这两个依赖的实例:
ChangeNotifierProxyProvider2<Auth, Mese, Sali>( // 必须提供create方法生成初始的Sali实例 create: (BuildContext ctx) => Sali('', '', []), update: (ctx, auth, mese, prevData) => Sali( auth.token, auth.userId, prevData == null ? [] : prevData.sali, // 这里你也可以直接使用mese中的数据,比如 mese.someProperty ), )
补充说明
- 如果后续需要依赖3个Provider,就用
ChangeNotifierProxyProvider3,provider库最多支持到ChangeNotifierProxyProvider6。 - 一定要保证
create方法返回合法的初始实例,避免在依赖Provider未初始化时出现空指针异常。
内容的提问来源于stack exchange,提问作者mrapi
相关产品推荐
相关产品推荐

