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

Python实现 MCP 客户端调用(高德地图 MCP 服务)查询天气示例

Python实现 MCP 客户端调用(高德地图 MCP 服务)查询天气示例

文章目录 * MCP 官网 * MCP 官方文档中文版 * 官方 MCP 服务示例 * Github * MCP 市场 * 简介 * 架构 * 高德地图 MCP 客户端示例 * python-sdk 客户端 * java-sdk 客户端 MCP 官网 * https://modelcontextprotocol.io/introduction MCP 官方文档中文版 * https://app.apifox.com/project/5991953 官方 MCP 服务示例 * https://github.com/modelcontextprotocol/servers Github * python-sdk:https://github.com/modelcontextprotocol/python-sdk * java-sdk:

By Ne0inhk
43-dify案例分享-MCP-Server让工作流秒变第三方可调用服务

43-dify案例分享-MCP-Server让工作流秒变第三方可调用服务

1.前言 之前我们为大家介绍过MCP SSE插件,它能够支持MCP-server在Dify平台上的调用,从而帮助Dify与第三方平台提供的MCP-server进行无缝对接。有些小伙伴提出了疑问:既然Dify可以通过MCP SSE插件调用其他平台的MCP-server,那么Dify的工作流或Chatflow是否也能发布为MCP-server,供其他支持MCP client的工具使用呢?今天,我们将为大家介绍一款Dify插件——mcp-server,它能够实现这一功能,即将Dify的工作流或Chatflow发布为MCP-server,供其他第三方工具调用。 插件名字叫做MCP-server,我们在dify插件市场可以找到这个工具 Mcp-server 是一个由 Dify 社区贡献的 Extension 类型插件。安装后,你可以把任何 Dify 应用转变成符合 MCP 标准的 Server Endpoint,供外部 MCP 客户端直接访问。它的主要功能包括: * **暴露为 MCP 工具:**将 Dify 应用抽象为单一 MCP 工具,供外部 MCP 客户端(如

By Ne0inhk
【MCP】详细了解MCP协议:和function call的区别何在?如何使用MCP?

【MCP】详细了解MCP协议:和function call的区别何在?如何使用MCP?

本文介绍了MCP大模型上下文协议的的概念,并对比了MCP协议和function call的区别,同时用python sdk为例介绍了mcp的使用方式。 1. 什么是MCP? 官网:https://modelcontextprotocol.io/introduction 2025年,Anthropic提出了MCP协议。MCP全称为Model Context Protocol,翻译过来是大模型上下文协议。这个协议的主要为AI大模型和外部工具(比如让AI去查询信息,或者让AI操作本地文件)之间的交互提供了一个统一的处理协议。我们常用的USB TypeC接口(USB-C)统一了USB接口的样式,MCP协议就好比AI大模型中的USB-C,统一了大模型与工具的对接方式。 MCP协议采用了C/S架构,也就是服务端、客户端架构,能支持在客户端设备上调用远程Server提供的服务,同时也支持stdio流式传输模式,也就是在客户端本地启动mcp服务端。只需要在配置文件中新增MCP服务端,就能用上这个MCP服务器提供的各种工具,大大提高了大模型使用外部工具的便捷性。 MCP是开源协议,能让所有A

By Ne0inhk
【大模型系列篇】大模型基建工程:基于 FastAPI 自动构建 SSE MCP 服务器

【大模型系列篇】大模型基建工程:基于 FastAPI 自动构建 SSE MCP 服务器

今天我们将使用FastAPI来构建 MCP 服务器,Anthropic 推出的这个MCP 协议,目的是让 AI 代理和你的应用程序之间的对话变得更顺畅、更清晰。FastAPI 基于 Starlette 和 Uvicorn,采用异步编程模型,可轻松处理高并发请求,尤其适合 MCP 场景下大模型与外部系统的实时交互需求,其性能接近 Node.js 和 Go,在数据库查询、文件操作等 I/O 密集型任务中表现卓越。 开始今天的正题前,我们来回顾下相关的知识内容: 《高性能Python Web服务部署架构解析》、《使用Python开发MCP Server及Inspector工具调试》、《构建智能体MCP客户端:完成大模型与MCP服务端能力集成与最小闭环验证》   FastAPI基础知识 安装依赖 pip install uvicorn, fastapi FastAPI服务代码示例  from fastapi import FastAPI app

By Ne0inhk