参考 Breezy Weather / Geometric Weather | 平台 HarmonyOS NEXT(API 26,用户指定最新稳定版) 架构:Stage 模型 + ArkUI 声明式 | 设备:手机 / 平板 / 折叠屏 / PC / TV / 手表 当前版本:V1.3.2(versionCode
10302)| 变更记录见 CHANGELOG.md
本目录包含规划文档(docs/)与可打开的工程脚手架(根目录 + common / data / entry / watch 模块)。
| 模块 | 类型 | 说明 |
|---|---|---|
common |
HAR | 归一模型、WMO 代码多语映射、日志/时间/单位工具、可复用玻璃卡片组件 |
data |
HAR | 多源可插拔(WeatherSource)、Open-Meteo 实现、和风源(用户自带 Key,配 Key 后可选)、仓库、缓存、定位、后台调度 |
entry |
HAP | 手机/平板/折叠/PC/TV 入口:EntryAbility、响应式主页(断点主从/Tabs)、各功能页、天气卡片 FormAbility |
watch |
HAP | 手表轻量入口:WatchAbility + 极简主页 |
- 多源可插拔:
data/sources/WeatherSource.ts定义契约;OpenMeteoSource默认免密钥;QWeatherSource采用用户自带 Key——已注册进sources/registry.ts,运行时按isAvailable()过滤,设置页填入自己的和风 Key 并经接口校验通过后该源才出现在「数据源」列表;Key 仅存本机且不跨设备同步,合规边界见docs/09-隐私与权限合规.md §3。 - 归一模型:
common/models/WeatherData.ts是唯一 UI 消费对象;各源实现toNormalized。位置主标题locationTitle()已修正「上海 / 上海市」互为包含时的拼接问题(V1.3.2)。 - WMO 全量映射 + 7 语种:
common/models/WmoCode.ts(28 条代码 × 7 语)。和风icon→WMO对照见sources/QWeatherCodes.ts(待补全)。 - 多设备:
entry/pages/Index.ets按(width >= 840vp)断点在 Tabs(手机)与主从(大屏)间切换;手表独立模块。- 底部导航已精简为「天气 / 设置」两个页签(HDS 悬浮胶囊);位置管理、预警、「数据与隐私」均为设置内 二级页,入口元素通过
geometryTransition共享元素实现「一镜到底」连续转场。
- 底部导航已精简为「天气 / 设置」两个页签(HDS 悬浮胶囊);位置管理、预警、「数据与隐私」均为设置内 二级页,入口元素通过
- i18n:
entry/resources含base+ 7 语种string.json(zh-CN / en-US / fr-FR / ja-JP / ko-KR / es-ES / de-DE);UI 字符串全部$r()引用,天气状况文案走WmoCode.ts。语言切换即时生效(注入langEpoch重建 UI 树,无需重启)。 - 本地持久化全链路打通:天气快照与位置走 RDB(
data/local/RdbStore.ets,基于@kit.ArkData的relationalStore,S1 安全级);设置走Preferences(settingsStore);位置与设置通过distributedKVStore跨设备同步(和风 Key 除外)。首次启动以 Shanghai 为 SEED 填充并持久化,可管理、可设默认、跨启动保留。 - 设计语言体系化(V1.3.x):新增
common/ui/DesignTokens.ets(Tokens),间距 / 圆角 / 字号 / 临界阻尼弹簧统一取值,界面分层由「字号 + 字重 + 行高」成组表达,深色下为低明度半透明避免浅叠浅;完整方法论见docs/13-美学设计语言.md。 - 状态栏联动(V1.3.0):
entry/system/SystemBar.ets统一控制器,应用沉浸式全屏,状态栏 / 导航栏图标色随当前页面背景明暗实时切换(setTone(dark),由 EntryAbility 绑定窗口、二级页onShown/onHidden调用)。 - 深色模式 / 夜间天气(V1.3.0):卡片、文字、图标、结构面全部主题感知;二级页标题栏经
HdsNavDestination.originalStyle显式给出背景 / 标题 / 返回图标主题色,深色下不再白底白字(V1.3.1 硬化)。 - 设置页层级(V1.3.0):分组卡片(外观 / 数据源 / 语言 / 更多)+ 分隔线 + 箭头 + 当前值色阶,选项位置与可点击区域一目了然。
- 位置搜索清洗排序(V1.3.2):
AppStore.rankAndClean替代旧子串过滤——城市级命中优先、按「名称精确 / 城市精确 / 前缀 / 包含」打分、结合人口降序、按「标题+城市」去重并截断前 10,彻底剔除「绍兴市上海」等同名异地候选;Open-Meteo 地理编码已补population/feature_code权重。 - 状态/红线:统一
Log封装(禁裸 console/hilog);类型标注无any/unknown;@Component方法替代 getter;状态管理统一 V2(@ObservedV2/@Trace、AppStorageV2/PersistenceV2)。
完整结论见
docs/11-鸿蒙新特性与沉浸光感适配.md。
- 沉浸光感 / 空间化:以 HarmonyOS UI Design Kit(
@kit.UIDesignKit)+ 沉浸光感为第一眼视觉基石——HdsNavigation/HdsTabs悬浮胶囊导航、systemMaterialEffect材质、dynamicHideTitleBar标题栏渐变模糊、智感握姿;替代自研blur卡片。启用前提targetAPIVersion ≥ 26.0.0(本项目即 26)。 - 能力探测降级:
deviceInfo.apiAvailable('26.0.0') && hdsMaterial.getSystemMaterialTypes().length > 0不满足时回退普通半透明卡片(沉浸光感材质仅 Phone/Tablet,且 UI Design Kit 仅中国境内)。 - 状态管理 V2:新代码统一
@ComponentV2+@Local/@Param/@Event/@ObservedV2/@Trace/@Monitor/@Computed+AppStorageV2/PersistenceV2(现存Index.ets等为 V1,逐步迁移)。 - ArkUI 新特性:数字翻牌(温度刷新)、
Text.shaderStyle渐变文本、SymbolGlyph动效、focusWrapMode(TV 走焦)、uiAppearance(深浅色/字体缩放)。 - 一多部署:对齐官方三层工程(common/features/products);手机·平板·PC·TV=部署模型 A,手表=部署模型 B。
- 明确不适用:实况窗(Live View Kit) 不属于天气场景、意图框架(Intents Kit) 仅企业开发者且仅中国境内——均不纳入主流程(见 doc 11 §6.4/§6.5)。
- 权限修正:天气周期刷新用延迟任务(WorkScheduler),无需
ohos.permission.KEEP_BACKGROUND_RUNNING(该权限属长时任务)。
天气图标来自 erikflowers/weather-icons(https://erikflowers.github.io/weather-icons),采用 MIT License,在项目中免费使用、修改与分发。
- 资源已合并至
common/src/main/resources/base/media/,共 36 个 SVG(文件名wx_<wmo基础键>_<day|night>),与common/models/WmoCode.ts中wmoIconKey(code, isDay)的输出一一对应(如wx_clear_day、wx_rain_heavy_day)。 - UI 通过
Image($r('common.media.' + wmoIconKey(code, isDay)))直接引用,无需额外映射表。 - 原始 219 个
wi-*.svg中选取 19 个代表性图标,按 WMO 天气代码语义复制重命名;映射关系见WmoCode.ts顶部注释。 - 图标为单色字形,运行时经
Image().fillColor()着色以适配浅色/深色卡片。
原作者保留版权声明;本项目使用符合 MIT 条款,未做商标性使用。
- DevEco Studio(HarmonyOS NEXT,API 26 对应版本)打开本目录。
- 必补资源 / 配置:
- 应用图标:已提供矢量版
AppScope/resources/base/media/app_icon.svg(AppScope 资源对各模块共享,缺媒体问题已解决);如需栅格 PNG/高密图可由该 SVG 导出。 - 品牌资料见
branding/:logo-mark.svg(透明品牌标)、wordmark.svg(图形+文字)、preview.html(亮/暗预览)。 - 签名:
build-profile.json5的signingConfigs为空,需在 IDE 中配置调试签名(File → Project Structure → Signing)。
- 应用图标:已提供矢量版
- Sync & Build(
hvigor):entry出手机/平板/PC/TV 包,watch出手表包。
- 本地缓存已接 RDB:
data/local/RdbStore.ets基于@kit.ArkData的relationalStore(S1 安全级)承载天气快照与位置;CacheStore旧封装仍保留、待迁移。distributedKVStore跨设备同步已落地(位置 + 设置,和风 Key 除外)。 LocationProvider已接geoLocationManager,运行时需动态申请LOCATION/APPROXIMATELY_LOCATION。RefreshScheduler已接 WorkScheduler(延迟任务,无需KEEP_BACKGROUND_RUNNING,WIFI + 持久化),但周期策略仍待细化——WorkInfo尚未配置repeatInterval,当前未达到「≤4 次/日」的精确节奏。WeatherFormAbility已接真实天气:onAddForm 同步返占位、异步updateForm推 RDB 缓存真实数据(P1-7 完成);卡片图标用 erikflowers/weather-icons(见「图标素材来源」)。QWeatherSource已结构实现并已注册进sources/registry(运行时按isAvailable()过滤,未配 Key 不出现),但icon→WMO对照表仍待补全,且默认不随包发布直至合规通过。- 默认位置:首次启动以 Shanghai 为 SEED 填充并持久化,已可管理 / 设默认 / 跨设备同步,不再硬编码死。
- UI 已接入 HDS(
HdsNavigation/HdsTabs/hdsMaterial)、状态管理 V2、数字翻牌/渐变文本;沉浸光感材质与 HDS 视效需真机验收(模拟器不支持,见 doc 11)。
- 补全图标/签名后做一次空跑构建,确认工程可编译。
- 主流程已闭环(定位 → 展示 → 刷新 → RDB 缓存 → 多设备 → 跨设备同步),按
docs/10-研发计划与质量保障.md的 M1–M7 收尾质量保障与测试。 - 细化刷新周期策略:为
RefreshScheduler的WorkInfo配置repeatInterval,落实「≤4 次/日」的精确节奏。 - 国内源启用前完成
docs/09§3.1 合规清单并评审;补全QWeatherSource的icon→WMO对照表。 - 按
docs/11接入沉浸光感/HDS 框架与状态管理 V2,并做真机材质验收(模拟器无 HDS 沉浸视效)。 - 设计语言已体系化(
docs/13-美学设计语言.md),持续对齐 Apple 流体界面方法论;无障碍与 P2 服务见docs/14-P2服务与无障碍.md。