Main.dart页面返回Provider时报错 使用Chopper配合Provider出现参数错误
错误原因
你使用的是4.0及以上版本的provider库,该版本对API做了不兼容更新,旧版本中用来初始化实例的builder参数已被完全移除,替换为必填的create参数,你的写法还是适配旧版provider的语法,所以触发了对应报错:
- 第一个报错是因为新版provider要求必须传入
create参数初始化托管实例,你传的builder已经不被识别,因此检测不到必填参数 - 后两个报错是因为新版provider中
builder参数已改为用来构建子组件的可选参数,要求返回Widget类型,你返回的PersonalPostingService和参数要求的类型完全不匹配
另外你当前代码中的main函数缺少runApp调用,就算provider的错误修复后也无法正常挂载应用。
修复后代码
import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:relationship/screens/weekly_view.dart'; import 'package:relationship/services/chopper_services.dart'; // 补充runApp调用,将应用挂载到Flutter渲染树 void main() => runApp(const MyApp()); class MyApp extends StatelessWidget { // 补充默认构造方法,符合新版Flutter语法规范 const MyApp({super.key}); Widget build(BuildContext context) { // 把废弃的builder参数替换为create参数,同时指定Provider的泛型类型 return Provider<PersonalPostingService>( create: (_) => PersonalPostingService.create(), dispose: (context, PersonalPostingService service) => service.client.dispose(), child: MaterialApp( home: WeeklyData(), )); } }
可选兼容方案
如果你不想修改代码适配新版provider,可以在pubspec.yaml中将provider的版本锁定为3.2.0,即可匹配你参考的旧教程语法。
内容的提问来源于stack exchange,提问作者artistAhmed
相关产品推荐
相关产品推荐

