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
相关产品推荐
相关产品推荐

