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

超详细图文教程:用vscode+copilot(代理模式)便捷使用mcp+一个范例:用自然语言进行3d建模

超详细图文教程:用vscode+copilot(代理模式)便捷使用mcp+一个范例:用自然语言进行3d建模

在vscode使用claude mcp吧! 在vscode更新到最新版本(注意,这是前提)后,内置的copilot可以使用mcp了!!! 关于mcp(Model Context Protocol 模型上下文协议),可以参考我的上一篇文章: MCP个人理解+示例+集成管理+在python中调用示例,给AI大模型装上双手-ZEEKLOG博客 以下是使用教程: 1.点击左下角的齿轮状设置按钮,点击设置 2.在输入面板输入chat.agent.enabled,勾上勾选框 3.点击Ctrl+shift+P,输入reload,点击重新加载窗口,刷新窗口 4.打开copilot后,在右下角将模式改为代理即可。 5.点击工具按钮,开始安装mcp 先去github找到自己想要添加的mcp服务,以blender MCP为例,打开https://github.com/ahujasid/blender-mcp,可以在readme文档里看到详细的安装过程。可以看到,

By Ne0inhk
02-mcp-server案例分享-Excel 表格秒变可视化图表 HTML 报告,就这么简单

02-mcp-server案例分享-Excel 表格秒变可视化图表 HTML 报告,就这么简单

1.前言 MCP Server(模型上下文协议服务器)是一种基于模型上下文协议(Model Context Protocol,简称MCP)构建的轻量级服务程序,旨在实现大型语言模型(LLM)与外部资源之间的高效、安全连接。MCP协议由Anthropic公司于2024年11月开源,其核心目标是解决AI应用中数据分散、接口不统一等问题,为开发者提供标准化的接口,使AI模型能够灵活访问本地资源和远程服务,从而提升AI助手的响应质量和工作效率。 MCP Server 的架构与工作原理 MCP Server 采用客户端-服务器(Client-Server)架构,其中客户端(MCP Client)负责与服务器建立连接,发起请求,而服务器端则处理请求并返回响应。这种架构确保了数据交互的高效性与安全性。例如,客户端可以向服务器发送请求,如“查询数据库中的某个记录”或“调用某个API”,而服务器则根据请求类型,调用相应的资源或工具,完成任务并返回结果。 MCP Server 支持动态发现和实时更新机制。例如,当新的资源或工具被添加到服务器时,

By Ne0inhk
将现有 REST API 转换为 MCP Server工具 -higress

将现有 REST API 转换为 MCP Server工具 -higress

Higress 是一款云原生 API 网关,集成了流量网关、微服务网关、安全网关和 AI 网关的功能。 它基于 Istio 和 Envoy 开发,支持使用 Go/Rust/JS 等语言编写 Wasm 插件。 提供了数十个通用插件和开箱即用的控制台。 Higress AI 网关支持多种 AI 服务提供商,如 OpenAI、DeepSeek、通义千问等,并具备令牌限流、消费者鉴权、WAF 防护、语义缓存等功能。 MCP Server 插件配置 higress 功能说明 * mcp-server 插件基于 Model Context Protocol (MCP),专为 AI 助手设计,

By Ne0inhk
MCP 工具速成:npx vs. uvx 全流程安装指南

MCP 工具速成:npx vs. uvx 全流程安装指南

在现代 AI 开发中,Model Context Protocol(MCP)允许通过外部进程扩展模型能力,而 npx(Node.js 生态)和 uvx(Python 生态)则是两种即装即用的客户端工具,帮助你快速下载并运行 MCP 服务器或工具包,无需全局安装。本文将从原理和对比入手,提供面向 Windows、macOS、Linux 的详细安装、验证及使用示例,确保你能在本地或 CI/CD 流程中无缝集成 MCP 服务器。 1. 工具简介 1.1 npx(Node.js/npm) npx 是 npm CLI(≥v5.2.0)

By Ne0inhk