Flutter封装SnackBar工具类时遇常量表达式等错误,求解决
问题解决方法
你的问题根源在于你给SnackBar加了const修饰符——看代码里var snackBar = const SnackBar(...)确实使用了const。const构造器要求所有传入的参数必须是编译时常量,但你的str和duration_in_ms是方法的动态参数,不符合常量要求,因此触发了两个错误:
Text(str)报错:str是方法参数,属于运行时动态值,不是常量表达式,无法用于const构造的Text组件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
相关产品推荐
相关产品推荐

