首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Flutter | 一文搞懂 BuildContext

之前一篇文章中讲过 Element 和 Widget 对应关系,不太清楚可以看一下 Element 是 Widget 树中特定位置所对应实例,Widget 状态都会保存在 Element...markNeedsBuild(); } 复制代码 我们写代码过程中还会发现一个问题,就是要更新状态不是必须要写在 setState 里面,只要写在 setState 上面 即可,这样也没有问题,...上面这些方法源码中还是有一些使用栗子,例如: Scaffold.of(context).showSnackBar() Scaffold 底部显示一个 SnackBar static ScaffoldState...(context).openDrawer(); }), ); } } 复制代码 运行代码,就会发现报错:Scaffold.of() called with a context that...) { return FloatingActionButton(onPressed: () { Scaffold.of(context).openDrawer(); });

50330

【Flutter 专题】40 日常小问题小结 (一)

,右侧垂直两张小图,水平方向 1:1 均分,和尚用 Expanded 配合 flex 嵌套权重遇到如下问题,于是重新研究一下权重使用; ?...: 根据上一步尝试,和尚理解 Container 高度为 0,需要手动设置高度,但是设置 Row 层还是 Column 层或子 Container 层是不同; 和尚理解不显示原因是高度未匹配...尝试四: 如果最外层不设置高度,则考虑根据需求使用带有宽高 Widget,和尚需要展示图片,故直接用图片占位; 和尚主要想实现图片高度自适应,宽度随屏幕比例占有,右侧两图正常为左图占位一半...扩展: Flexible FlexFit 分两种,嵌套权重只可以用默认 loose,在其他情况下,和尚测试差别不大;但和尚理解官方说明:tight 模式是强制填补剩余空间, loose...问题二:SnackBar 找不到 Context 和尚在尝试 SnackBar 总是找不到上下文环境打不开; ?

80131
您找到你想要的搜索结果了吗?
是的
没有找到

Flutter | 容器组件

, ), ); } } 复制代码 平移 Transform.translate 接受一个 offset 参数,可以绘制沿 x,y 轴对子组件平移指定距离 //平移 Widget...,不是 layout 阶段,所以无论对 子组件做何种变化,其占用空间大小和在屏幕上位置都是不变,因为这些都是布局阶段就确定,例如: Widget getTest() { return...Text 被放大后,占用空间依然是红色部分,所以第二个 Text 就会挨着红色部分,最终就会出现重合 由于矩阵变换只会作用在绘制阶段,所以某些场景下, UI 需要变化是,可以通过矩阵变换来达到视觉上...UI 变化,不是重新 build 流程,这样会节省 layout 开销,所以性能会比较好,例如 Flow 组件,内部就是使用矩阵变换来更新 UI ,除此之外,Flutter 动画组件中也大量使用了...(context).openDrawer()}, ); }), ........... ) 复制代码 可以看到左侧菜单已经替换成功 打开抽屉方法 ScaffoldState

5.4K10

Flutter Widgets 之 SnackBa

使用SnackBar组件,用法如下: Scaffold.of(context).showSnackBar(SnackBar( content: Text('老孟,一枚有态度程序员'),...)); 注意并不是build方法中直接使用SnackBar组件,而是调用Scaffold.of(context).showSnackBar方法,消息会在底部弹出并显示一段时间,默认显示4秒...=,size_16,color_FFFFFF,t_70] SnackBar2种弹出形式,默认是fixed,直接在底部弹出,另一种是floating,悬浮在底部,用法如下: Scaffold.of(context...}); }, ) 默认情况下每个显示4秒,如果有10个,那么40秒内会一直弹消息,体验明显不友好,我们希望效果是如果有新消息,旧都消息立刻消失,显示新消息...,只需弹出新SnackBar移除现在SnackBar, Scaffold.of(context).removeCurrentSnackBar(); Scaffold.of(context).showSnackBar

99500

输入和选择

在这里,我们需要简单介绍下SnackBar 使用 Scaffold.of(context).showSnackBar()即可显示SnackBar,大家在这里不需要了解太多,以后会具体介绍。...代码很简单,不再做具体介绍了 Radio 没错Radio就是我们常用单选框意思,通常Radio都是成组出现一组Radio中,只能有一个选中。...this.inactiveThumbColor, this.inactiveTrackColor, this.activeThumbImage, this.inactiveThumbImage }) 已经很简单,只不过多了几个参数用来控制打开和关闭颜色或者图片...66,每当用户滑动滑块根据用户滑动改变滑块位置。...更多相关Widget 在上面我们分别介绍了,CheckBox、Radio、Switch、用法,但是这些组件一般不是单独使用,一般会和Text、Icon或者其他Widget结合使用

