OpenHarmony 英语学习 App 实战:自定义生词本、持久化存储与学习数据管理

OpenHarmony 英语学习 App 实战:自定义生词本、持久化存储与学习数据管理

摘要

英语学习 App 不能只提供固定词库。真实学习中,用户会从课本、阅读、听力、影视台词里遇到自己的生词,因此“自定义生词本”是非常重要的功能。本文以「英语视界 YingYu」项目为例,分享如何在 OpenHarmony/HarmonyOS 中实现自定义生词本、详情弹窗、添加表单、搜索过滤和本地持久化。📘

相关文件包括:

entry/src/main/ets/pages/CustomWordBook.ets
entry/src/main/ets/utils/StorageService.ts
entry/src/main/ets/model/DataModels.ts
entry/src/main/ets/utils/YingYuPreferences.ts

一、自定义生词本要解决什么问题?

固定词库适合系统学习,但用户自己的生词更有价值:

  • 课外阅读遇到的词;
  • 老师补充的重点词;
  • 听力材料里的陌生词;
  • 错题中反复出现的词;
  • 考试作文常用表达。

所以自定义生词本需要具备:

  • 添加单词;
  • 保存音标、释义、例句、标签;
  • 查看详情;
  • 搜索过滤;
  • 参与复习系统;
  • 本地持久化保存。

二、数据模型:CustomWord

项目中使用 CustomWord 表示一个自定义单词:

export interface CustomWord {
  id: string
  word: string
  phonetic?: string
  translation: string
  example?: string
  tags: string[]
  createdAt: string
  reviewCount: number
  mastered: boolean
}

字段设计比较完整:

  • id:唯一标识;
  • word:英文单词;
  • phonetic:可选音标;
  • translation:中文释义;
  • example:可选例句;
  • tags:标签;
  • createdAt:添加时间;
  • reviewCount:复习次数;
  • mastered:是否掌握。

这些字段不仅能展示单词详情,也能和复习系统、统计系统结合。

三、存储 Key 设计

StorageService.ts 中集中管理存储 Key:

const STORAGE_KEY_CUSTOM_WORDS = 'yingyu_custom_words'
const STORAGE_KEY_REVIEW_RECORDS = 'yingyu_review_records'
const STORAGE_KEY_DAILY_TASKS = 'yingyu_daily_tasks'
const STORAGE_KEY_LEARNING_GOALS = 'yingyu_learning_goals'

把 Key 放在统一服务里有两个好处:

  • 避免页面里到处写字符串;
  • 后续迁移数据结构更方便。

四、生成唯一 ID

添加单词时需要生成唯一 ID:

function generateId(): string {
  return Date.now().toString(36) + Math.random().toString(36).substring(2, 9)
}

这是一个轻量方案,适合本地数据。它结合时间戳和随机字符串,在单机使用场景下足够可靠。

五、读取自定义单词

读取逻辑封装在 getCustomWords() 中:

export function getCustomWords(): CustomWord[] {
  try {
    const stored = AppStorage.get<string>(STORAGE_KEY_CUSTOM_WORDS)
    if (stored) {
      return JSON.parse(stored) as CustomWord[]
    }
  } catch (e) {
    console.error('Failed to load custom words:', e)
  }
  return []
}

这里有一个值得保留的习惯:读取失败时返回空数组,而不是让页面崩掉。学习类应用要优先保证可用性。

六、保存自定义单词

保存时把数组序列化成 JSON:

export function saveCustomWords(words: CustomWord[]): void {
  try {
    AppStorage.setOrCreate(STORAGE_KEY_CUSTOM_WORDS, JSON.stringify(words))
  } catch (e) {
    console.error('Failed to save custom words:', e)
  }
}

对于小规模本地生词本,JSON 数组足够简单。后续如果数据量上升,可以迁移到数据库或云端同步。

七、添加单词:补齐系统字段

页面提交的只是用户输入字段,真正保存前由服务层补齐 ID、创建时间、复习次数和掌握状态:

