news 2026/5/10 7:42:42

Flutter for OpenHarmony 编程题库刷题APP技术文章

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flutter for OpenHarmony 编程题库刷题APP技术文章

Flutter for OpenHarmony 编程题库刷题APP技术文章

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

🚀 Flutter for OpenHarmony 实战:打造程序员必备的编程题库刷题 APP

哈喽各位鸿蒙开发者们!👋 今天带大家从零开始,用 Flutter 打造一款专为程序员面试准备的编程题库刷题 APP!不管你是准备秋招还是跳槽,这款 APP 绝对是你的刷题神器~支持左右滑动快捷收藏、代码语法高亮展示、刷题进度本地持久化,简直不要太好用!✨


📖 项目概述

有没有跟我一样的小伙伴,刷算法题的时候总觉得手机端体验太差?要么广告满天飞,要么代码展示一团糟?🤦‍♂️ 今天咱们就自己动手丰衣足食!

这款编程题库刷题 APP专门针对 OpenHarmony 平台优化,主打:

  • 📱 随时随地刷算法题(地铁上、排队时都能用)

  • 💻 完美的代码展示体验(语法高亮,支持多种语言)

  • ⭐ 智能收藏和错题本(再也不怕找不到好题了)

  • 📊 刷题进度追踪(看着进度条满满的成就感!)

  • 🔄 左右滑动快捷操作(收藏 / 跳过一气呵成)


🎯 核心功能

模块功能描述技术亮点
📋 题目列表算法题目展示,难度分级(简单 / 中等 / 困难)flutter_slidable 滑动操作
📝 题目详情代码展示 + 答题界面,支持语法高亮flutter_html 富文本渲染
💾 状态管理全局状态统一管理,页面间数据同步Get 轻量状态管理
🗄️ 数据存储刷题记录、收藏题目、错题本地持久化sqflite_ohos 鸿蒙数据库

💡 库选择理由(OpenHarmony 专属适配!)

选对第三方库,开发效率直接翻倍!这四个库都是经过 OpenHarmony 社区验证的靠谱选择~👍

1️⃣ flutter_slidable - 滑动操作神器

  • ✅ OpenHarmony 完美适配,手势丝滑不卡顿

  • ✅ 支持左右双向滑动,自定义操作按钮

  • ✅ 动画效果流畅,跟原生体验一模一样

  • ✅ 代码侵入性极低,几行代码就搞定

2️⃣ flutter_html - 代码展示救星

  • ✅ 支持 HTML 标签渲染,代码语法高亮杠杠的

  • ✅ 兼容 OpenHarmony 的 WebView 渲染引擎

  • ✅ 支持自定义样式,想怎么高亮就怎么高亮

  • ✅ 支持图片、链接、表格等富文本元素

3️⃣ get - 轻量状态管理 yyds

  • ✅ 体积超小!性能吊打其他状态管理库

  • ✅ OpenHarmony 平台深度优化

  • ✅ 路由、状态、依赖注入三合一

  • ✅ 学习成本极低,新手也能 5 分钟上手

4️⃣ sqflite_ohos - 鸿蒙专属数据库

  • ✅ 官方适配!OpenHarmony 平台唯一选择

  • ✅ 支持 SQLite 完整语法,跟 Android 端用法一致

  • ✅ 数据持久化安全可靠,APP 重启不丢失

  • ✅ 支持事务和批量操作,性能优异


📦 环境配置

老规矩,先把依赖安排上!打开你的pubspec\.yaml,复制粘贴下面的内容:

dependencies:flutter:sdk:flutter# 滑动操作库flutter_slidable:^3.0.1# HTML渲染+代码高亮flutter_html:^3.0.0-beta.2# 状态管理神器get:^4.6.6# 鸿蒙数据库(重点!这是OpenHarmony专属)sqflite_ohos:^0.1.0# 代码高亮样式flutter_highlight:^0.7.0

然后在 OpenHarmony 的config\.json里加个存储权限:

"reqPermissions":[{"name":"ohos.permission.DATA_STORAGE"}]

搞定!执行flutter pub get就可以开始撸代码了~🎉


🧩 分模块详解

1. 题目数据模型 📊

首先定义一个简洁的题目数据结构,包含题目基本信息和刷题状态:

