计数器

一个计数器应用程序,用于学习 Flutter Bloc 概念

Flutter Bloc 速成短笔记

每次交互时,应用程序都应处于不同的状态。Bloc 有助于管理这些状态

优点

  1. 轻松了解应用程序内部发生的情况
  2. 代码结构更清晰,更易于维护和测试
  3. 了解并理解应用程序的每个状态
  4. 在单一、稳定、流行且有效的 Bloc 代码库上工作

Bloc 核心概念
异步函数 - 生成同步数据
await - 等待进程完成
监听 - 等待传入数据

Cubit 是 Bloc 的最小版本。Bloc 扩展了 cubit。
Cubit 是一种特殊的流组件,基于从 UI 中调用的某些函数。这些函数通过在流上发出不同的状态来重建 UI。Cubic 函数不是流的一部分。它们只是 Kindle 可以做什么的预制列表。状态流是 cubit 中唯一的流。
Bloc 发出状态流。它还接收事件流。
何时使用 Bloc/Cubit?
应用程序的每个功能都应有一个 Bloc 或 cubit 组件。

Flutter Bloc 组件

每个概念都是一个小部件。小部件是具有自身属性和构造函数的类。Bloc 将 Bloc 的单个实例提供给下面的子树。BlocProvider 小部件创建并向其所有子项提供 Bloc。它也称为依赖注入小部件。它以构建上下文作为参数,并且只返回 Bloc 的一个实例。上下文是构建特定小部件的上下文。默认情况下,BlocProvider 会惰性创建 Bloc。要覆盖它,请将 lazy 属性设置为 false。

BlocProvider 会自动处理 Bloc 的关闭部分。

BlocProvider.value - 将 BlocA 的唯一实例提供给树的新部分。

由于 blocA 的唯一实例是在 BlocProvider 创建的地方创建的,它将被 BlocProvider 自动关闭。将其提供给第二个页面(使用 blocprovider.value)不会在第二个页面被销毁时关闭 Bloc 的唯一实例。这是因为该实例可能仍在上层树的父级页面中使用。但是,由于它是第一次创建的方式——通过使用 BlocProvider,因此当需要时,该实例将被关闭。

您可以使用 state 关键字访问 cubit 的当前状态。

Bloc Builder

一个用于根据 Bloc 状态更改重建 UI 的小部件。每次发出新状态时都会刷新 UI。重建大量 UI 可能需要大量计算时间;因此,您应该只重建正在更改的小部件。
由于 Flutter 引擎的工作方式,Builder 函数可以被调用多次。根据 bloc 的 State 返回小部件。Builder 函数必须是纯函数。纯函数是指其返回值仅取决于函数参数而与任何其他因素无关的函数。

buildwhen(previousstate, state)

BlocProvider - 创建 Bloc 的唯一实例并将其提供给子树。
BlocBuilder - 为来自 bloc 的每个新状态重建 UI
BlocListener - 此监听器函数每个状态仅调用一次。可选的 listenWhen 函数
BlocConsumer - 将 BlocBuilder 和 BlocListener 组合成一个单一的小部件。
RepositoryProvider - 提供存储库的唯一实例
MultiBlocProvider, MultiBlocLister, MultiRepositoryProvider

Bloc 架构

Bloc 是一种设计模式,一种状态管理库和一种架构模式。
几乎所有应用程序都从互联网检索数据。我们需要将基于 Bloc 的 Flutter 应用程序与外部数据层链接起来。数据层由存储库、数据提供程序和模型组成。模型数据不应与提供给天气 API 的数据相同。数据提供程序是您应用程序的 API。不同的方法直接从互联网请求数据。
Blocs 可以相互通信。

Bloc 测试

优缺点 - 决定其优点是否值得其缺点。学习和理解结构。
在 Dart 中,同一类的两个实例即使值相同,也不相等。使用 equitable 库。
Pub run test - 运行测试。

GitHub

查看 Github