export function addCustomWord(
  word: Omit<CustomWord, 'id' | 'createdAt' | 'reviewCount' | 'mastered'>
): CustomWord {
  const newWord: CustomWord = {
    ...word,
    id: generateId(),
    createdAt: new Date().toISOString(),
    reviewCount: 0,
    mastered: false
  }

  const words = getCustomWords()
  words.push(newWord)
  saveCustomWords(words)
  return newWord
}

这样页面只关心用户输入,服务层负责数据完整性。

八、更新和删除

更新单词:

export function updateCustomWord(id: string, updates: Partial<CustomWord>): boolean {
  const words = getCustomWords()
  const index = words.findIndex(w => w.id === id)
  if (index !== -1) {
    words[index] = { ...words[index], ...updates }
    saveCustomWords(words)
    return true
  }
  return false
}

删除单词:

export function deleteCustomWord(id: string): boolean {
  const words = getCustomWords()
  const filtered = words.filter(w => w.id !== id)
  if (filtered.length !== words.length) {
    saveCustomWords(filtered)
    return true
  }
  return false
}

返回 boolean 可以让页面判断操作是否成功,并显示 Toast 或刷新列表。

九、搜索过滤

搜索逻辑同时支持英文、中文释义和标签:

export function searchCustomWords(keyword: string): CustomWord[] {
  const words = getCustomWords()
  const lower = keyword.toLowerCase()
  return words.filter(w =>
    w.word.toLowerCase().includes(lower) ||
    w.translation.toLowerCase().includes(lower) ||
    w.tags.some(t => t.toLowerCase().includes(lower))
  )
}

这种搜索方式对用户很友好:

  • 输入英文可以找到单词;
  • 输入中文可以找到释义;
  • 输入标签可以找到专题词。

十、添加单词表单

CustomWordBook.ets 中定义了 AddWordSheet 子组件,用于处理添加表单。

@Component
struct AddWordSheet {
  @Link visible: boolean
  onWordAdded: () => void = () => {}

  @State wordText: string = ''
  @State phonetic: string = ''
  @State translation: string = ''
  @State example: string = ''
  @State tagsInput: string = ''
}

这里把表单做成独立子组件,而不是直接放在页面里,可以减少整页重建,也更利于维护。

提交时处理标签:

const tags = this.tagsInput
  .split(',')
  .map(t => t.trim())
  .filter(t => t.length > 0)

标签支持逗号分隔,适合用户输入“考试, 写作, 高频词”这样的内容。

十一、详情弹窗:WordDetailSheet

项目还实现了单词详情弹窗:

@Component
struct WordDetailSheet {
  @Link visible: boolean
  @Prop word: CustomWord = {
    id: '',
    word: '',
    translation: '',
    tags: [],
    createdAt: '',
    reviewCount: 0,
    mastered: false
  }
}

弹窗进入时有缩放和透明度动画:

aboutToAppear() {
  this.dialogScale = 0.88
  this.dialogOpacity = 0
  animateTo({
    duration: 260,
    curve: Curve.EaseOut
  }, () => {
    this.dialogScale = 1
    this.dialogOpacity = 1
  })
}

展示内容包括:

  • 单词;
  • 音标;
  • 中文释义;
  • 例句;
  • 标签;
  • 添加时间;
  • 复习次数或掌握状态。

十二、本地持久化的另一层:Preferences 封装

项目中还有 YingYuPreferences.ts,用于 Preferences 和 AppStorage 的兜底封装。

export function initYingYuUserData(context: common.UIAbilityContext): void {
  if (pref) {
    return
  }
  try {
    pref = preferences.getPreferencesSync(context, { name: 'yingyu_user_data_v1' })
  } catch (e) {
    console.error('initYingYuUserData failed:', JSON.stringify(e))
  }
}

读取时优先 Preferences,失败则回退 AppStorage:

export function yingyuPrefGet(key: string): string | undefined {
  if (pref) {
    const v = pref.getSync(key, '') as string
    return v.length > 0 ? v : undefined
  }

  const fallback = AppStorage.get<string>(key)
  if (fallback !== undefined && fallback.length > 0) {
    return fallback
  }
  return undefined
}