classProblem{finalStringid;finalStringtitle;finalStringdescription;// HTML格式的题目描述finalStringcodeSnippet;// HTML格式的代码示例finalDifficultydifficulty;bool isFavorited;bool isCompleted;bool isWrong;Problem({requiredthis.id,requiredthis.title,requiredthis.description,requiredthis.codeSnippet,requiredthis.difficulty,this.isFavorited=false,this.isCompleted=false,this.isWrong=false});}

2. flutter_slidable - 滑动操作实现 ✨

这是我最喜欢的功能!题目卡片左滑收藏,右滑跳过,跟刷短视频一样爽~😎

Slidable(key:Key(problem.id),// 左滑 - 收藏操作startActionPane:ActionPane(motion:constScrollMotion(),children:[SlidableAction(onPressed:(_)=>controller.toggleFavorite(problem),backgroundColor:Colors.orange,icon:Icons.star,label:'收藏',),],),// 右滑 - 跳过/错题操作endActionPane:ActionPane(motion:constScrollMotion(),children:[SlidableAction(onPressed:(_)=>controller.markAsWrong(problem),backgroundColor:Colors.red,icon:Icons.close,label:'错题',),],),child:ProblemCard(problem:problem),// 你的题目卡片UI)

就这么几行代码!滑动效果直接拉满,用户体验瞬间提升一个档次~🚀

3. flutter_html - 代码语法高亮 🎨

刷题最烦的是什么?代码展示一团糟!用 flutter_html 直接渲染带语法高亮的 HTML 代码,爽到飞起!

WidgetbuildCodeDisplay(StringcodeHtml){returnHtml(data:codeHtml,style:{'code':Style(backgroundColor:Colors.grey[900],fontFamily:'monospace',fontSize:FontSize(14),),'.hljs-keyword':Style(color:Colors.purple),'.hljs-string':Style(color:Colors.green),'.hljs-number':Style(color:Colors.orange),},);}

看到没?代码关键字、字符串、数字都有不同颜色,跟 IDE 里的体验一模一样!🌈

4. Get - 轻量状态管理 🎯

用 Get 做状态管理,真的是太香了!一个 Controller 搞定所有页面状态,代码清爽到爆炸~

classProblemControllerextendsGetxController{finalRxList<Problem>problems=<Problem>[].obs;finalRxList<Problem>favorites=<Problem>[].obs;voidtoggleFavorite(Problemproblem){problem.isFavorited=!problem.isFavorited;problem.isFavorited?favorites.add(problem):favorites.remove(problem);update();// 自动刷新UIsaveToDatabase();// 同步到数据库}}

然后在页面里直接用,几行代码搞定响应式更新:

finalcontroller=Get.put(ProblemController());// 绑定UI,数据变化自动刷新Obx(()=>Text('已收藏:${controller.favorites.length}题'))

5. sqflite_ohos - 鸿蒙本地存储 💾

重点来了!OpenHarmony 平台的本地存储,用官方适配的 sqflite_ohos 就对了!

classDatabaseHelper{staticDatabase?_db;Future<Database>getdbasync{if(_db!=null)return_db!;_db=awaitopenDatabase('leetcode.db',version:1,onCreate:(db,version)async{awaitdb.execute(''' CREATE TABLE problems ( id TEXT PRIMARY KEY, title TEXT, isFavorited INTEGER, isCompleted INTEGER, isWrong INTEGER ) ''');},);return_db!;}}

保存刷题记录也是几行代码的事儿:

Future<void>saveProgress(Problemproblem)async{finaldb=awaitdatabase;awaitdb.insert('problems',{'id':problem.id,'isFavorited':problem.isFavorited?1:0,'isCompleted':problem.isCompleted?1:0,},conflictAlgorithm:ConflictAlgorithm.replace);}

6. 刷题逻辑实现 🧠

最后把所有东西串起来,实现完整的刷题流程:

voidsubmitAnswer(Problemproblem,Stringanswer){if(checkAnswer(problem,answer)){problem.isCompleted=true;Get.snackbar('🎉 恭喜!','答对啦!继续加油~');}else{problem.isWrong=true;Get.snackbar('😅 加油','答案不对哦,已加入错题本');}controller.updateProblem(problem);DatabaseHelper().saveProgress(problem);}

🏆 完整实现总结

📁 项目结构

lib/ ├── models/ # 数据模型 │ └── problem.dart ├── controllers/ # Get状态管理 │ └── problem_controller.dart ├── database/ # sqflite_ohos数据库 │ └── database_helper.dart ├── pages/ # 页面 │ ├── problem_list_page.dart │ ├── problem_detail_page.dart │ └── favorite_page.dart └── main.dart

✨ 核心亮点回顾

  1. ⚡ 丝滑滑动操作- flutter_slidable 让收藏 / 标记错题变得超级顺手

  2. 🎨 专业代码展示- flutter_html 渲染语法高亮,刷题体验直接拉满

  3. 🎯 极简状态管理- Get 库用起来真的会上瘾,代码量减少 50%

  4. 💾 可靠数据持久化- sqflite_ohos 官方适配,鸿蒙平台放心用

  5. 📱 完全离线可用- 没网也能安心刷题,数据存在本地

🚀 运行效果

在 OpenHarmony 真机上运行的效果那叫一个丝滑!~

  • 首页题目列表,左右滑动操作,流畅度满分

  • 题目详情页代码高亮,跟在电脑上看没区别

  • 收藏和错题本功能,数据重启 APP 也不丢失

  • 整个 APP 包体积才 5MB 左右,安装秒完成


💪 写在最后

怎么样?跟着这篇文章,你也能在 OpenHarmony 上打造出一款专业级的编程题库 APP!这四个库的组合真的是 Flutter 开发的黄金搭档,强烈推荐大家都去试试~

Flutter for OpenHarmony 的生态现在越来越完善了,以前很多需要自己造轮子的功能,现在都有成熟的第三方库可以直接用。作为开发者,真的很开心看到鸿蒙生态越来越繁荣!🌸

如果这篇文章对你有帮助,别忘了点赞收藏哦!有问题欢迎在评论区交流~咱们下期再见!👋

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 7:42:03

重构AI技能库:以高信号密度提升AI编程助手协作效率

1. 从“技能臃肿”到“信号密度”&#xff1a;我为什么重构了我的AI技能库 如果你和我一样&#xff0c;深度依赖Claude、Cursor这类AI编程助手&#xff0c;那你肯定也经历过这样的时刻&#xff1a;面对一个复杂的Docker Compose编排问题&#xff0c;你满怀期待地调用了相关的“…

作者头像 李华
网站建设 2026/5/10 7:41:48

C语言打造高性能终端状态行:模块化设计与Tmux集成实践

1. 项目概述&#xff1a;一个为现代终端打造的动态状态行构建器如果你和我一样&#xff0c;每天有超过一半的工作时间是在终端&#xff08;Terminal&#xff09;里度过的&#xff0c;那么你一定对那个位于窗口底部、显示着当前路径、Git分支、命令执行状态等信息的状态行&#…

作者头像 李华
网站建设 2026/5/10 7:41:47

Ailice开源AI智能体框架:IACT架构与本地部署实战指南

1. 项目概述&#xff1a;Ailice&#xff0c;一个开源的通用AI智能体框架 如果你对AI智能体&#xff08;AI Agent&#xff09;感兴趣&#xff0c;并且希望找到一个既能本地部署、保护隐私&#xff0c;又能像电影里的“贾维斯”那样&#xff0c;帮你处理从写代码、查资料到系统管…

作者头像 李华
网站建设 2026/5/10 7:40:47

从Prompt到系统:揭秘Agent开发的核心与分层实战策略

文章深入探讨了智能体&#xff08;Agent&#xff09;开发的核心概念与实现策略。首先定义了Agent作为以大模型为核心&#xff0c;结合记忆、工具、工作流等能力的系统&#xff0c;强调了其任务闭环特性。文章进一步解析了Agent的三个层级&#xff08;L0-L3&#xff09;及其特点…

作者头像 李华
网站建设 2026/5/10 7:31:43

G-Helper终极指南:告别臃肿,用轻量级工具全面掌控华硕设备

G-Helper终极指南&#xff1a;告别臃肿&#xff0c;用轻量级工具全面掌控华硕设备 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobo…

作者头像 李华
网站建设 2026/5/10 7:29:53

G-Helper终极指南:如何用轻量级工具全面掌控华硕设备

G-Helper终极指南&#xff1a;如何用轻量级工具全面掌控华硕设备 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Exp…

作者头像 李华