Flutter删除列表项时Snackbar显示实例而非项目名称的解决方法
Flutter Snackbar显示异常及API废弃修复方案
1. 解决Snackbar显示Instance of 'IngredientList'的问题
你看到的Instance of 'IngredientList' deleted是因为直接将IngredientList对象插入字符串时,默认调用了对象未重写的toString()方法,该方法会返回实例类型标识而非名称。
有两种修复方式:
- 直接调用对象的名称属性(推荐):假设你的
IngredientList类包含存储名称的字段(比如name),修改Text组件内容:content: Text('${ingredient.name} deleted'), - 重写
IngredientList的toString()方法:如果希望所有场景下对象转字符串都返回名称,在类中添加:class IngredientList { final String name; // 其他成员变量与构造方法 @override String toString() => name; }
2. 替换已废弃的Scaffold.of(context)API
Scaffold.of(context).showSnackBar()确实已被废弃,官方推荐使用ScaffoldMessenger管理Snackbar,修改后的完整方法代码如下:
showSnackbar(context, ingredient, index){ ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text('${ingredient.name} deleted'), action: SnackBarAction( label: 'UNDO'.tr(), onPressed: (){ undoDelete(index, ingredient); }, ), )); }
如果当前上下文无法获取ScaffoldMessenger,需确保组件位于MaterialApp或Scaffold的子树中,或使用GlobalKey<ScaffoldMessengerState>全局获取状态。
内容的提问来源于stack exchange,提问作者Giovanni
相关产品推荐
相关产品推荐

