在Android中的Flutter要如何正确显示SnackBar
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,小编给大家分享一下在Android中的Flutter要如何正确显示SnackBar,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!简介官方API文档Scaffold的of方法说明有说明
千家信息网最后更新 2025年01月22日在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安全错误
数据库的锁怎样保障安全
爱快服务器上网设置
衢州java软件开发工具
软件开发开票时候单位是什么
大学计算机网络技术要造模吗
一亿用户的云服务器价格
软件开发预付定金
网络安全用得到抓包技术吗
铁岭软件开发培训机构
手游原神服务器有几个
网络技术的研报
司法局网络安全法治宣传
张近东的互联网科技观
闲鱼上出租服务器都是干什么的
临汾学校显示屏触摸软件开发公司
学校的电脑可以做服务器吗
吉林虚拟服务器管理软件云主机
瑞金数据库恢复
如何停止sql数据库运行
数据库使用安全
后端和数据库哪个好
网络安全助力安全生产工作
网络安全屋是什么
为什么软件开发和维护的进度
手机数据连不上服务器
视酷im软件开发
计算机网络安全管理引言
鹏橙网络技术
第三方网络安全评估机构
宁夏办公软件开发设计方案
学校的电脑可以做服务器吗