这种封装让数据层更稳,也便于后续统一替换存储方案。

十三、小结

本文结合「英语视界 YingYu」项目,拆解了自定义生词本的完整实现:

  • 使用 CustomWord 描述用户单词;
  • 使用 StorageService 封装增删改查;
  • 使用 JSON + AppStorage 保存轻量数据;
  • 使用 searchCustomWords() 支持英文、中文、标签搜索;
  • 使用 AddWordSheet 管理添加表单;
  • 使用 WordDetailSheet 展示单词详情;
  • 使用 Preferences 封装增强持久化可靠性。

自定义生词本让学习 App 从“固定内容工具”变成“用户自己的学习资料库”。这类功能虽然不 flashy,但非常能提升长期使用价值。📖

img

相关推荐

【OpenHarmony/HarmonyOs 】数学题库结构设计:12 个年级、知识点标签与本地题库索引

这篇文章聚焦数学视界的题库建模,和之前“知识点掌握度评估”文章区分开:本篇讲数据结构,前篇讲统计分析。🎓 用Grade建立 12 个年级体系;🧩 用建立知识点标签系统;📚 用Question表达题目、答案、解析、难度和标签;🏗 用统一创建题目;🔍 用构建本地索引;📊 用统计知识点题量;🧠 为端侧智能组卷和元服务“今日一题”打基础;🔐 题库和解析都在本地,避免 AI 识图和云端上传。结构化题库是学习 App 的地基。地基打好了,后续才能稳稳扩展挑战、复盘、推荐、报告和元服务。

IntMainJhy的博客 284

【OpenHarmony/HarmonyOs 】数学学习报告页:本地统计卡片、正确率与隐私友好学习画像

这篇文章围绕数学视界的学习报告页展开,重点是本地统计和隐私友好学习画像。📊 用展示关键学习指标;🎯 用展示今日目标进度;✅ 用计算整体正确率;📈 用汇总阅读、换算、答题、时长等数据;🧩 用统一保持报告项风格一致;🔐 学习报告全部从本地AppState读取,不上传学习画像;🚀 后续可扩展为桌面卡片、元服务和实况窗结束态。学习报告不是为了制造焦虑,而是帮助用户看到自己的积累。对教育类 App 来说,本地化报告是一条更稳、更可信的路线。✨。

IntMainJhy的博客 185

【OpenHarmony/HarmonyOs 】每日学习目标系统:todayCount、连续学习与本地激励反馈

每日目标系统对应“全新视觉与交互体验”和“端侧 AI”主题,它把分散的工具功能串成了学习路径。🎯 用dailyGoal和todayCount表达每日目标;📈 首页用进度条和鼓励文案做即时反馈;👤 我的页面用Progress展示完整进度;📅 用和计算连续学习;🏆 用解锁目标成就;🔐 所有统计都在端侧完成,不依赖账号和云端。对数学学习 App 来说,每日目标不是一个小组件,而是让用户持续学习的核心机制。✨。

IntMainJhy的博客 253

【OpenHarmony/HarmonyOs 】数学答题结果页设计:成绩统计、错题解析与复盘闭环

这篇文章聚焦数学视界的答题结果页,重点不是挑战流程,而是“复盘闭环”。🎯 通过路由参数接收;📊 根据分数生成等级、颜色、表情和鼓励文案;⏱ 展示正确数、错误数、用时和正确率;🧩 提供全部/错题/正确三种筛选;📖 展示用户答案、正确答案和解析;🔄 提供再来一次和返回首页;🔐 学习结果在端侧处理,避免上传用户答案。对数学学习 App 来说,答题结果页不是结束,而是下一轮学习的起点。🚀。

IntMainJhy的博客 308

【OpenHarmony/HarmonyOs 】数学知识库收藏管理:标签筛选、详情弹窗与近场分享数据准备

