Flutter--状态管理机制
  45VoiS2mj7n5 2023年11月02日 55 0


简介

  • Flutter的一些组件我们用了三天左右有了部分了解,在日后的工作学习中使用到了,我们可以再进行深入了解。平时我们呢使用的数据是动态的,所以我们在了解组件的同时,我们还需要对状态管理机制有一些了解

Widget唯一标识

  • 在Flutter中,每个Widget都有一个唯一标识key,它在FrameWork层创建和渲染时生成,可以通过 GlobalKey、LocalKey、UniqueKey和ObjectKey对Widget的key进行保存
GlobalKey myKey = new GlobalKey();
@override
Widget build(BuildContext context) {
return new MyWidget(
key : myKey
);
}

InheritedWidget

  • 它是一个被定义为父节点的Widget,其暴露出来的数据,可以高效的在Widget树从上到下传递和共享,同时支持跨级数据传递

Widget树

  • Widget之间存在的嵌套层级形成了Widget树,Widget只是描述Element的数据配置,真正在屏幕上呈现给用户的UI是Element

Context

  • Context对应Widget中具体某一个Widget的位置引用,父Widget的Context包含子Widget的Context,通过Context可以便利和查找当前Widget树,Context之间也是关联在在一起的,他们也可以组成和Widget树类似的Context树

StatelessWidget

  • StatelessWidget即无状态的Widget,它无法通过setState设置组件状态进行重绘,它内的属性应该被声明为final,防止改变
生命周期

初始化->build进行渲染

StatefulWidget

  • StatefulWidget是有状态的Widget,创建一个StatefulWidget组件时,它同时创建一个State对象,通过与State关联可以达到刷新UI的目的
组成:
  • 主体部分:
class HttpPage extends StatefulWidget {
HttpPage({Key key}) : super(key: key);
_HttpPageState createState() => _HttpPageState();
}
  • 第二部分
class _HttpPageState extends State<HttpPage> {
@override
Widget build(BuildContext context) {
// TODO: implement build
return ...

State

  • 在Flutter中,Widget和State具有不同的生命周期: Widget是临时对象,用于构建当前状态下的应用程序,而State对象在多次调用build()之间保持不变,允许它们保存信息(状态)

State生命周期

Flutter--状态管理机制_flutter

class MyLifePage extends StatefulWidget {
@override
_MyLifePageState createState() => _MyLifePageState();
}


class _MyLifePageState extends State<MyLifePage> {
@override
void initState() {
// TODO: implement initState
super.initState();
print("initState");
}


@override
Widget build(BuildContext context) {
print("build");
return Container(
child: Text("life"),
);
}


@override
void didChangeDependencies() {
// TODO: implement didChangeDependencies
print("didChangeDependencies");
super.didChangeDependencies();
}


@override
void reassemble() {
// TODO: implement reassemble
print("reassemble");
super.reassemble();
}


@override
void didUpdateWidget(MyLifePage oldWidget) {
// TODO: implement didUpdateWidget
print("didUpdateWidget");
super.didUpdateWidget(oldWidget);
}


@override
void deactivate() {
// TODO: implement deactivate
print("deactivate");
super.deactivate();
}


@override
void dispose() {
// TODO: implement dispose
print("dispose");
super.dispose();
}
}
  • 首次启动界面:
  • initState -> didChangeDependencies -> build
  • 首次启动后点击热重载
  • reassemble -> didUpdateWidget -> build
  • 退出界面
  • deactivate -> dispose
  • A跳转至其他页面B
  • B : initState -> didChangeDependencies -> build
  • A: deactivate -> build
initState
  • initState是State生命周期中第一个被执行的方法,且在生命周期中只会被执行一次, 注意此时FrameWork层还未把Context和State关联在一起,不可访问Context
didChangeDeoendencies
  • 该方法在执行完initState后被执行,此时可以访问Context
build
  • build方法在didChangeDependencies和didUpdateWidget之后被执行,每当界面重绘调用setState的时候都会被执行
dispose
  • 该方法在组件被销毁的时候调用


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  b1UHV4WKBb2S   2023年11月13日   34   0   0 裁剪ideflutter
  b1UHV4WKBb2S   2023年11月13日   27   0   0 flutterDart
  zSWNgACtCQuP   2023年11月13日   32   0   0 ide
45VoiS2mj7n5