Flutter 基础篇(二)—— Widget(1)
- 一个
Widget对象可以对应多个Element对象,因为同一份配置可以创建多个实例。
Widget 是一个抽象类,在 Dart 语言中,没有 interface 这个关键字,接口是通过抽象类来表示的。
先来看 Widget 的声明:
@immutable
abstract class Widget extends DiagnosticableTree {
const Widget({ this.key });
final Key key;
@protected
Element createElement();
@override
String toStringShort() {
return key == null ? ‘ r u n t i m e T y p e ′ : ′ runtimeType' : ' runtimeType′:′runtimeType-$key’;
}
@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties.defaultDiagnosticsTreeStyle = DiagnosticsTreeStyle.dense;
}
static bool canUpdate(Widget oldWidget, Widget newWidget) {
return oldWidget.runtimeType == newWidget.runtimeType
&& oldWidget.key == newWidget.key;
}
}
-
Widget类继承了DiagnosticableTree(诊断树),主要作用是提供调式信息。 -
属性
key类似于React或Vue中的key,主要的作用是决定是否在下一次build时复用旧的widget,决定条件在canUpdate()中。 -
createElement():Flutter在构建UI树时,会先调用此方法生成对应节点的Element对象。该方法是Flutter隐式调用的,在开发过程我们很少会使用。 -
debugFillProperties():复写父类的方法,主要是设置诊断树的一些特性。 -
canUpdate():一个静态方法,它用于Widget树重新build时复用旧的widget,具体的说,是否用新的widget对象去更新旧UI树上所对应的Element。通过上面的源码发现,只有oldWidget与newWidget中的runtimeType和key都对应相等时,才会用newWidget更新Element对象的配置。
需要注意的是,我们一般不会直接继承 Widget 这个类,而是继承 StatelessWidget 或 StatefulWidget 来间接继承 Widget 。其中,前者表示无状态组件,后者表示有状态组件。
StatelessWidget 用于表示一个无状态的 Widget ,它继承自 Widget 类,重写了 createElement():
@override
StatelessElement createElement() => new StatelessElement(this);
StatelessWidget 用于不需要维护状态的场景,它通常在 build 方法中通过嵌套其他 Widget 来构建 UI ,在构建过程中会递归的构建其嵌套的 Widget。
StatefulWidget 用于表示一个有状态的 Widget,它继承自 Widget,并重写了 createElement(),此外,类中添加了一个新的接口 createState() :
结语
- 现在随着短视频,抖音,快手的流行NDK模块开发也显得越发重要,需要这块人才的企业也越来越多,随之学习这块的人也变多了,音视频的开发,往往是比较难的,而这个比较难的技术就是NDK里面的技术。
- 音视频/高清大图片/人工智能/直播/抖音等等这年与用户最紧密,与我们生活最相关的技术一直都在寻找最终的技术落地平台,以前是windows系统,而现在则是移动系统了,移动系统中又是以Android占比绝大部分为前提,所以AndroidNDK技术已经是我们必备技能了。
- 要学习好NDK,其中的关于C/C++,jni,Linux基础都是需要学习的,除此之外,音视频的编解码技术,流媒体协议,ffmpeg这些都是音视频开发必备技能,而且
- OpenCV/OpenGl/这些又是图像处理必备知识,下面这些我都是当年自己搜集的资料和做的一些图,因为当年我就感觉视频这块会是一个大的趋势。所以提前做了一些准备。现在拿出来分享给大家。


网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
https://bbs.csdn.net/topics/618156601)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
更多推荐

所有评论(0)