Flutter(八)——状态管理(一)

简介: Flutter(八)——状态管理(一)

前言


在学习完Flutter的常用组件之后,我们对这些组件的使用都有了一定的了解。但是,只是了解还是不够的,因为我们的数据是动态的,具备交互性,界面上的展示会根据用户的操作产生变化。这个时候,就需要对Flutter的状态管理机制有一定的了解,我们先来看一张图:

Flutter一切皆是组件,而组件Widget主要被划分为StatelessWidget和StatefulWidget两大类,下面将分辨介绍一下两类组件。


Widget


我们使用Flutter开发过程中,会出现布局层级。不管这个界面是简单的,还是复杂的,都会有布局的嵌套层级,这样的布局我们称为Widget树,并且在Widget之间存在这“父子”关系。其实Widget只是起到“描述”的作用,真正在屏幕上显示给用户看的UI是Element,Widget只是描述了Element的数据配置,Widget树的层级展现形式如下:

如果一个Widget存在子Widget,那么上一层的Widget就是父Widget,父Widget里面的则是子Widget。在实际开发中,我们会遇到复杂的布局情况,这个时候,不妨记住这颗布局树,回想一下,就会清晰了。


Context


做过Java开发的,应该清楚这个Context,因为用的最多,就是上下文的意思。Context对应的是,构建Widget树结构中具体某一个Widget的位置引用,并且它被视为Widget一部分,而每个Context只对应一个Widget。如果一个Context对应的是父Widget A,则Widget A对应的Context也包含了子Widget的Context。通过Context可以遍历和查找当前Widget树,Context之间也是关联在一起的,它们组成一颗Context树。


StatelessWidget


StatelessWidget即无状态的Widget,它无法通过setState设置组件的状态,其写法通过继承StatelessWidget,然后重写build函数来实现。对于其内部属性,应该声明为final,以防止被意外改变,例如:

class MyStatelessWidget extends StatelessWidget{
  MyStatelessWidget({
  Key key;
  this.parameter,
  }):super(key:key);
  final parameter;
  @override
  Widget build(BuildContext context){
  return new ....
  }
}


上面的代码中parameter参数只能传递一次,之后就无法被修改了。它的生命周期非常简单,就两部:1.初始化,2.通过build进行渲染。


StatefulWidget


StatefulWidget是有状态的Widget。当我们创建一个StatefulWidget组件时,它同时也创建了一个State对象,并且StatefulWidget通过与State关联可以达到刷新UI的目的。我们看一下官方的一个图示:

和React/Vue中的Reactive思想相似,但是还是有区别的,StatefulWidget只需要调用setState(…)方法,而不需要调用类似Android里的textView.setText(…)方法。某些组件在其生命周期里,内部数据会发生变化,基于这种情况,我们应该考虑使用StatefulWidget。


StatefulWidget的组成


StatefulWidget由两部分组成,第一部分为主体部分,代码如下所示:

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;
  @override
  _MyHomePageState createState() => _MyHomePageState();
}


在主体部分里Widget继承了StatefulWidget的内容。在主体部分中创建的变量是无法变更的,第二部分代码如下:

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    ..........
  }
}


MyHomePageState前面以""开头,证明这个类为私有,可以通过widget.{name of the variable}格式访问第一部分里定义的变量,比如widget.title。


State


State是对StatefulWidget的行为和布局的描述,和StatefulWidget存在一一对应的关系。有时候StatefulWidget的组件需要改变其界面的表现形式,这个时候就可以通过setState(…)来改变。Flutter为我们做的服务功能非常全面,改变的过程只需要由Framework层控制,从而达到更新UI的目的。

相关文章
|
2月前
|
存储 JavaScript 前端开发
盘点主流 Flutter 状态管理库2024
状态管理是每个应用不可缺少的,本文将会盘点下主流的状态管理包。
盘点主流 Flutter 状态管理库2024
|
6月前
|
Dart Android开发 UED
带你读《深入浅出Dart》二十七、Flutter路由管理
带你读《深入浅出Dart》二十七、Flutter路由管理
|
7月前
|
存储 Dart 数据库
重识Flutter状态管理 — 探索Flutter中的状态
我遇到过很多没有了解过响应式编程框架的,或者从事后端开发,自己想用Flutter写个app玩玩的朋友,一上来,不管在哪里都用`setState`,我问为啥不用状态管理,大部分都回了一句:啥是状态管理?
|
7月前
|
存储 数据库 索引
Flutter笔记:滚动之-无限滚动与动态加载的实现(GetX简单状态管理版)
本文介绍Flutter中如何实无线滚动(基于GetX简单状态管理而非有状态组件)
69 0
|
4月前
|
Dart
Flutter状态管理:RxDart,详细介绍
Flutter状态管理:RxDart,详细介绍 RxDart是一个基于Dart语言的响应式编程库,它提供了一套用于处理异步事件序列的工具。在Flutter应用中,RxDart可以很好地用于管理应用状态。
|
4月前
|
存储 前端开发
Flutter Provider状态管理---MVVM架构实战
Flutter Provider状态管理—MVVM架构实战 在Flutter中,状态管理是一个非常重要的概念。Flutter Provider是一种状态管理的解决方案,它提供了一种简单,灵活和高效的方法来管理Flutter应用程序中的状态。本文将详细介绍Flutter Provider的使用,以及如何在MVVM架构中使用它。
154 0
|
3月前
|
Linux 开发者 iOS开发
Flutter笔记:桌面端应用多窗口管理方案
Flutter笔记:桌面端应用多窗口管理方案
115 0
|
3月前
|
编解码 缓存 调度
Flutter笔记:Flutter的应用生命周期状态(lifecycleState)管理
Flutter笔记:Flutter的应用生命周期状态(lifecycleState)管理
74 0
|
4月前
|
API
Flutter状态管理终极方案GetX第一篇——路由
Flutter状态管理终极方案GetX第一篇——路由 GetX是Flutter中一个非常流行的状态管理库,它不仅提供了简单易用的状态管理功能,还可以帮助我们方便地管理路由。在这篇文章中,我们将介绍如何使用GetX来实现路由管理。
141 0
|
4月前
|
开发者
Flutter状态管理终极方案GetX第二篇——状态管理
Flutter状态管理终极方案GetX第二篇——状态管理 在Flutter应用程序中,状态管理是必不可少的。GetX提供了简单易用的状态管理方案,使得开发者可以更加轻松地管理应用程序状态。下面介绍GetX中的状态管理方案。
107 0