测试定时任务

作者:妄动 更新时间:2025/11/23 0:30:03 字数:1432

状态管理是一个相当复杂的话题。如果你在浏览后发现一些问题并未得到解答,或者并不适用于你的具体需求场景,自信些,你的实现就是对的。

通过下面的资源了解更多的信息,其中有很多内容都是由社区(第三方)提供。

总体概览

在选择一个具体内容前,你可以先查看以下几项。

状态管理的介绍。这是本篇内容的总起。(当你直接跳转到了该页面,但错过了其他页面时,可以先从这里开始阅读)

Flutter 实用状态管理 (Pragmatic State Management in Flutter),来自 Google I/O 2019 的介绍视频。

Flutter 架构实例 (Flutter Architecture Samples), Brian Egan 著。

内置的方式

setState

用于 Widget 临时状态的基础方式。

为你的 Flutter 应用添加交互 (Adding interactivity to your Flutter app),一篇 Flutter 的教程。

Flutter 中的基础状态管理 (Basic state management in Google Flutter), Agung Surya 著。

ValueNotifier 和 InheritedNotifier

一种完全使用 Flutter 提供的 API 来更新状态并通知 UI 更新的方式。

State Management using ValueNotifier and InheritedNotifier, by Tadas Petra

InheritedWidget 和 InheritedModel

Widget tree 中不同层级间的 widget 通信的基础方法。这是诸如 package:provider 等众多方法的底层实现。

简单的应用状态管理

数据调用和后端

状态 (State) 管理

简单的应用状态管理

现在大家已经了解了 声明式的编程思维 和 短时 (ephemeral) 与应用 (app) 状态 之间的区别,现在可以学习如何管理简单的全局应用状态。

在这里,我们打算使用 provider package。如果你是 Flutter 的初学者,而且也没有很重要的理由必须选择别的方式来实现(Redux、Rx、hooks 等等),那么这就是你应该入门使用的。provider 非常好理解而且不需要写很多代码。它也会用到一些在其它实现方式中用到的通用概念。

即便如此,如果你已经从其它响应式框架上积累了丰富的状态管理经验的话,那么可以在 状态 (State) 管理参考 中找到相关的 package 和教程。

示例

An animated gif showing a Flutter app in use. It starts with the user on a login screen. They log in and are taken to the catalog screen, with a list of items. The click on several items, and as they do so, the items are marked as "added". The user clicks on a button and gets taken to the cart view. They see the items there. They go back to the catalog, and the items they bought still show "added". End of animation.

为了演示效果,我们实现下面这个简单应用。

这个应用有两个独立的页面:一个类别页面和一个购物车页面(分别用 MyCatalog,MyCart widget 来展示)。虽然看上去是一个购物应用程序,但是你也可以和社交网络应用类比(把类别页面替换成朋友圈,把购物车替换成关注的人)。

类别页面包含一个自定义的 app bar (MyAppBar) 以及一个包含元素列表的可滑动的视图 (MyListItems)。

这是应用程序对应的可视化的 widget 树。

局部状态和全局应用状态的区别

数据调用和后端

状态 (State) 管理

区分局部状态和全局应用状态

本文将介绍应用 (app) 状态、短时 (ephemeral) 状态,以及在一个 Flutter 应用中你可以如何应用这两种状态。

广义上来讲,一个应用的状态就是当这个应用运行时存在于内存中的所有内容。这包括了应用中用到的资源,所有 Flutter 框架中有关用户界面、动画状态、纹理、字体以及其他等等的变量。这个对于状态广义的定义是有效的,但是它对于构建一个应用来说并不是很有用。

首先,你不需要管理一些状态(例如纹理),框架本身会替你管理。所以对于状态的更有用的定义是 “当任何时候你需要重建你的用户界面时你所需要的数据”。其次,你需要自己 管理 的状态可以分为两种概念类型:短时 (ephemeral) 状态和应用 (app) 状态。

短时状态

短时状态(有时也称 用户界面 (UI) 状态 或者 局部状态)是你可以完全包含在一个独立 widget 中的状态。

这是一个有点儿模糊的定义,这里有几个例子。

一个 PageView 组件中的当前页面

一个复杂动画中当前进度

一个 BottomNavigationBar 中当前被选中的 tab

widget 树中其他部分不需要访问这种状态。不需要去序列化这种状态,这种状态也不会以复杂的方式改变。

换句话说,不需要使用状态管理架构(例如 ScopedModel, Redux)去管理这种状态。你需要用的只是一个 StatefulWidget。

在下方你可以看到一个底部导航栏中当前被选中的项目是如何被被保存在 _MyHomepageState 类的 _index 变量中。在这个例子中,_index 是一个短时状态。


设置
阅读主题:
字体大小:
字体格式:
简体 繁体
页面宽度:
手机阅读
菠萝包轻小说

iOS版APP
安卓版APP

扫一扫下载