Flutter for OpenHarmony:Flutter 三方库 riverbloc — 融合 Bloc 与 Riverpod 的架构实践(适配鸿蒙 HarmonyOS Next ohos)

Flutter for OpenHarmony:Flutter 三方库 riverbloc — 融合 Bloc 与 Riverpod 的架构实践(适配鸿蒙 HarmonyOS Next ohos)

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net

在这里插入图片描述

前言

在鸿蒙(OpenHarmony)中大型项目中,开发者常在 Bloc 的严谨性与 Riverpod 的灵活性之间权衡。riverbloc 作为桥接库,允许将 Bloc 作为 Provider 管理,兼具了事件溯源与全局依赖注入的优势,是构建可维护业务中枢的理想选择。

一、核心价值

1.1 基础概念

riverbloc 引入了 BlocProvider 系列函数,使 Bloc 融入 Riverpod 的依赖树。

State 输出

ref.watch

ref.read.add(Event)

Riverpod ProviderContainer

riverbloc 桥接层

触发业务逻辑

Riverpod 监听者

鸿蒙 UI 页面

1.2 进阶概念

  • State Sync (状态同步):Riverpod 会自动监听 Bloc 的状态流,并将最新状态同步给订阅的 Widget,无需显式的 BlocBuilder
  • Scoped Injection:利用 Riverpod 轻松在鸿蒙应用的不同层级注入特定的 Bloc 实例。

二、核心 API / 组件详解

2.1 创建 Bloc 并定义 Provider

在鸿蒙工程中,先写好经典的 Cubit:

import'package:riverbloc/riverbloc.dart';// 1. 定义基础的 CubitclassCounterCubitextendsCubit<int>{CounterCubit():super(0);voidincrement()=>emit(state +1);}// 2. ✅ 重点:将其包装为 Riverpod Providerfinal counterProvider =BlocProvider((ref)=>CounterCubit());
在这里插入图片描述

2.2 在 UI 中通过 Provider 操作 Bloc

