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

Flutter封装SnackBar工具类时遇常量表达式等错误,求解决

问题解决方法

你的问题根源在于你给SnackBar加了const修饰符——看代码里var snackBar = const SnackBar(...)确实使用了const。const构造器要求所有传入的参数必须是编译时常量,但你的str和duration_in_ms是方法的动态参数,不符合常量要求,因此触发了两个错误:

  1. Text(str)报错:str是方法参数,属于运行时动态值,不是常量表达式,无法用于const构造的Text组件
  2. Duration(milliseconds: duration_in_ms)报错:duration_in_ms是动态参数,const Duration要求传入的milliseconds必须是编译期常量int,动态值不满足这个要求

修复后的代码

import 'package:flutter/material.dart';

class Utils{
  static showSnackBar(BuildContext context, String msg, int duration_in_ms) {
    var snackBar = SnackBar( // 去掉const修饰符
      content: Text(msg), // 直接使用msg,无需额外定义str变量
      duration: Duration(milliseconds: duration_in_ms),
    );
    ScaffoldMessenger.of(context).showSnackBar(snackBar);
  }
}

额外优化建议

可以给duration_in_ms设置默认值,让调用时更灵活:

static showSnackBar(BuildContext context, String msg, [int duration_in_ms = 2000]) {

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:33:33