Flutter 2.7.0构建异常:ScaffoldState.showSnackBar失效求助
问题:Flutter v2.7.0中
ScaffoldState.showSnackBar报错的解决办法 我有一个需偶尔修改以适配不同客户需求的旧副业项目,目前无需升级最新框架版本,因一切运作正常。但最近修改后,构建应用时Flutter提示ScaffoldState.showSnackBar已不存在。调研得知需使用ScaffoldMessenger类,却找不到该类,导致应用崩溃。我暂不想升级,因仅需微小修改,且数月前该功能仍正常。
原本显示SnackBar的代码:
_loadSuccessSnackBar() { _scaffoldKey.currentState.showSnackBar( SnackBar( content: Row( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( "Se han subido con exito los registros", style: TextStyle( color: Color.fromARGB(255, 186, 18, 57), fontSize: 15, ), ), SizedBox(width: 5), Icon( Icons.download_done_outlined, color: Colors.green, ), ], ), ), ); }
其中_scaffoldKey定义:
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
注:Debug模式下构建完全正常。
解决办法
一、无需升级框架的临时修复
调整Lint配置
打开项目根目录的analysis_options.yaml文件,查找是否设置了deprecated_member_use: error。如果是,将其改为warning:linter: rules: deprecated_member_use: warning在Flutter v2.7.0中,
ScaffoldState.showSnackBar仅被标记为废弃(deprecated),并未被移除。Debug模式正常说明功能本身可用,报错大概率是Lint规则强制将废弃API视为错误导致构建失败。切换到
ScaffoldMessenger实现
确认页面文件顶部已导入核心Material包:import 'package:flutter/material.dart';ScaffoldMessenger在v2.7.0中已存在,找不到该类通常是缺少包导入导致。修改代码为:_loadSuccessSnackBar(BuildContext context) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Row( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( "Se han subido con exito los registros", style: TextStyle( color: Color.fromARGB(255, 186, 18, 57), fontSize: 15, ), ), SizedBox(width: 5), Icon( Icons.download_done_outlined, color: Colors.green, ), ], ), ), ); }这种方式无需依赖
_scaffoldKey,直接通过context调用即可。
二、低风险的框架升级方案
如果担心废弃API后续带来隐患,可升级到Flutter v2.x系列的最后一个稳定版本v2.10.5:
- 该版本属于v2分支,与v2.7.0兼容性极高,不会破坏现有功能;
- 保留对
ScaffoldState.showSnackBar的支持,同时ScaffoldMessenger的实现更完善; - 修复了v2.7.0中的部分已知bug,无需适配大量新API。
升级步骤:
- 执行命令:
flutter downgrade v2.10.5 - 运行
flutter pub get更新依赖; - 测试Debug和Release构建,确认功能正常。
内容的提问来源于stack exchange,提问作者yieniggu
相关产品推荐
相关产品推荐

