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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:36:08