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

Dart用可选参数作Future.delayed参数报非常量错误如何解决

Dart函数可选参数作为Future.delayed入参的报错解决方案

错误根因

你遇到的Error: Not a constant expression.报错,核心原因是const Duration(microseconds: delay)这行代码用了const修饰符:

Dart中const关键字要求修饰的对象必须是编译期常量,而delay是函数运行时才会确定值的入参,不满足编译期常量的要求,因此触发编译错误。

修复方案

直接去掉Duration前面的const修饰符即可,同时注意递归调用时如果需要沿用上层传入的delay参数,需要显式传递,否则会默认使用默认值100。

修改后的可运行代码如下:

Stream<int> testAsync(int n, {int delay = 100}) async* {
  if (n > 0) {
    // 移除const修饰符,使用运行时生成的Duration实例
    await Future.delayed(Duration(microseconds: delay));
    yield n;
    // 递归调用时传递delay参数,保证每层延迟时间一致
    yield* testAsync(n-1, delay: delay);
  }
}

内容的提问来源于stack exchange,提问作者n1x

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:18:03