当前位置: 首页 > news >正文

Flutter | 商城项目鸿蒙(OpenHarmony)适配实战

本文记录将原来的flutter商城项目在 Windows + DevEco Studio 环境下,将flutter_shop从「能编译」推进到「首页有数据、登录可用」的完整过程,包括环境配置、运行命令、踩坑与最终方案。
flutte商城项目源码链接:flutter-learn
安卓端适配:Flutter | 项目打包运行在安卓端


一、整体流程概览

安装鸿蒙版 Flutter

配置无空格路径联接

ohos/local.properties

flutter pub get

setup-harmony-env.bat

构建 HAP 并安装

网络与首页适配

登录本地存储适配

阶段目标关键产出
环境SDK、hvigor、ohpm 可用DEVECO_SDK_HOMED:\flutter_ohos
构建assembleHap成功build/ohos/hap/entry-default-signed.hap
运行模拟器安装并启动flutter run --release -d 127.0.0.1:5555
业务首页加载、登录持久化ohos_http_overridesOhosLoginFileStorage

二、环境准备

2.1 必备软件

组件说明
DevEco Studio提供 HarmonyOS SDK、模拟器、hvigor、ohpm
Flutter OHOS 分支非官方 stable,需使用 TPC 提供的flutter_flutter
Gitflutter pub get拉取依赖;建议开启长路径:git config --global core.longpaths true

2.2 解决「路径含空格」问题(核心)

Windows 上若 Flutter / SDK 安装在D:\Program Files\...,Hvigor 拼接flutter.bat时会报:

'D:\Program' 不是内部或外部命令

做法:用目录联接(Junction)映射到无空格路径,并统一使用联接路径。

联接路径指向
D:\flutter_ohosD:\Program Files\harmony_flutter\flutter_flutter(示例)
D:\deveco_sdkD:\Program Files\Huawei\DevEco Studio\sdk

用户环境变量:

DEVECO_SDK_HOME=D:\deveco_sdk

PATH 优先使用:D:\flutter_ohos\bin(避免仍指向D:\Program Files\flutter\bin的官方版 Flutter)。

2.3 项目内鸿蒙配置

ohos/local.properties(无空格路径):

flutter.sdk=D:\\flutter_ohos hwsdk.dir=D:\\deveco_sdk

ohos/setup-harmony-env.bat一键设置环境并运行。

set DEVECO_SDK_HOME=D:\deveco_sdk set "PATH=D:\flutter_ohos\bin;...hvigor...;...ohpm...;%PATH%" cd /d %~dp0.. flutter run --release -d 127.0.0.1:5555 REM release 模式
模式命令说明
调试setup-harmony-env.bat支持热重载,可能遇 DevFS 问题
发布setup-harmony-env.bat release推荐;稳定,日志见hilog/ 控制台

2.4 网络权限(module.json5)

ohos/entry/src/main/module.json5中声明:

"requestPermissions": [ { "name": "ohos.permission.INTERNET", ... }, { "name": "ohos.permission.GET_NETWORK_INFO", ... } ]

注意:勿在module下添加"network": { "cleartextTraffic": true }。当前 SDK 的 schema不支持该字段,会导致hvigor校验失败(property name must be valid)。本项目 API 为 HTTPS,无需明文流量配置。


三、构建与运行步骤

3.1 首次 / 大改后建议流程

cd /d E:\fairy\flutter-learn\project\flutter_shop D:\flutter_ohos\bin\flutter clean D:\flutter_ohos\bin\flutter pub get cd ohos setup-harmony-env.bat release

3.2 成功标志

  • 终端:√ Built build\ohos\hap\entry-default-signed.hap
  • 日志:installing hap. bundleName: com.example.flutter_shop
  • 首页日志:

3.3 常用排错命令

D:\flutter_ohos\bin\flutter doctor D:\flutter_ohos\bin\flutter devices

必须配置好鸿蒙环境后才能运行

配置完环境后,运行

flutter create .

模拟器内用浏览器访问外网,确认模拟器本身能上网;电脑端可测 API:

Invoke-WebRequest-Uri"https://meikou-api.itheima.net/home/banner"-UseBasicParsing

四、业务层鸿蒙适配(Dart)

官方shared_preferencespubspec未声明ohos平台,且鸿蒙上不宜强行接入 TPC 的shared_preferences_ohos(见下文构建问题)。因此网络与存储均在Dart 层做了针对性适配。

4.1 入口:HTTPS 全局配置

文件:lib/utils/ohos_http_overrides.dart
调用:lib/main.dartsetupOhosHttpOverrides()