2.4K20

Flutter入门三部曲(2) - 界面开发基础

因为State每次重建都没有抛弃,所以可以维护它并且不必每次重建某些东西都要进行昂贵计算以获得状态属性。 此外,这是允许Flutter动画存在原因。...方法,已经分配拿到了父组件BuildContext.接下来直接使用context,也都是同一个。...通过上面的测试,我们知道这里context,确实不是Scaffold。那我们要如何在这里拿到Scaffoldcontext呢? 2....总之,这里我们可以知道key能够提高性能,所以每个Widget都会构建方法都会有一个key参数可选,贯穿着整个框架。 通常情况下,我们不需要去传递这个Key。...Key虽然不是Index,但是对于每一个元素来说,是独一无二。 - 使用GlobalKey 使用GlobalKey场景是,从父控件和跨子Widget来传递状态

2.6K00

Flutter入门三部曲(2) - 界面开发基础

因为State每次重建都没有抛弃,所以可以维护它并且不必每次重建某些东西都要进行昂贵计算以获得状态属性。 此外,这是允许Flutter动画存在原因。...方法,已经分配拿到了父组件BuildContext.接下来直接使用context,也都是同一个。...通过上面的测试,我们知道这里context,确实不是Scaffold。那我们要如何在这里拿到Scaffoldcontext呢? 2....总之,这里我们可以知道key能够提高性能,所以每个Widget都会构建方法都会有一个key参数可选,贯穿着整个框架。 通常情况下,我们不需要去传递这个Key。...Key虽然不是Index,但是对于每一个元素来说,是独一无二。 - 使用GlobalKey 使用GlobalKey场景是,从父控件和跨子Widget来传递状态

1.6K20

Flutter开发-容器类组件

一般情况下,我们会很少直接使用此组件,但在”去除”多重限制时候也许会有帮助,我们看下下面的代码: ConstrainedBox( constraints: BoxConstraints(minWidth...foreground:子组件之上绘制,即前景。 BoxDecoration 我们通常会直接使用BoxDecoration类,它是一个Decoration子类,实现了常用装饰元素绘制。..., ), ), ); 平移 Transform.translate接收一个offset参数,可以绘制沿x、y轴对子组件平移指定距离。...,MediaQuery.removePadding可以移除Drawer默认一些留白(比如Drawer默认顶部会留和手机状态栏等高留白),读者可以尝试传递不同参数来看看实际效果。...Button,通常悬浮在页面的某一个位置作为某种常用动作快捷入口 SafeArea 使用 SafeArea 可以让 child widget 顶部和底部腾出足够空间方便处理 iPhoneX 这类手机

3.5K20

Flutter 构建完整应用手册-处理手势

处理点击 我们不仅希望向用户展示信息,还希望我们用户与我们应用进行互动! 那么,我们如何回应基本操作,如点击和拖动? 我们将使用GestureDetector部件!...添加材质涟漪效果 设计应遵循材质设计指南应用程序时,我们希望点击将涟漪动画添加到部件。 Flutter提供InkWell部件来达到这个效果。...有关如何创建列表更多详细说明,请按照使用长列表配方进行操作。 创建一个数据源 我们例子中,我们需要20个样品条目。 为了简单起见,我们将生成一个字符串列表。...我们例子中,我们将更新我们itemBuilder函数以返回一个Dismissible部件。...为了提供我们正在移除项目的提示,我们将在屏幕上滑动该项目显示“划动消除”指示符。 在这种情况下,红色背景! 为此,我们将为Dismissible提供background参数

1.7K20

【Flutter 实战】大量复杂数据持久化

