You need to enable JavaScript to run this app. Flutter 的 showSnackBar 已弃用,如何更新 main.dart 中的相关代码?
优惠活动
大模型
产品
解决方案
定价
更多

Flutter 的 showSnackBar 已弃用,如何更新 main.dart 中的相关代码?

代码修正方案

直接适配当前已有context的场景

你当前的代码片段已经携带BuildContext,可直接替换为新API,无需依赖原有scaffoldKey:

Navigator.of(context, rootNavigator: true).pop('dialog');
ScaffoldMessenger.of(context).showSnackBar(
  SnackBar(
    content: const Text('BEIM LADEN DER POST-DATEN IST EIN FEHLER AUFGETRETEN!'),
    duration: Duration(seconds: 5),
  ),
);

需要保留全局跨页面调用场景的适配

如果原有Magazin.scaffoldKey是用来在无context的场景下全局调用SnackBar,需做如下替换:

  • 把原全局key的类型从GlobalKey<ScaffoldState>改为GlobalKey<ScaffoldMessengerState>
  • 在MaterialApp配置中绑定该全局key:
MaterialApp(
  scaffoldMessengerKey: Magazin.scaffoldMessengerKey,
  // 保留原有其他配置
)
  • 后续全局调用SnackBar的写法为:
Magazin.scaffoldMessengerKey.currentState!.showSnackBar(
  const SnackBar(
    content: Text('BEIM LADEN DER POST-DATEN IST EIN FEHLER AUFGETRETEN!'),
    duration: Duration(seconds: 5),
  ),
);

变更原因

Flutter 1.23.0-14.0.pre版本后,将SnackBar的管理逻辑从ScaffoldState抽离为独立的ScaffoldMessenger组件,解决原有SnackBar会随所属页面路由销毁、跨页面显示异常的问题,因此废弃了原有的ScaffoldState.showSnackBar调用方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 10:36:08