使用原生SnackBar显示Toast报错:showSnackBar方法未定义
解决Flutter中ScaffoldState无showSnackBar方法的错误
错误信息
The method 'showSnackBar' isn't defined for the type 'ScaffoldState'.
Try correcting the name to the name of an existing method, or defining a method named 'showSnackBar'
用户实现代码
//Show toaster showToast(){ Scaffold.of(context).showSnackBar(SnackBar( content: Text("Sending Message"), )); }
修复方案
这个错误是因为Flutter版本迭代后,Scaffold.of(context)不再提供showSnackBar方法,官方将SnackBar的管理移到了ScaffoldMessenger组件中,以下是两种可行的修复方式:
方式一:直接使用ScaffoldMessenger
修改后的代码如下:
//Show toaster showToast(){ ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text("Sending Message"), )); }
方式二:使用GlobalKey(适用于context无法直接访问ScaffoldMessenger的场景)
- 先定义一个GlobalKey:
final GlobalKey<ScaffoldMessengerState> _scaffoldMessengerKey = GlobalKey<ScaffoldMessengerState>();
- 在Scaffold组件中绑定这个key:
Scaffold( key: _scaffoldMessengerKey, // 其他页面内容 )
- 通过key调用showSnackBar:
//Show toaster showToast(){ _scaffoldMessengerKey.currentState?.showSnackBar(SnackBar( content: Text("Sending Message"), )); }
内容的提问来源于stack exchange,提问作者Cliff Odebala Clarke
相关产品推荐
相关产品推荐

