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

Flutter中如何更新代码里的showSnackBar使用方式?

升级Flutter中showSnackBar的实现(替代ScaffoldState GlobalKey方案)

在Flutter新版本中,官方推荐用ScaffoldMessenger替代GlobalKey<ScaffoldState>来显示SnackBar,这种方式更简洁且贴合框架设计。具体修改步骤如下:

  1. 移除GlobalKey<ScaffoldState>的定义
    直接删掉原代码里的final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();,同时去掉Scaffold组件上绑定的key: _scaffoldKey属性。

  2. 替换SnackBar的调用逻辑
    把通过_scaffoldKey触发SnackBar的代码,改成用ScaffoldMessenger.of(context)调用:

修改后的完整代码片段:

if (result.savedOK!) {
  Navigator.pushReplacementNamed(context, MyShifts.id);
} else {
  // 显示SnackBar
  ScaffoldMessenger.of(context).showSnackBar(SnackBar(
    content: Text(
      _errMessage!,
      style: TextStyle(fontSize: 20),
      textAlign: TextAlign.center,
    ),
    backgroundColor: Colors.red,
    duration: Duration(seconds: 3),
  ));
}

额外说明

如果你的_scaffoldKey还用于其他功能(比如打开侧边抽屉、显示底部模态框),可以保留这个GlobalKey,但仅在SnackBar部分改用ScaffoldMessenger即可,两者互不冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:25:39