voidmain(){setupOhosHttpOverrides();runApp(getRootWidget());}

作用:

  • Platform.operatingSystem == 'ohos'时注册HttpOverrides
  • 设置连接超时、开发阶段badCertificateCallback(浏览器能开、Flutter 请求失败时常见)

4.2 网络请求:Dio

文件:lib/utils/DioRequest.dart

要点说明
超时connect/send/receive 均为 12s,外层Future.timeout兜底
响应支持MapStringJSON 自动解析
日志[Dio] GET/POST ...[Dio] 200 ...便于模拟器排错

4.3 首页:顺序请求 + 错误展示

文件:lib/pages/Home/home.dart

问题原因方案
一直转圈5 个接口Future.wait并发,鸿蒙 HTTPS 易挂起TargetPlatform.ohos时改为顺序请求
无错误提示请求未结束,catch不执行整页25s超时 + 红色错误条 + 下拉刷新
重复请求 recommend首屏maxScrollExtent == 0触发滚动监听增加_homeDataReady、判断maxScrollExtent > 0

4.4 登录存储:鸿蒙专用文件方案

文件:

  • lib/utils/ohos_login_storage.dart— JSON 写入Directory.systemTemp
  • lib/utils/LoginStorage.dart— 检测鸿蒙后走文件存储,其它平台仍用shared_preferences
staticboolget_useOhosFileStorage=>!kIsWeb&&(defaultTargetPlatform==TargetPlatform.ohos||Platform.operatingSystem=='ohos');

测试账号:13200000001/123456


五、问题与解决方案汇总

5.1 构建与环境

