Flutter报错:ScaffoldState无showSnackBar方法,求修复方案
解决方法
这个报错是因为Flutter版本更新后,ScaffoldState的showSnackBar方法被移除了,官方把SnackBar的全局管理逻辑转移到了ScaffoldMessenger组件中。别删这行代码,删了会丢失成功提示的功能,直接替换成新写法就行。
方案一:用ScaffoldMessenger结合上下文
如果你的方法能拿到BuildContext,可以这么改:
void _showSuccessSnack(BuildContext context) { final snackbar = SnackBar( content: Text( 'User $_username successfully created!', style: TextStyle(color: Colors.greenAccent), ), ); // 替换原showSnackBar调用 ScaffoldMessenger.of(context).showSnackBar(snackbar); _formKey.currentState!.reset(); }
方案二:保留原有的_scaffoldKey
不想改方法参数,继续用_scaffoldKey的话,通过它获取上下文后调用ScaffoldMessenger:
void _showSuccessSnack() { final snackbar = SnackBar( content: Text( 'User $_username successfully created!', style: TextStyle(color: Colors.greenAccent), ), ); // 替换原showSnackBar调用 ScaffoldMessenger.of(_scaffoldKey.currentContext!).showSnackBar(snackbar); _formKey.currentState!.reset(); }
额外提一句:Flutter 2.0+已经不需要显式写new了,代码里的new TextStyle可以去掉new。
内容的提问来源于stack exchange,提问作者acnow
相关产品推荐
相关产品推荐

