在Android中的Flutter要如何正确显示SnackBar
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,小编给大家分享一下在Android中的Flutter要如何正确显示SnackBar,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!简介官方API文档Scaffold的of方法说明有说明
千家信息网最后更新 2026年11月03日在Android中的Flutter要如何正确显示SnackBar简介
官方示例
错误示例
解决方法一:Scaffold的子组件通过Builder构建
小编给大家分享一下在Android中的Flutter要如何正确显示SnackBar,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
简介
官方API文档Scaffold的of方法说明有说明调用Scaffold.of方法是在Scallfold的子组件的Build方法中,也就是不能直接在构建Scaffold的build方法里调用,否则会抛异常。
Typical usage of the Scaffold.of function is to call it from within the build method of a child of a Scaffold.
通常为显示一个SnackBar需要构建一个Builder,通过Builder的context调用(原因是)
Scallfold.of(context).showSnackBar(SnackBar(contenxt: Text('这是一个SnackBar'));官方示例
显示SnackBar,官方典型示例代码如下所示:
import 'package:flutter/material.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Code Sample for Scaffold.of.', theme: ThemeData( primarySwatch: Colors.blue, ), home: Scaffold( body: MyScaffoldBody(), appBar: AppBar(title: Text('Scaffold.of Example')), ), color: Colors.white, ); }}// 在Scaffold子组件里的build方法可以调用Scaffold.of方法class MyScaffoldBody extends StatelessWidget { @override Widget build(BuildContext context) { return Center( child: RaisedButton( child: Text('SHOW A SNACKBAR'), onPressed: () { Scaffold.of(context).showSnackBar( SnackBar( content: Text('Have a snack!'), ), ); }, ), ); }}错误示例
但是若直接在构建Scallfold的build方法中调用会报异常:
Scaffold.of() called with a context that does not contain a Scaffold.
错误代码如下所示:
import 'package:flutter/material.dart';class ScaffoldSnackBarDemo extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return Scaffold( body: Center( child: RaisedButton( child: Text('SHOW A SNACKBAR'), onPressed: () { ///直接在Scallfold的build方法里使用会抛异常 Scaffold.of(context).showSnackBar( SnackBar( content: Text('Have a snack!'), ), ); }, ), ), appBar: AppBar(title: Text('Scaffold.of Example')), ); }}解决方法一:Scaffold的子组件通过Builder构建
这时候要不就是按官方的,将需要显示SnackBar的代码另外抽离一个自定义子组件,在子组件的build方法再显示SnackBar,要不就是在Scaffold的build方法体对该子组件再包一层Builder,如下所示。
import 'package:flutter/material.dart';class ScaffoldSnackBarDemo extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return Scaffold( ///在子组件外再包一层builder,让context不共用 body: Builder(builder: (context) { return Center( child: RaisedButton( child: Text('SHOW A SNACKBAR'), onPressed: () { Scaffold.of(context).showSnackBar( SnackBar( content: Text('Have a snack!'), ), ); }, ), ); }), appBar: AppBar(title: Text('Scaffold.of Example')), ); }}解决方法二:使用GlobalKey存储ScaffoldState
import 'package:flutter/material.dart';class ScaffoldSnackBarDemo extends StatelessWidget { final _scallfoldKey = GlobalKey(); @override Widget build(BuildContext context) { return Scaffold( ///使用GlobalKey解决 key: _scallfoldKey, body: Center( child: RaisedButton( child: Text('SHOW A SNACKBAR'), onPressed: () { _scallfoldKey.currentState.showSnackBar(SnackBar( content: Text('Have a snack!'), )); }, ), ), appBar: AppBar(title: Text('Scaffold.of Example')), ); }} 看完了这篇文章,相信你对"在Android中的Flutter要如何正确显示SnackBar"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
方法
组件
官方
代码
示例
就是
篇文章
要不
错误
义子
也就是
典型
原因
完了
文档
是在
更多
知识
简介
行业
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
上海睿民互联网科技有限公司
广州紫鲸互联网科技有限公司
科技互联网政务服务
互联网络科技有限公司
万易互联网科技
狮子座互联网科技
互联网未来科技
互联网科技股票
碳银互联网科技有限公司
亿人帮互联网科技
一五八零互联网科技
云创客互联网科技公司
群盈汇互联网科技有限公司
工业互联网展湾科技股份有限公司
互联网科技实习生岗位
产业互联网科技服务公司
中国新注册互联网科技
互联网科技平台产品运营
三亚科技创新互联网基地
安徽九吞吴互联网科技有限公司
互联网核心科技是什么
互联网科技战争
奇酷互联网科技公司
米客互联网科技
常德市电业局互联网科技部
互联网和黑科技的看法
厦门比较好的科技互联网公司
互联网科技公司有风险吗
领航科技大厦互联网公司
承德科技产业互联网平台