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
相关产品推荐
相关产品推荐