#现象原因解决方案
1DEVECO_SDK_HOME无效未设置或 CMD 用了 PowerShell 语法D:\deveco_sdk联接 + 用户环境变量
2'D:\Program' 不是内部或外部命令Program Files空格导致 Hvigor 截断命令local.propertiesD:\flutter_ohos;必要时改flutter-hvigor-plugin/hvigor_utils.dartcmd /c
3tdesign_flutter编译失败与鸿蒙 Flutter 3.27.5 不兼容移除 TDesign,改用 MaterialIcons
4module.json5schema 失败写了不支持的"network"节点删除network块,仅保留INTERNET权限
5srcPath is not a relative path(Pub 缓存绝对路径)dependency_overrides: shared_preferences_ohos被注入 hvigor移除该 override;登录改用OhosLoginFileStorage
6DevFS / 调试 attach 失败鸿蒙调试链路与 Impeller 等优先release;可关 Impeller(buildinfo.json5

5.2 网络与首页

#现象原因解决方案
7首页永久加载、无数据并发请求挂起 + 证书校验OhosHttpOverrides+ 顺序请求 + 超时与错误 UI
8仅有[Dio] GET200请求未返回同上;确认module.json5INTERNET
9模拟器浏览器能上网 App 不行Flutter 网络栈与浏览器不同证书 Overrides + 勿依赖并发

5.3 登录

#现象原因解决方案
10MissingPluginException ... shared_preferences默认走MethodChannel,鸿蒙无实现OhosLoginFileStorage,不注册shared_preferences_ohos原生模块
11登录 API 200 仍 Toast 报错保存 Token 时插件崩溃同上;接口成功后的失败仅在存储环节

六、依赖与插件策略

6.1 当前pubspec.yaml要点

dependencies:dio:^5.9.2shared_preferences:^2.2.2# 非鸿蒙平台使用carousel_slider:^5.1.2# 已移除 tdesign_flutter

不要为修登录而添加:

# 不推荐 — 会导致 hvigor srcPath 绝对路径错误dependency_overrides:shared_preferences_ohos:git:...

.flutter-plugins-dependencies"ohos": []为健康状态。

6.2 若未来要接入更多原生插件

  1. 优先查 OpenHarmony TPC flutter_packages 是否有*_ohos实现
  2. 插件模块srcPath必须是相对工程 ohos 目录的路径,不能是 Pub 缓存绝对路径
  3. module.json5/ 插件后需flutter clean+ 重装 HAP
  4. 能用纯 Dart 方案(文件、内存)的,优先纯 Dart,减少 Hvigor 模块复杂度

七、关键文件清单

路径作用
ohos/local.propertiesFlutter SDK、DevEco SDK 路径
ohos/setup-harmony-env.bat环境变量 + 运行脚本
ohos/entry/src/main/module.json5权限、Ability
ohos/entry/src/main/ets/plugins/GeneratedPluginRegistrant.ets原生插件注册(当前无第三方插件)
ohos/hvigorconfig.tsinjectNativeModules读取.flutter-plugins-dependencies
lib/main.dartsetupOhosHttpOverrides()
lib/utils/ohos_http_overrides.dart鸿蒙 HTTPS
lib/utils/DioRequest.dart网络封装
lib/pages/Home/home.dart首页顺序加载
lib/utils/ohos_login_storage.dart鸿蒙登录态文件存储
lib/utils/LoginStorage.dart跨平台存储门面

八、经验总结

  1. 鸿蒙 Flutter 是独立工具链:必须用 OHOS 版 Flutter,PATH、local.propertiesDEVECO_SDK_HOME三者一致。
  2. 路径规划先于编码Program Files几乎必然在 Hvigor/脚本层踩坑,联接目录是性价比最高的解法。
  3. 网络:顺序优于并发:首页 5 接口在鸿蒙上顺序调用更稳;日志里看到连续200即正常。
  4. 存储:别假设 shared_preferences 可用MissingPluginException用鸿蒙文件存储即可,避免绝对路径插件模块。
  5. 发布模式优先验证setup-harmony-env.bat release更接近真实安装包行为,利于排除 DevFS 干扰。
  6. 配置改动的生效方式module.json5权限、原生插件、HAR 依赖变更 → 需完整重装,热重载不够。

九、参考链接

  • OpenHarmony TPC flutter_flutter
  • OpenHarmony TPC flutter_packages
  • HarmonyOS 应用权限列表

十、实现效果



http://www.jsqmd.com/news/957759/

相关文章:

  • 【荔湾区】骑楼趟栊间的焕然如新——2026荔湾单位保洁开荒三强纪事 - 广州搬家老班长
  • 以AI治理AI!悬镜原创“AI智能体疫苗技术”硬核守护智能体运行时安全
  • Hermes Verification协议:从代码到证据的闭环验证
  • Shiply App热修复紧急发布流程
  • 什么证件照制作工具好用?2026最全证件照工具实测对比推荐 - 科技大爆炸
  • PyAutoGUI进阶玩法:结合Pillow实现游戏自动刷图与软件自动化测试实战
  • 调参不再玄学:手把手教你用吴恩达的‘试错循环’优化你的第一个深层神经网络
  • 终极TikTokenizer指南:如何精准计算AI提示词成本并节省80%费用
  • 独立思考真正的意义:拥有自己的大脑
  • 2026实测:专业降AIGC工具选这款就对了3秒改写无痕迹 - 降AI小能手
  • 2026国际EMBA世界排名榜单解析|顶尖国际化EMBA项目优势对比
  • VoidZero 加入 Cloudflare,Vite 发展获更多资源且核心特质不变
  • Arduino ESP32:从物联网新手到专业开发者的终极指南
  • 轻量级本地图书管理工具:Python+PyQt5+SQLite一键运行
  • 从502错误到丝滑pub get:一份Flutter镜像配置的防坑与自动化配置指南
  • 2026这6款硬核降AIGC平台大起底,一键让AIGC率直逼绝对安全线! - 降AI小能手
  • 为什么92%的固收团队AI工具使用率低于17%?——来自中金、海通、易方达联合调研的未公开数据解密
  • 特斯拉电池系统深度解析:从18650电芯到BMS核心技术
  • 低空飞行器降噪气动人工智能AI反向设计系统软件平台设计方案
  • 图解人工智能(49)人工智能应用-语音合成
  • 实战避坑指南:FFmpeg处理YUV420 NV12/P010数据时,内存对齐与性能优化的那些事儿
  • 2026年6月重庆4天3晚导游推荐TOP3|经典线路全覆盖解析 - 随峰国旅
  • 调试手记:低端机型上 HTTP/2 与 HTTP/3 性能差异及内存泄漏排查
  • Qt Quick 粒子系统(一):架构总览与四层模型
  • 考试报名用的证件照制作选什么工具性价比高?2026考试证件照工具对比推荐 - 科技大爆炸
  • MATLAB包络谱快速出图工具:自带示例数据,Excel信号一键导入
  • Windows Terminal终极指南:如何构建高效命令行工作环境的完整方案
  • 从防晒霜到光伏板:生活中无处不在的‘吸收率、反射率、透射率’原理与应用
  • 2026论文写作工具红黑榜:一键生成论文工具怎么选?实测才敢推!
  • 当Stable Diffusion遇上Unity+WebRTC+情感计算SDK:一个被低估的实时AI互动娱乐栈(GitHub Star 48h破2.3k,文档已加密限阅)