基于 Harmony 6.0 应用的 AR 汉字学习应用首页实现

前言

汉字是中文学习者最大的挑战——3500 个常用字、每个字平均 10 个笔画、每个字有独特的音形义。传统的"抄写 + 默写"对儿童来说枯燥得让人抗拒。AR 汉字学习应用通过摄像头识别真实物体后弹出相应的汉字、动画演示笔画、配音朗读等多模态交互让学习成为一种"游戏化探索"。Harmony 6.0 时代,AR 汉字应用迎来了几个独特的能力红利——CameraKit + NeuralNetworkRuntime 让物体识别在端侧完成、SceneKit 让 AR 字体悬浮真实世界、AudioKit 提供高质量发音、HealthKit 让学习时长进入系统级档案保护视力。本文用 Flutter 在 Harmony 6.0 上实现一个 AR 汉字学习首页。
在这里插入图片描述

背景

儿童学习类应用的视觉关键词是"明亮、活泼、卡通"——明亮对应"色彩饱满",活泼对应"圆角大字号",卡通对应"图标拟物化"。橙色 #FB923C 配青色 #06B6D4 是这类应用的合适主色。本项目首页 5 个模块:渐变 Header(今日学字 + 大 AR 拍照按钮)、3 大学习模式(笔画 / 跟读 / AR 探索)、本周已学汉字网格、学习成就墙、护眼模式提示。从产品角度,儿童学习类应用最大的差异点是"家长安心"——学习时长可控、视力保护、内容审核。

Flutter × Harmony 6.0 跨端开发介绍

Harmony 6.0 在 AR 学习类应用上的能力栈完整——CameraKit + NeuralNetworkRuntime 提供端侧物体识别、SceneKit 提供 AR 渲染、AudioKit 提供高质量 TTS、HealthKit 让学习时长统计、PushKit 提供休息提醒。Flutter 嵌入 Harmony 6.0 的方案在这种"重 AR + 重音视频"应用上需要做架构分工——AR 视图通过 PlatformView 嵌入 SceneKit 原生组件,主页 UI 用 Flutter 自绘。

开发核心代码

代码一:今日学字 Header

Header 必须把"今日学字数 + AR 拍照按钮"做成视觉中心。我用一个橙青渐变 Container,中央一个超大的汉字(如"日")+ 拼音 + 释义。

Widget _header() {
  return Container(
    padding: const EdgeInsets.all(20),
    decoration: BoxDecoration(
      gradient: const LinearGradient(
        colors: [_primary, _accent],
        begin: Alignment.topLeft, end: Alignment.bottomRight),
      borderRadius: BorderRadius.circular(24),
    ),
    child: Column(children: [
      const Row(children: [
        Icon(Icons.spellcheck, color: Colors.white, size: 22),
        SizedBox(width: 8),
        Text('AR 学汉字',
            style: TextStyle(color: Colors.white,
                fontSize: 18, fontWeight: FontWeight.w800)),
        Spacer(),
        Icon(Icons.lightbulb_outline,
            color: Colors.white, size: 22),
      ]),
      const SizedBox(height: 14),
      const Text('今日要学的字',
          style: TextStyle(color: Colors.white70, fontSize: 13)),
      const SizedBox(height: 6),
      const Text('日',
          style: TextStyle(color: Colors.white,
              fontSize: 88, fontWeight: FontWeight.w900)),
      const SizedBox(height: 4),
      const Text('rì · 太阳 · 一天',
          style: TextStyle(color: Colors.white,
              fontSize: 14, fontWeight: FontWeight.w700)),
      const SizedBox(height: 14),
      Container(width: double.infinity, height: 50,
        decoration: BoxDecoration(color: Colors.white,
            borderRadius: BorderRadius.circular(25)),
        child: const Center(child: Row(
          mainAxisSize: MainAxisSize.min,
          children: [
            Icon(Icons.camera_alt, color: _primary, size: 24),
            SizedBox(width: 6),
            Text('AR 找一找今天的字',
                style: TextStyle(color: _primary,
                    fontSize: 16, fontWeight: FontWeight.w800)),
          ],
        )),
      ),
    ]),
  );
}

AR 拍照在生产业务里点击后通过 CameraKit 拿到画面 + NeuralNetworkRuntime 识别物体(如"太阳、灯泡"),然后在画面上叠加"日"字和动画。整个流程在端侧完成,孩子的画面不上传。

从「今日学字 Header」的儿童化设计与学习激励角度再补一段。儿童学汉字类应用的 Header 必须传递「这是一件好玩的事」的氛围。这段 Header 用主橙色到桃红的渐变背景(暖色调),配合「今日已学 X 个字」+ 「打卡 X 天」+ 「开始学习」大按钮的多段式排版,让小朋友每次打开应用都被「再学几个就完成」激励。Header 内置卡通字符或动物 emoji,比成人化的图标更亲切。如果未来要扩展支持「按 HSK 等级筛选」(HSK1 / HSK2 / HSK3 等),可以在 Header 加 chip 切换栏,骨架不变。
在这里插入图片描述

代码二:3 大学习模式

学习模式:笔画练习、跟读发音、AR 探索。每项一个独立色相图标 + 大字号说明。

