Dart实例化WorldClock报错:需4个位置参数,实际传入0个
报错原因
Dart 构造函数的参数默认是顺序必填的位置参数,只有用大括号{}包裹的参数才支持参数名: 值的命名传参形式。
你定义的WorldClock(this.flag, this.location, this.url,this.time)属于位置参数构造函数,要求调用时按顺序传入4个参数,但你实例化时用了命名参数写法,Dart 没有解析到有效的位置参数传入,判定实际传参数量为0,不满足4个必填参数的要求,直接抛出错误。
另外你代码里的getime()是拼写错误,后续运行会报找不到方法的问题,建议修正为getTime()。
修复方案
结合你的业务逻辑(实例化时仅传入地点、接口地址,时间通过后续异步请求获取),把构造函数改为命名参数形式即可,完全适配你现有的传参写法:
- 修改
WorldClock类定义,将构造函数参数用大括号包裹转为命名参数,异步获取的初始无值字段可以设为可空类型,或者给空字符串默认值,必填字段加required标识:
class WorldClock { // 若不想用可空类型,也可以写为 String flag = ''; String time = ''; 给空值默认初始值 String? flag; String location; String? time; String url; // 命名参数格式构造函数 WorldClock({ this.flag, required this.location, this.time, required this.url, }); // 修正原方法名拼写错误 Future getTime() async { // 保留你原有的时间请求、解析逻辑即可 } }
- 修正调用处的方法名拼写,原有传参逻辑不需要改动即可正常运行:
void setupWorldtime() async{ WorldClock instance = WorldClock(location:'Berlin',url:'Europe/Berlin'); await instance.getTime(); print(instance.time); setState(() { time = instance.time; }); }
如果你不想使用命名参数,也可以选择按位置顺序传入4个参数,但该方式需要在实例化时就给flag、time传入固定初始值,不符合你后续异步获取时间的业务逻辑,不推荐使用。
内容的提问来源于stack exchange,提问作者Ezysoft
相关产品推荐
相关产品推荐

