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

Flutter中将可空int?转为int类型传入Duration的实现方法

可空int值传入Duration构造方法的解决方案

问题背景

通过SharedPreferences类的getInt()方法获取到的是int?可空类型值,但Duration构造方法要求传入非空int类型参数,直接传参会触发类型错误,问题代码如下:

int? duration = ParametersHelper.getDuration();
Future.delayed(const Duration(milliseconds: duration));

// ParametersHelper类getDuration方法实现
static int? getDuration() {
    return _pref.getInt("Duration");
}

注意:只要Duration的参数依赖运行时读取的SharedPreferences值,就不能给Duration加const修饰符——const要求所有传入参数都是编译期即可确定的常量值。

可选处理方案

  • 空值合并运算符??设置兜底默认值(最推荐)
    用??指定null场景下的默认时长,保证传入参数永远非空,适配绝大多数业务场景,你可以根据业务需求调整默认时长数值:
    int? duration = ParametersHelper.getDuration();
    // 示例兜底为500毫秒,可自行替换
    Future.delayed(Duration(milliseconds: duration ?? 500));
    
  • 空断言!强制转换非空(谨慎使用)
    如果你能100%保证业务流程中一定会提前写入Duration配置,getDuration()永远不会返回null,可以用!标记告知编译器该值非空。但如果实际运行时拿到null,会直接触发空指针崩溃,没有特殊把握不要用:
    int? duration = ParametersHelper.getDuration();
    Future.delayed(Duration(milliseconds: duration!));
    
  • 提前判空走分支逻辑
    如果null场景下不需要执行延迟逻辑,可以提前做判空分支处理,从根源避免非法传参:
    int? duration = ParametersHelper.getDuration();
    if (duration != null) {
      Future.delayed(Duration(milliseconds: duration));
      // 正常延迟后执行的逻辑
    } else {
      // 配置缺失的兜底逻辑:比如直接执行目标逻辑、上报配置异常日志等
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:45:38