HarmonyOS鸿蒙Next中fish-redux插件适配

HarmonyOS鸿蒙Next中fish-redux插件适配 问题描述: Flutter插件 fish-redux : Flutter 是一个基于 Redux 状态管理的集成式 Flutter 应用程序框架, 鸿蒙端缺少适配

问题现象: Flutter插件 fish-redux : Flutter 是一个基于 Redux 状态管理的集成式 Flutter 应用程序框架, 鸿蒙端缺少适配

版本信息: Flutter ohos分支

插件链接: https://github.com/alibaba/fish-redux

cke_2084.png


更多关于HarmonyOS鸿蒙Next中fish-redux插件适配的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

开发者您好,
fish-redux测试可以在Flutter 3.7.12 ohos Dart 2.19.6,上正常运行
通过在pub仓搜索并下载下源码后,我们可以按照以下的方法判断三方库是否是纯Dart库:

  • 当目录中有其他平台目录时,且存在ohos目录,那么该库不是纯Dart库,且已适配ohos,可以直接使用。
  • 当目录中有其他平台目录时,且不存在ohos目录,那么该库不是纯Dart库,可以将该库拿到OpenHarmony平台已兼容库packages三方库列表中查询是否已适配,如果查询不到结果则无法使用。
  • 当目录中没有其他平台目录时,且全局搜索Dart代码中存在Platform判断是其他平台的代码,那么该库不是纯Dart库,需要针对这部分代码进行适配ohos相关代码。
  • 当目录中没有其他平台目录时,且全局搜索Dart代码中不存在Platform判断是其他平台的代码,那么该库是纯Dart库。
  • 判断完该三方库是纯Dart库后,仍然需要通过pubspec.yaml查看其间接依赖的三方库,再参考上述步骤继续分析这些间接依赖的库是否是纯Dart库,具体场景如下:
    • 所有间接依赖都是纯Dart库:该库可以直接使用。
    • 间接依赖的三方库已适配ohos:该库可以直接使用,但需要在Flutter项目中的pubspec.yaml使用dependency_overrides替换间接依赖的三方库为已适配ohos的版本。
    • 间接依赖的三方库未适配ohos:该三方库无法直接使用,需要先将间接依赖的三方库适配ohos。

测试代码:

import 'package:fish_redux/fish_redux.dart';
import 'package:flutter/material.dart' hide Action, Page;

class CounterState implements Cloneable<CounterState> {
  int count = 0;

  @override
  CounterState clone() {
    return CounterState()..count = count;
  }
}

CounterState initState(Map<String, dynamic> args) {
  return CounterState()..count = 0;
}

// Action: 定义动作枚举
enum CounterAction { increment }

class CounterActionCreator {
  static Action onIncrement() {
    return const Action(CounterAction.increment);
  }
}

// Reducer: 处理同步状态改变
CounterState buildReducer(CounterState state, Action action) {
  if (action.type == CounterAction.increment) {
    return state.clone()..count = state.count + 1;
  }
  return state;
}

// View: 构建 UI 界面
Widget buildView(
    CounterState state, Dispatch dispatch, ViewService viewService) {
  return Scaffold(
    appBar: AppBar(title: const Text('Fish-Redux')),
    body: Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          const Text('当前计数:'),
          Text('${state.count}', style: const TextStyle(fontSize: 40)),
        ],
      ),
    ),
    floatingActionButton: FloatingActionButton(
      onPressed: () => dispatch(CounterActionCreator.onIncrement()),
      child: const Icon(Icons.add),
    ),
  );
}

// Page: 组装所有组件
class CounterPage extends Page<CounterState, Map<String, dynamic>> {
  CounterPage()
      : super(
          initState: initState,
          reducer: asReducer<CounterState>({
            CounterAction.increment: buildReducer,
          }),
          view: buildView,
        );
}

// 运行入口
void main() => runApp(createApp());

Widget createApp() {
  return MaterialApp(
    title: 'Fish-Redux Demo',
    home: CounterPage().buildPage(null), // 构建并显示页面
  );
}

更多关于HarmonyOS鸿蒙Next中fish-redux插件适配的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS NEXT中适配fish-redux需注意:使用ArkTS重写插件逻辑,因旧版JS/eTS不再兼容;手动实现Reducer、Effect和Middleware的TypeScript接口;利用@ohos/hvigor管理依赖,移除Java桥接层;状态管理改用@State + @Prop装饰器替代Flux结构。若插件依赖原生库,需用NAPI重写C++逻辑。

fish-redux 是一个纯 Dart 实现的 Flutter 状态管理框架,不涉及平台特定代码,理论上可在任何 Flutter 支持的平台上运行。但 HarmonyOS Next 上的 Flutter ohos 分支目前仍处于早期适配阶段,部分 Dart 语言特性、编译工具链或 Flutter 引擎行为可能与标准 Flutter 存在差异,导致 fish-redux 无法直接编译或运行时异常,表现为“缺少适配”。这是引擎层兼容性所致,而非插件本身需要平台通道。目前,fish-redux 在 HarmonyOS Next 上暂不可用,需等待 ohos 分支与上游 Flutter 主干同步成熟,或社区进行针对性移植验证。

回到顶部