voidonAction(WidgetRef ref){// 💡 获取 Bloc 实例执行逻辑 ref.read(counterProvider.notifier).increment();}
在这里插入图片描述

三、场景示例

3.1 场景一:鸿蒙级应用的“多模块复合”状态

当一张复杂的订单页面需要同时引用“用户信息 Bloc”和“商品明细 Bloc”动态计算总价时。

final totalPriceProvider =Provider((ref){// 💡 技巧:利用 Riverpod 的 ref.watch 聚合多个 Bloc 的状态final userOrder = ref.watch(orderBlocProvider);final discount = ref.watch(couponBlocProvider);return userOrder.total - discount.value;});
在这里插入图片描述

四、OpenHarmony 平台适配挑战

4.1 内存自动释放与单例膨胀

Bloc 往往包含大量的业务缓冲区。如果在一个鸿蒙长生命周期的应用中无节制使用。

适配策略建议

  1. Auto-Disposeriverbloc 支持 BlocProvider.autoDispose。当鸿蒙页面销毁后,Bloc 实例也会自动执行 close(),防止内存泄露。
  2. Provider Scope 隔离:在鸿蒙的分屏(Multi-Window)或特定 Tab 页面下,利用 ProviderScope 的覆盖能力为不同的小窗口提供独立的业务 Bloc。

五、综合实战示例代码

这是一个包含了“自动增量”逻辑的鸿蒙业务计算器:

import'package:flutter/material.dart';import'package:flutter_riverpod/flutter_riverpod.dart';import'package:riverbloc/riverbloc.dart';// 1. 定义业务逻辑classThemeCubitextendsCubit<Color>{ThemeCubit():super(Colors.blue);voidtoggle()=>emit(state ==Colors.blue ?Colors.orange :Colors.blue);}// 2. 注入 Providerfinal themeBlocProvider =BlocProvider((ref)=>ThemeCubit());classHarmonyAppextendsConsumerWidget{constHarmonyApp({super.key});@overrideWidgetbuild(BuildContext context,WidgetRef ref){// 💡 监听状态变化:直接像 Riverpod 一样使用 watchfinal currentColor = ref.watch(themeBlocProvider);returnScaffold( appBar:AppBar(backgroundColor: currentColor, title:constText('Riverbloc 鸿蒙架构实战')), body:Center( child:ElevatedButton( onPressed:()=> ref.read(themeBlocProvider.notifier).toggle(), child:constText('点击切换 Bloc 状态(Riverpod 观察)'),),),);}}
在这里插入图片描述

六、总结

riverbloc 满足了鸿蒙开发者对“严谨性”和“灵活性”的双重追求。它让复杂的 BLoC 设计模式能在 Riverpod 及其便捷的 DI 环境中重获新生。

核心建议

  1. 涉及核心财务、交易等需要严密审计的逻辑,用 Bloc 编写并用 riverbloc 注入。
  2. 每一个 Bloc 业务块都尽量开启 autoDispose

Read more

Java字符串算法核心攻略

Java字符串算法核心攻略

Java字符串算法核心攻略 提示:在 ASCII 码(美国信息交换标准代码)中,大小写英文字母和数字的十进制数值范围如下: * 大写字母 (A - Z):65 到 90 * ‘A’ 是 65 * ‘Z’ 是 90 * 小写字母 (a - z):97 到 122 * ‘a’ 是 97 * ‘z’ 是 122 * 数字是 (0-9):48 到 57 * ‘0’ 是 48 * ‘9’ 是 57 一、必会的字符串方法 刷题前先把这些方法练熟,后面会反复用到。 1.

By Ne0inhk
【动态规划】买卖股票相关问题

【动态规划】买卖股票相关问题

一、买卖股票的最佳时机含手续费 714. 买卖股票的最佳时机含手续费 题目描述: 题目分析: 1、状态分析 其实一共就只有两种状态,不是处于 持有 状态,就是处于 未持有 状态。 * f[i]表示第i天结束后,处于 持有 状态时,最大的利润 * g[i]表示第i天结束后,处于 未持有 状态时,最大的利润 2、状态转移方程 对于f[i],有两种情况可以到达这种状态: * 在第 i-1 天时就已处于 持有 状态,然后第 i 天啥也不干,仍然保持 持有 状态。此时的最大利润就为 f[i - 1]

By Ne0inhk
从冒泡到模拟q sort函数——初见排序算法的探索和思考

从冒泡到模拟q sort函数——初见排序算法的探索和思考

国庆中秋喜相连,万家团圆乐同庆。 各位小伙伴们大家好,我是此方,在此,先祝大家双节快乐! 我们都知道排序有很多种:例如冒泡排序,插入排序,快速排序,等等很多种。 而冒泡排序,是各种计算机语言中最经典的一种排序算法。 今天我将从冒泡排序开始,到实现qsort函数的模拟。逐层深入,探索排序问题。 并给出鄙人的一些拙见。 上正文: 一,冒泡排序:最经典的排序算法 假如有一个十元素整型数组,他是完全倒着排序的:就像这样 now,我们要按照从小到大的顺序将这十个数字重新排列。 如果我们想要用冒泡排序:那么他的逻辑应该是这样的: 首先让最左边的数字和他右边的数字比较:9>8,将9和8互换位置: 让9继续和他右边的数字比较,再互换位 以此类推:9不断的比较——>移动——>再比较:最后;会到达最右边,这样,我们就让最大的数字9放在了最低位置 然后是8,接下来是7,6,5.

By Ne0inhk
算法思想之深度优先搜索(DFS)、递归以及案例(最多能得到多少克黄金、精准核酸检测、最富裕的小家庭)

算法思想之深度优先搜索(DFS)、递归以及案例(最多能得到多少克黄金、精准核酸检测、最富裕的小家庭)

深度优先搜索(DFS)、递归 * 深度优先搜索(Depth First Search,DFS)是一种用于遍历或搜索树或图的算法。在 DFS 算法中,从起始节点开始,沿着一条路径尽可能深地访问节点,直到到达叶子节点或者无法继续前进为止。然后退回到最近的一个有未探索节点的分支节点,继续探索其他路径,直到所有节点都被访问过为止。 * 深度优先搜索常常用于解决以下类型的问题:深度优先搜索是一种简单而强大的算法,可以解决许多实际问题。 * 图遍历:在无向图或有向图中寻找特定节点之间的路径、判断图的连通性等。 * 连通性问题:判断图中是否存在环、判断图的强连通分量等。 * 组合问题:生成排列、组合或子集等组合型问题。 * 寻路问题:求解从起始点到目标点的最短路径或所有可行路径。 * 递归问题:通过递归实现深度优先搜索,例如二叉树的遍历等。 小华最多能得到多少克黄金 * 题目描述小华按照地图去寻宝,地图上被划分成 m 行和 n 列的方格,横纵坐标范围分别是 [0, n-1] 和 [0, m-1]。在横坐标和纵坐标的数位之和不大于 k

By Ne0inhk