,如果本地没有保存数据,则需要通过网络获取数据,返回数据之前,用户看到是空白页面,如果本地保存了部分新闻,则显示这部分数据,等待最新数据返回刷新即可,对用户体验来说,明显第二种体验更佳。...添加依赖 SQLite 并不是 Flutter 系统自带,而是一个第三方插件,项目的 pubspec.yaml 文件中添加依赖: dependencies: sqflite: ^1.3.1...path_provider: ^1.6.11 执行命令: flutter pub get 使用 SQLite 创建数据库时候需要本地路径做为参数,所以添加path_provider 插件获取本地路径...单例模式创建 SQLite 访问 使用 SQLite 并不是一定要使用单例模式,单例模式是为了保证整个应用程序仅有一个数据库实例和全局访问。...SQLite 创建成功后会在本地创建一个 db_name.db 文件,文件目录就是初始化数据库设置目录。

2.1K30

Flutter 页面交互 | 路由跳转方式、常用API、发送接收数据、可能发生问题与知识点拓展

概述 路由跳转几种方式; 路由常用API; 路由发送和接收数据使用; 路由使用中可能遇到问题与解决方案; 路由跳转方式 单一页面跳转(A页面 --- B页面) 多个页面路由管理 (A页面...value位置是一个形参,名字可以随便起,这个形参位置就是返回数据 pushData(context).then((value){ //注意这里要把...【小结一下刚刚跳转并传输数据方式】 上面的方式是 —— 跳转目的页中, 准备一个构造函数和一个全局变量,用于接收数据, 跳转到目的页,创建一个目的页实例,并把数据传给其构造函数,完成传递;...可以写main函数,也可以不写; 建议只首页写main,其他页面不要写,便于查找和维护; 命名路由 路径名称 正确性(定义与使用要相符合)、 传参(参数类型)一致性问题; 1....// 利用Future变量类型 then方法,拿到返回数据 // value位置是一个形参,名字可以随便起,这个形参位置就是返回数据 //

2.8K10

一起学Elasticsearch系列-搜索推荐

只能是1到2之间值。任何其他值都将导致引发错误请求错误。默认为2。 prefix_length:前缀匹配时候,必须满足最少字符。...max_term_freq:最大词频,通过设置 max_term_freq 参数,可以控制建议结果中词项重复出现程度,以避免过多重复词项。...Phrase Suggester 将在 title 字段中查找与短语相关建议结果。 生成短语使用 gram 大小为 2,表示使用两个连续词项进行组合。...该参数指定了词语索引中被认为是拼写错误概率。较低值将使得更多在索引中出现词语被视为拼写错误,即使它们实际上是正确。 max_errors:最大容忍错误百分比。...默认值为 1,表示最多允许 1% 错误。当建议短语与输入短语匹配,如果超过该百分比术语被认为是错误,则该建议会被排除。 confidence:默认值为 1.0,取值范围为 [0, 1]。

28920

Flutter | 基础Widget

这是因为同一个 Widget 可以被添加到 UI 树不同部分,真正渲染,UI 树每一个 Element 都会对应一个 Widget 对象 。...Echo Widget widget 构造函数参数使用命名参数,命名参数必要参数要添加 @required 标注,这样有利于静态代码分析器进行检查。...另外,继承 widget ,第一个参数通常 key ,另外,如果 Widget 需要接收自 Widget,那么 child 或者 children 参数通常应该放在参数列表最后。...实际上,context 是当前 widget widget 树中位置中执行 “相关操作”一个句柄,比如它提供了从当前 widget 开始向上遍历widget树,以及查找父类 widget 方法 class...一些场景下,Flutter framework 会将 State 对象重新插入到树中,如果包含次 State 对象子树一个位置移动到另一个位置(可以通过 GlobalKey 来实现)。

1.2K20

Flutter | 和小老弟一起玩转Widget

你可以理解为Flutter中一切都可以通过组合方式实现,对于我们开发者,只需声明,或者说告诉框架这个组件是什么,它要怎么显示,携带了哪些参数Widget 就是用来帮你承载配置东西。...setState会导致整个widget全部重建,所以使用时,我们应该尽量把 子widget 抽离出去,采用局部刷新方式优化,当然这个技巧具体可以百度或者参阅我之前代码,并不是什么骚操作,基本入门技巧吧...Context StatelessWidget build 方法有一个 context参数,它是 BuildContext 类一个实例,表示当前 widget widget中上下文,每一个 widget...实际上, context 是当前widgetwidget树中任意位置中执行相关操作一个句柄。...一些场景下,Flutter framework 会将State 对象重新插入到树中,如包含此 State 对象子树一个位置移动到了另一个位置

86920
领券