Widget _modes() {
  final items = const [
    [Icons.brush, '笔画', '描红练习', _primary],
    [Icons.headphones, '跟读', '听音模仿', _accent],
    [Icons.view_in_ar, 'AR', '实景探索', _green],
  ];
  return Row(children: items.map((it) {
    final c = it[3] as Color;
    return Expanded(child: Container(
      margin: EdgeInsets.only(
          right: it == items.last ? 0 : 10),
      padding: const EdgeInsets.all(14),
      decoration: BoxDecoration(color: _card,
          borderRadius: BorderRadius.circular(16)),
      child: Column(children: [
        Container(width: 56, height: 56,
          decoration: BoxDecoration(
            color: c.withValues(alpha: 0.16),
            borderRadius: BorderRadius.circular(16)),
          child: Icon(it[0] as IconData, color: c, size: 30),
        ),
        const SizedBox(height: 10),
        Text(it[1] as String, style: const TextStyle(
            color: _ink, fontSize: 14,
            fontWeight: FontWeight.w800)),
        const SizedBox(height: 4),
        Text(it[2] as String, style: const TextStyle(
            color: _sub, fontSize: 11)),
      ]),
    ));
  }).toList());
}

笔画练习用 ArkUI Canvas 原生绘制,性能比 Flutter CustomPaint 更好。

从「3 大学习模式」的多模态启蒙与教学路径设计角度再补一段。儿童学汉字最有效的教学法是「视觉 + 听觉 + 触觉」三位一体——看字形、听发音、写笔画。这段 3 大模式(认字、笔画、AR 学)刚好对应这三种感官参与,让孩子在玩中学。每个模式用大图标 + 简短文字(适合儿童阅读),并用对应主题色识别(认字蓝、笔画橙、AR 紫)。如果未来要扩展支持「字形演变 AR」(让孩子看到甲骨文 → 篆书 → 楷书的演变),可以接入鸿蒙 6.0 的 ARKit 实现 3D 演变动画。

代码三:本周已学汉字网格

本周学过的字用 5x4 的方格网格展示,每个字配掌握度 chip。

Widget _learnedGrid() {
  final chars = const ['日', '月', '水', '火', '山',
                        '木', '土', '人', '口', '手',
                        '田', '禾', '米', '雨', '风',
                        '马', '牛', '羊', '鱼', '鸟'];
  return Container(padding: const EdgeInsets.all(14),
    decoration: BoxDecoration(color: _card,
        borderRadius: BorderRadius.circular(16)),
    child: Column(crossAxisAlignment: CrossAxisAlignment.start,
        children: [
      const Row(children: [
        Text('本周学过的字',
            style: TextStyle(color: _ink, fontSize: 14,
                fontWeight: FontWeight.w700)),
        Spacer(),
        Text('共 20 个 · 已掌握 17 个',
            style: TextStyle(color: _primary, fontSize: 12,
                fontWeight: FontWeight.w700)),
      ]),
      const SizedBox(height: 12),
      GridView.count(
        crossAxisCount: 5, shrinkWrap: true,
        physics: const NeverScrollableScrollPhysics(),
        mainAxisSpacing: 8, crossAxisSpacing: 8,
        childAspectRatio: 1.0,
        children: chars.asMap().entries.map((e) {
          final mastered = e.key < 17;
          return Container(
            decoration: BoxDecoration(
              color: mastered
                  ? _primary.withValues(alpha: 0.12)
                  : Colors.black12,
              borderRadius: BorderRadius.circular(10),
            ),
            alignment: Alignment.center,
            child: Text(e.value,
                style: TextStyle(
                    color: mastered ? _primary : _sub,
                    fontSize: 22,
                    fontWeight: FontWeight.w900)),
          );
        }).toList(),
      ),
    ]),
  );
}

学习数据通过分布式数据多端同步——孩子在平板上学的字,家长在手机上立刻能看到进度。

从「本周已学汉字网格」的学习成就可视化与家长反馈设计角度再补一段。儿童学习类应用的核心是让家长看到孩子的进步——「我的孩子这周学了多少字?」。这段网格用 4 列展示本周已学的所有汉字,每个汉字用大字号方框 + 拼音 + 学习时间的三件套呈现。已熟练掌握的汉字用主色填充背景、还在学习中的用浅色背景,让家长一眼识别孩子的掌握情况。如果未来要扩展支持「家长打分」(家长可以给每个字标记「会了 / 还需要练」),可以在每个字下方加 emoji 评分,配合 HMS Account 家庭群组让评分多端同步。鸿蒙 6.0 的家庭群组让家长 + 孩子 + 平板 + 学习机的数据互通,是教育类应用的最大体验红利。
在这里插入图片描述

心得

儿童学习类 App 的视觉灵魂是"明亮 + 安全"——明亮的颜色给孩子吸引力,安全的护眼提醒给家长信任。开发时最容易犯的错是把字体做得不够大,反而让孩子看不清。我的策略是把当日字做成 88 号超大字号,让识别度最大化。从能力扩展角度,AR 汉字应用最值得在鸿蒙端打造的是"端侧物体识别 + SceneKit AR + HealthKit 用眼健康"三件套——识别让 AR 学习自然、SceneKit 让汉字稳定锚定、HealthKit 让用眼时长可控保护视力。

总结

本篇实现了 Harmony 6.0 端的 AR 汉字学习首页,5 个模块、纯 UI、零依赖、约 340 行代码。骨架可直接迁移到 AR 数学、AR 英语等多种儿童学习类场景。从扩展角度建议生产业务里:把物体识别接入 NeuralNetworkRuntime;把 AR 渲染接入 SceneKit;把发音接入 AudioKit TTS;把用眼时长接入 HealthKit;把"今日要学的字"做成 FormExtensionAbility 桌面卡片。下一篇是第十三组的最后一块——课程表与成绩计算器。

在这里插入图片描述

Logo

一站式 AI 云服务平台

更多推荐