| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Flutter实战-StatefulWidget -> 正文阅读 |
|
[移动开发]Flutter实战-StatefulWidget |
用了两年的flutter,有了一些心得,从今天开始陆续更新一些案例,不虚头巴脑,只求实战有用,以供学习或使用flutter的小伙伴参考,学习尚浅,如有不正确的地方还望各路大神指正,以免误人子弟,在此拜谢~(原创不易,转发请标注来源和作者
Widget:组件,这个概念可以说在大前端开发中随处可见,非常容易理解,那么在Flutter中Widget有着广泛的概念,可以说几乎所有的对象都是Widget(万物皆Widget也是Flutter 的核心设计思想),Flutter也是通过Widget嵌套来构建ui的,这也是很多人吐糟Flutter的地方,哈哈~ 一。Widget先看官方解释
Widget就是Element 的配置信息,这里引出了另一个重要概念Element。那么Element(元素)又是什么呢,官方解释如下:
字面意思就是Element是Widget的实例。这里涉及到tree,那就不得不提及Flutter 的”三棵树“:Widgets 树,Element树和Render树(渲染树)。Widgets 树生成Element树,Element树生成Render树,这也是Flutter的渲染流程,在此文中我们先不对Flutter的渲染流程做过多的探究,先明白Widget的概念就好。 二。StatelessWidget和StatefulWidget
StatelessWidget和StatefulWidget 这个对所有Flutter 的使用者都不陌生,因为它
无处不在,我们会在项目中定义各类组件去支持我们的业务。
StatelessWidget就是我们常说的无状态组件,而StatefulWidget就是有状态组件,我们最常用的就是根据Api接口返回的数据动态刷新页面,那么在此种场景中,StatefulWidget功不可没。
StatelessWidget和StatefulWidget 均继承与我们上面说的Widget,不同的是StatefulWidget添加了一个新的接口createState(),也就是我们说的状态。当State被改变的时候我们可以调用setState() 去通知框架状态改变,Flutter会从新调用build方法从新构建widget,从而刷新UI。
三。StatefulWidget使用1. 根据接口api刷新数据
2.暴露方法供其他组件调用
一般的使用方法就是在外部获取StatefulWidget的state,从而调用组件内部方法
方式一:
提供of方法根据buildContext获取state
这种方法在flutter的系统组件中大量存在,我们看一个经常用到的Scaffold
比如我们要调用Scaffold的openDraw() 打开侧滑抽屉,就可以使用Scaffold.of(context) 获取State
我们再实际开发中也可以仿照这样的方式 方式二:通过GlobalKey获取state 这种方式也是我们的常用方式,跟vue中key的使用概念是一样的,不过Globalkey的开销相对较大,尽可能尽量少用
方式三:将state直接暴露出去 这个作者比较经常用,觉得挺方便的。比如需要自定义可变头部组件,然后可以在头部组件调用state的方法
在使用的时候 就可以把state传入到头部组件,在mainItem组件调用EditWidget的内部方法xxFunction()。
3. 在组件加载完成后调用方法 WidgetsBinding 这个我们在之前的文章有提到过,
在下一帧开始之前调用 了该方法,可以像如下使用:
具体使用场景可以在自己的项目实践中挖掘。
结语:Widget很大,本文也只是对重点概念和使用场景做了概述,为后面的文章做一些铺垫
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 3:43:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |