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的目的。

相关文章
|
26天前
|
存储 JavaScript 前端开发
在Flutter开发中,状态管理至关重要。随着应用复杂度的提升,有效管理状态成为挑战
在Flutter开发中,状态管理至关重要。随着应用复杂度的提升,有效管理状态成为挑战。本文介绍了几种常用的状态管理框架,如Provider和Redux,分析了它们的基本原理、优缺点及适用场景,并提供了选择框架的建议和使用实例,旨在帮助开发者提高开发效率和应用性能。
34 4
|
1月前
|
存储 Shell 开发工具
Flutter&鸿蒙next 中使用 MobX 进行状态管理
本文介绍了如何在 Flutter 中使用 MobX 进行状态管理。MobX 是一个基于观察者模式的响应式编程库,通过 `@observable` 和 `@action` 注解管理状态,并使用 `Observer` 小部件自动更新 UI。文章详细讲解了 MobX 的核心概念、如何集成到 Flutter 项目中以及具体的代码示例。适合希望在 Flutter 应用中实现高效状态管理的开发者阅读。
100 9
|
1月前
|
存储 开发者
Flutter&鸿蒙next 使用 BLoC 模式进行状态管理详解
本文详细介绍了如何在 Flutter 中使用 BLoC 模式进行状态管理。BLoC 模式通过将业务逻辑与 UI 层分离,利用 Streams 和 Sinks 实现状态管理和 UI 更新,提高代码的可维护性和可测试性。文章涵盖了 BLoC 的基本概念、实现步骤及代码示例,包括定义 Event 和 State 类、创建 Bloc 类、提供 Bloc 实例以及通过 BlocBuilder 更新 UI。通过一个简单的计数器应用示例,展示了 BLoC 模式的具体应用和代码实现。
85 1
|
1月前
|
开发工具 开发者
Flutter&鸿蒙next 状态管理高级使用:深入探讨 Provider
本文深入探讨了 Flutter 中 Provider 的高级用法,涵盖多 Provider 组合、Selector 优化性能、ChangeNotifierProxyProvider 管理依赖关系以及自定义 Provider。通过这些技巧,开发者可以构建高效、可维护的响应式应用。
81 2
|
2月前
|
开发工具 开发者
Flutter&鸿蒙next 状态管理高级使用:深入探讨 Provider
Flutter&鸿蒙next 状态管理高级使用:深入探讨 Provider
|
1月前
|
缓存 JavaScript API
Flutter&鸿蒙next 状态管理框架对比分析
在 Flutter 开发中,状态管理至关重要,直接影响应用的性能和可维护性。本文对比分析了常见的状态管理框架,包括 setState()、InheritedWidget、Provider、Riverpod、Bloc 和 GetX,详细介绍了它们的优缺点及适用场景,并提供了 Provider 的示例代码。选择合适的状态管理框架需考虑应用复杂度、团队熟悉程度和性能要求。
109 0
|
2月前
【Flutter】状态管理:Provider状态管理
【Flutter】状态管理:Provider状态管理
24 0
|
2月前
|
UED
flutter:动画&状态管理 (十三)
本文档介绍了Flutter中`animatedList`的使用方法和状态管理的示例。`animatedList`用于创建带有动画效果的列表,示例代码展示了如何添加、删除列表项,并执行相应的动画效果。状态管理部分通过一个简单的点击切换颜色的示例,演示了如何在Flutter中管理组件的状态。
|
5月前
|
容器
flutter 布局管理【详解】
flutter 布局管理【详解】
45 3
|
4月前
Flutter 状态管理新境界:多Provider并行驱动UI
Flutter 状态管理新境界:多Provider并行驱动UI
81 0