You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart实例化WorldClock报错:需4个位置参数,实际传入0个

报错原因

Dart 构造函数的参数默认是顺序必填的位置参数,只有用大括号{}包裹的参数才支持参数名: 值的命名传参形式。
你定义的WorldClock(this.flag, this.location, this.url,this.time)属于位置参数构造函数,要求调用时按顺序传入4个参数,但你实例化时用了命名参数写法,Dart 没有解析到有效的位置参数传入,判定实际传参数量为0,不满足4个必填参数的要求,直接抛出错误。
另外你代码里的getime()是拼写错误,后续运行会报找不到方法的问题,建议修正为getTime()。

修复方案

结合你的业务逻辑(实例化时仅传入地点、接口地址,时间通过后续异步请求获取),把构造函数改为命名参数形式即可,完全适配你现有的传参写法:

  1. 修改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 {
    // 保留你原有的时间请求、解析逻辑即可
  }
}
  1. 修正调用处的方法名拼写,原有传参逻辑不需要改动即可正常运行:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 04:24:24