addFavorite(): void { if(this .addTitle.trim() === '' ) { this .showToast( '⚠️ 请输入标题') return } if(this .addContent.trim() === '' ) { this .showToast( '⚠️ 请输入公式/内容') return } const parsedTags: string[] = this .addTags.split(/[,,]/)

IntMainJhy的博客 303

【OpenHarmony/HarmonyOs 】趣味数学百科:本地内容检索、阅读激励与禁止 AI 识图的学习路径

这篇文章从“趣味百科”切入,贴合禁止 AI 识图、隐私保护和全新交互体验主题。💡 用构建本地内容库;🧭 用分类和标签组织趣味数学内容;🔍 用实现本地搜索;👆 用展开卡片记录真实阅读行为;🎯 用和接入成就系统;🔐 不使用相机、相册、网络和 AI 识图;🚀 可扩展为每日趣味数学元服务入口。数学学习不只有刷题。把好的数学故事、悖论和知识点做成本地可检索内容库,也是一种非常适合 OpenHarmony / HarmonyOS 的教育产品实践。✨。

IntMainJhy的博客 226

【OpenHarmony/HarmonyOs 】单位换算引擎实战:长度、面积、体积、温度、速度的端侧计算方案

这篇文章贴合“端侧 AI / 全场景智慧生活 / 精细化权限管控”主题,重点是数学视界中的单位换算引擎。🔄 用UnitGroup统一描述单位和基准倍率;🧮 通过完成普通单位换算;🌡️ 单独处理温度偏移;🔢 用控制结果格式;📜 用保留最近 50 条记录;📱 用底部单位选择面板提升移动端体验;🔐 全程端侧计算,零网络依赖。一个好用的学习 App,不一定每个功能都复杂。像单位换算这种高频小工具,只要做得快、准、稳,就能显著提升应用的实用价值。🚀。

IntMainJhy的博客 271

【OpenHarmony/HarmonyOs 】端侧 AI 与元服务思路:数学视界的人脸识别开放能力、智能练习与轻量化入口设计

🧠 端侧 AI:先基于本地答题数据做掌握度分析和智能组卷;🔐 人脸识别:只作为系统级本机认证入口,不保存人脸数据;🚀 元服务:拆出“今日一题、公式速查、单位换算、错题复习”等轻量任务;📦 架构上:把推荐、认证、元服务拆成独立服务类,避免和页面强耦合;🛡 隐私上:默认本地处理,敏感能力用户主动触发。对学习类应用来说,最好的智能不是“看起来用了多少 AI”,而是用户每次打开时,都能更快进入适合自己的学习任务。数学视界的下一步,也会围绕这个方向继续打磨。✨。

IntMainJhy的博客 169

【OpenHarmony/HarmonyOs 】数学学习 App 隐私保护实践:禁止 AI 识图、最小权限与精细化权限管控

🔐 不申请不必要权限:当前没有相机、相册、位置、麦克风等高敏权限;🚫 禁止 AI 识图:不拍照搜题,不上传试卷图片;🧮 本地计算优先:计算器、题库、挑战评分都在端侧完成;🧑‍💻 用户可控:学习目标可修改,隐私问题可反馈。默认关闭;用户主动触发;明确说明用途;尽量端侧处理;提供删除和关闭入口。隐私保护不是把功能砍掉,而是做更克制的产品设计。对于数学视界这样的学习应用来说,用户真正需要的是稳定、清晰、可信赖的学习工具,而不是每个入口都接 AI、每个场景都要权限。

IntMainJhy的博客 220

【OpenHarmony/HarmonyOs 】从数学学习 App 出发:近场快传、实况窗与全场景智慧学习设计

📦 通过结构化graphData分享曲线方案;⏱ 通过挑战倒计时扩展实况窗提醒;📱 通过适配覆盖不同学习设备;☁️ 通过备份恢复保护学习资产;🧠 通过统一AppState组织学习数据和统计结果。全场景体验的重点不是炫技,而是让用户在不同设备、不同时间、不同学习状态下,都能自然接上自己的学习任务。对数学视界来说,这正是下一步可以继续打磨的方向。🚀参考资料:OpenHarmony 文档总览OpenHarmony 项目介绍HarmonyOS 游戏近场快传能力参考。

IntMainJhy的博客 172

【OpenHarmony/HarmonyOs 】数学视界实战:悬浮导航栏、沉浸光感与全新交互体验

这篇文章对应的主题是“悬浮导航栏、沉浸光感、全新视觉与交互体验”。🧭 使用Tabs + 自定义 tabBar构建底部导航;🌈 使用暖色头部、进度卡片和轻渐变营造学习氛围;👆 抽象,统一点击动效;🌙 使用管理深色模式和图标背景映射;📱 使用处理手机和平板适配;如果你也在做 OpenHarmony / HarmonyOS 应用,不建议一开始就追求复杂动画。先把导航、主题、点击反馈、状态栏、安全区域这些基础体验做好,应用的完成度会立刻提升一大截。🚀。

IntMainJhy的博客 294

【OpenHarmony/HarmonyOs 】平抛运动 2D 与 3D 视图:Canvas 动画、轨迹点与视角滑块实践

平抛运动页面是项目中很典型的“端侧物理模拟”案例。它没有请求网络,也没有调用外部 AI,而是用本地公式、Canvas 绘制和状态更新完成了动态演示。全新视觉与交互体验 + 端侧计算能力。对 优快云 读者来说,它能展示 OpenHarmony/HarmonyOS 不只适合做表单和列表,也能做有动画、有交互、有物理逻辑的学习应用。🚀。

IntMainJhy的博客 240

【OpenHarmony/HarmonyOs 】实验室首页细节拆解:分类侧栏、搜索筛选与推荐探索交互

实验室首页的价值不只是展示模型,而是组织学习路径。分类侧栏、年级筛选、关键词搜索、推荐探索、最近浏览、随机探索,这些功能共同构成了一个轻量但完整的学习入口。全新视觉与交互体验 + 端侧智能推荐 + 全场景学习续接。它没有脱离项目,因为所有细节都来自当前代码;它也没有空谈 AI,而是从本地学习状态出发,说明如何把一个模型列表做成真正可用的学习首页。🚀。

IntMainJhy的博客 240

【OpenHarmony/HarmonyOs 】声音传播实验:介质切换、波纹动画与本地物理计算

声音传播模型展示了教育应用的一种好方向:用本地公式和可视化动画替代敏感数据采集。沉浸式交互体验 + 端侧计算 + 隐私保护。项目通过介质切换、波纹动画、速度和波长计算,把一个抽象知识点变成了可以操作的实验。🔊。

IntMainJhy的博客 238

【OpenHarmony/HarmonyOs 】凸透镜成像实验:光路绘制、成像公式与禁止 AI 识图的学习方案

凸透镜成像页面很好地体现了“禁止 AI 识图”的另一种学习方案。不拍照、不上传、不识别题目,而是让学生通过参数调节和光路观察理解规律。沉浸光感 + 禁止 AI 识图 + 隐私友好学习。对 OpenHarmony/HarmonyOS 开发者来说,它也展示了 Canvas 在光学教学中的实用价值。🔍。

IntMainJhy的博客 624

【OpenHarmony/HarmonyOs 】元服务能力集成设计:公式速算、今日挑战与最近模型的轻量入口

这些入口都可以复用现有页面、现有状态和现有路由。元服务能力集成 + 端侧智能推荐 + 全场景学习入口。它不是脱离项目空谈,而是从当前功能中挑出最适合轻量化的部分,设计成可落地的元服务入口。🧩。

IntMainJhy的博客 266

【OpenHarmony/HarmonyOs 】知识挑战模块拆解:题库筛选、限时模式、暂停续答与成绩统计

挑战模块看起来只是答题,但实际上包含一条完整链路:筛选题库 → 随机抽题 → 开始挑战 → 限时答题 → 暂停续答 → 判断正误 → 统计成绩 → 更新学习状态。对 OpenHarmony/HarmonyOS 应用开发来说,这类模块很适合用状态驱动实现。只要把答题流程拆清楚,ArkUI 的响应式状态就能让页面自然跟随数据变化。🎯。

IntMainJhy的博客 225

【OpenHarmony/HarmonyOs 】物理公式计算器实战:结构化公式配置与即时计算反馈

这个物理计算器的核心不是复杂算法,而是良好的结构设计。用CalcItem和CalcInput把公式配置化之后,页面就能动态生成输入框、公式展示和计算结果。对 OpenHarmony/HarmonyOS 开发来说,这种方式非常适合做学科工具、单位换算器、工程计算器、财务计算器等应用。结构清晰,扩展简单,用户体验也很直接。🧮。

IntMainJhy的博客 142

【OpenHarmony/HarmonyOs 】深色模式适配实践:资源色、Canvas 与学习界面的统一体验

深色模式不是一个开关,而是一套完整视觉体系。「物理视界」通过资源色和 Canvas 主题判断,让普通 UI 和物理绘图都能适配深色模式。对 OpenHarmony/HarmonyOS 应用来说,资源管理是深色模式的基础,Canvas 重绘是深色模式的关键细节。当这两部分都做好,用户无论白天还是夜晚学习,体验都会更舒服。🌙。

IntMainJhy的博客 140

【OpenHarmony/HarmonyOs 】备份恢复与本地隐私:学习数据如何安全持续

备份恢复是提升学习连续性的能力,隐私保护则是教育类 App 的底线。下一步如果继续完善,可以把学习数据备份、恢复提示、一键清除、隐私说明结合起来。这样用户既能保留自己的学习成果,也能清楚掌握数据边界。☁️🔐。

IntMainJhy的博客 130

【OpenHarmony/HarmonyOs 】从 Tabs 到 Stack:手写悬浮底部导航栏完整实践

这篇文章拆的是一个很小但很常用的细节:底部导航。在 OpenHarmony/HarmonyOS ArkUI 中,Tabs不一定只能配默认 TabBar。通过Stack隐藏默认栏,再手写一层底部 Row,我们可以获得更高的视觉和交互自由度。对于「物理视界」这种学习类 App 来说,自定义导航让六个核心模块始终清晰可达,也让整个应用的视觉风格更加统一。这类细节不难,但很影响产品完成度。✨。

IntMainJhy的博客 279

【OpenHarmony/HarmonyOs 】Canvas 绘制电场线分布:电荷配置与深色模式适配实践

电场线分布」这个页面展示了 Canvas 在电磁学教学中的优势。它把看不见的电场变成可观察、可切换、可调节的图像,让学生通过交互理解正负电荷和电场方向。在 OpenHarmony/HarmonyOS 中,Canvas 和 ArkUI 状态管理配合起来非常自然:状态变化后重绘,重绘后图像反馈给用户。对教育类 App 来说,这就是最实用的端侧可视化能力。⚡。

IntMainJhy的博客 100

【OpenHarmony/HarmonyOs 】Canvas 实现光的干涉:从波长滑块到动态条纹可视化

这个光的干涉模型展示了 ArkUI Canvas 在教育应用中的价值。它不只是画图,而是把“参数输入、公式计算、物理图像、实时反馈”组合成一个完整学习场景。对 OpenHarmony/HarmonyOS 开发者来说,这类页面非常适合做课程演示、实验模拟、科普应用和互动教学工具。当学生拖动一个滑块就能看到光条纹变化时,物理公式就不再只是书上的符号了。🌈。

IntMainJhy的博客 165

【OpenHarmony/HarmonyOs 】用 ArkTS 构建可维护的多页面学习工具:模块拆分与复用实践

先定义模型↓按功能拆页面↓抽 DataManager 管业务↓抽 StorageManager 管存储↓抽 AppTheme 管样式↓抽 ResponsiveUtils 管适配↓页面只负责交互和展示多页面项目的难点不是把页面写出来,而是功能越来越多后还能改得动。政治视界通过模型、数据、主题、响应式、存储的分层,让项目具备继续扩展的空间。写 ArkTS 项目时,越早建立边界,后面越轻松。可维护性不是大项目才需要,小项目从一开始就值得认真设计 ✅。

IntMainJhy的博客 151

【OpenHarmony/HarmonyOs 】教育 App 中的错题推荐与个性化复习思路

个性化复习不一定从大模型开始。政治视界现有的错题、会话、闪卡和知识点数据,已经能支撑一套端侧推荐系统。先用规则把学习路径跑通,再逐步升级算法,是更稳的路线。真正好的推荐,应该让用户少走弯路,而不是制造神秘感 🚀。

IntMainJhy的博客 272

【OpenHarmony/HarmonyOs 】从 0 到 1 打造政治学习助手 App:功能规划到 ArkTS 落地

产品闭环设计↓数据模型定义↓主 Tab 框架↓题库答题↓本地存储↓首页看板↓闪卡 /笔记/ 报纸↓成就 /报告/ 响应式从 0 到 1 做学习助手,最重要的是先搭出学习闭环,而不是一开始追求功能数量。政治视界的实现思路是:先让用户能学、能练、能记录,再逐步加入视觉体验、数据反馈和多端适配。ArkTS 很适合做这种结构清晰的学习 App。只要页面、模型、数据管理分层明确,项目就能稳步扩展 📚。

IntMainJhy的博客 245

【OpenHarmony/HarmonyOs 】ArkUI 动画实践:按压反馈、页面切换、弹层过渡与学习体验优化

政治视界中的动画覆盖了常见交互:按钮按压、页面切换、卡片翻转、弹层打开、首页入场。它们并不复杂,但组合起来能让学习体验更顺。好的动画不是让用户注意到动画本身,而是让用户感觉操作自然、反馈及时。ArkUI 的状态驱动动画非常适合做这种细腻体验 ✨。

IntMainJhy的博客 254

【OpenHarmony/HarmonyOs 】学习 App 如何做轻量化数据安全与隐私保护

不声明无关权限↓Preferences 本地保存↓DataManager 集中管理↓用户主动触发导出/清空↓AI 能力默认关闭学习 App 的隐私保护不是写一份协议就结束了,而是体现在架构设计中。政治视界当前选择了本地数据、低权限、集中管理的方案,非常适合教育工具的早期版本。对学生用户来说,可信比炫技更重要。真正好的学习 App,应该帮助用户成长,而不是过度收集用户数据 🛡️。

IntMainJhy的博客 227

【OpenHarmony/HarmonyOs 】从政治视界看教育类 App 的全场景学习体验设计

全场景学习体验不是为了堆技术,而是让用户在不同设备上都能自然继续学习。政治视界的模块已经具备这个基础:手机刷题、平板阅读、折叠屏双栏、大屏看报告。教育类 App 做全场景,最重要的是让学习任务和设备能力匹配。设备变了,学习路径不能断,这就是全场景的真正价值 🚀。

IntMainJhy的博客 285

【OpenHarmony/HarmonyOs 】HarmonyOS NEXT 学习类 App 项目架构拆解:页面、数据、主题与工具层

↓ 初始化存储/窗口Index↓ Tab 容器pages↓ 调用↓ 调用政治视界的架构适合中小型学习 App:页面清晰、模型统一、数据集中管理、主题和响应式能力抽离。这样的结构后续扩展新页面也比较顺,比如增加模拟考试、隐私设置、学习计划页面,都能放进现有架构。好的项目结构不是为了看起来高级,而是为了让功能越多时代码仍然可控 🚀。

IntMainJhy的博客 290
上一篇: OpenHarmony 英语学习 App 实战:基于艾宾浩斯曲线的单词复习系统设计
下一篇: OpenHarmony 英语学习 App 实战:TTS 听力训练播放器与异常兜底设计
IntMainJhy
IntMainJhy 成都叁分网络科技账号 成都叁分网络科技账号
博客等级 码龄1年 37粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值