{"id":15549941,"url":"https://github.com/amoshuke/mood-example","last_synced_at":"2025-04-08T08:13:41.410Z","repository":{"id":39611884,"uuid":"428710843","full_name":"AmosHuKe/Mood-Example","owner":"AmosHuKe","description":"🐦 Flutter 3 心情记录 样例工程 - 国际化 i18n、uni 小程序、深色模式、多主题、本地数据管理、路由管理、状态管理、无障碍（Semantics）、异步 FFI、集成测试、图表统计、Excel 导入导出、游戏…","archived":false,"fork":false,"pushed_at":"2025-03-04T07:12:10.000Z","size":190498,"stargazers_count":515,"open_issues_count":0,"forks_count":83,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-04-01T05:34:10.528Z","etag":null,"topics":["dart","demo","flutter","flutter-app","flutter-demo","flutter-examples","mini-program","mood","semantics","uniapp"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AmosHuKe.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-16T15:31:00.000Z","updated_at":"2025-03-31T13:48:12.000Z","dependencies_parsed_at":"2023-10-12T19:33:18.987Z","dependency_job_id":"153641cb-b854-48e2-868e-5a28c9e1970a","html_url":"https://github.com/AmosHuKe/Mood-Example","commit_stats":{"total_commits":496,"total_committers":1,"mean_commits":496.0,"dds":0.0,"last_synced_commit":"27238fce04bc0e257756f0c4fc6e381ee088d2b7"},"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmosHuKe%2FMood-Example","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmosHuKe%2FMood-Example/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmosHuKe%2FMood-Example/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmosHuKe%2FMood-Example/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AmosHuKe","download_url":"https://codeload.github.com/AmosHuKe/Mood-Example/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247801169,"owners_count":20998339,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dart","demo","flutter","flutter-app","flutter-demo","flutter-examples","mini-program","mood","semantics","uniapp"],"created_at":"2024-10-02T13:44:26.831Z","updated_at":"2025-04-08T08:13:41.390Z","avatar_url":"https://github.com/AmosHuKe.png","language":"Dart","readme":"\n\u003cp align=\"center\"\u003e\u003cimg alt=\"Preview1\" src=\"./README/preview/preview1.png\"\u003e\u003c/p\u003e\n\n\u003cbr/\u003e\n\n\u003ch1 align=\"center\"\u003e\n  \u003cimg alt=\"Logo\" src=\"./README/logo/logo.png\" width=\"48px\" style=\"border-radius:16px;\" /\u003e \u003cspan\u003eMood Example\u003c/span\u003e\n\n  [![Sparkline](https://stars.medv.io/AmosHuKe/Mood-Example.svg)](https://stars.medv.io/AmosHuKe/Mood-Example)\n\u003c/h1\u003e \n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"/CHANGELOG.md\"\u003e\u003cimg alt=\"Mood-Example v1.9.11\" src=\"https://img.shields.io/badge/Mood--Example-v1.9.11-3e4663\"/\u003e\u003c/a\u003e \n  \u003ca href=\"https://flutter.dev/\"\u003e\u003cimg alt=\"Flutter v3.29.2\" src=\"https://img.shields.io/badge/Flutter-v3.29.2-0468D7\"/\u003e\u003c/a\u003e \n  \u003ca href=\"https://dart.dev/\"\u003e\u003cimg alt=\"Dart v3.7.2\" src=\"https://img.shields.io/badge/Dart-v3.7.2-04599C\"/\u003e\u003c/a\u003e \n  \u003ca href=\"https://github.com/AmosHuKe/Mood-Example/blob/main/LICENSE\"\u003e\u003cimg alt=\"BSD-3-Clause License\" src=\"https://img.shields.io/badge/License-BSD--3--Clause-green\"/\u003e\u003c/a\u003e \n\u003c/p\u003e \n\n\u003csub\u003e\n\n- [简介](#-简介)\n\n- [相关网站](#-相关网站)\n\n- [功能](#-功能)\n\n- [开发环境](#️-开发环境)\n\n  - [基本环境](#️-基本环境)\n\n  - [i18n l10n](#️-i18n-l10n)\n\n- [启动](#-启动)\n\n- [项目结构](#-项目结构)\n\n- [常见问题](#️-常见问题)\n\n- [Packages](#-Packages)\n\n- [Illustration](#️-Illustration)\n\n- [Design](#-Design)\n\n- [License](#-License)\n\n\u003c/sub\u003e\n\n\u003cbr/\u003e\n\n## 🐦 简介\n\n`情绪记录` 样例工程  \n管理自己的情绪，记录当下所见所想，以及其他`实验室`功能（不定期更新一些功能）  \n运用 `Flutter` 的工程，主要目的是学习、实践。  \n\n\u003e [!NOTE]  \n\u003e 注意：由于是学习实践工程，所以重点在于学习，许多业务逻辑可能并不符合现实。  \n\u003e Emoji 因设备缘故，会存在不同样式。  \n\n\n## 🌏 相关网站\n\n\u003e Flutter 官网（中文）：[https://flutter.cn/](https://flutter.cn/)  \n\u003e Flutter 官网（英文）：[https://flutter.dev/](https://flutter.dev/)  \n\u003e Packages (原始站点) ：[https://pub.dev/](https://pub.dev/)  \n\u003e Packages (中国镜像) ：[https://pub-web.flutter-io.cn/](https://pub-web.flutter-io.cn/)  \n\n\n## ⭐ 功能\n\n- [x] 国际化 i18n l10n  \n- [x] 多主题  \n- [x] 深色模式  \n- [x] 本地数据管理  \n- [x] 路由管理  \n- [x] 状态管理  \n- [x] 集成测试  \n- [x] 情绪记录  \n- [x] 图表统计  \n- [x] Excel 导入导出  \n- [x] 无障碍支持 (Semantics)  \n- [x] Web 访问  \n- [x] 解锁认证（锁屏密码、生物特征识别）  \n- [x] 本地通知  \n- [x] 动画  \n- [x] 实验室（占用 APP 大部分包体积，源码位置查看项目结构）  \n  - [x] uniapp 小程序（UniMPSDK v4.45）  \n  - [x] 3D 城市（obj 格式）  \n  - [x] 游戏合集（Bonfire, Flame）  \n  - [x] FFI 异步调用 C/C++  \n……\n\n\n## 🛠️ 开发环境\n\n### 🛠️ 基本环境  \n\nWindows:   \n```\n[√] Flutter (Channel stable, 3.29.2, on Microsoft Windows [版本 10.0.22621.3007], locale zh-CN)\n[√] Android toolchain - develop for Android devices (Android SDK version 35.0.0)\n[√] Visual Studio - develop Windows apps (Visual Studio Community 2022 17.13.5)\n[√] Android Studio (version 2024.2)\n[√] IntelliJ IDEA Ultimate Edition (version 2024.3)\n[√] VS Code (version 1.99.0)\n```  \n\nmacOS:   \n```\n[✓] Flutter (Channel stable, 3.29.2, on macOS 14.7 23H124 darwin-x64, locale zh-Hans-CN)\n[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)\n[✓] Xcode - develop for iOS and macOS (Xcode 16.2)\n[✓] Android Studio (version 2024.2)\n[✓] VS Code (version 1.97.2)\n```  \n\n\n### 🛠️ i18n l10n  \n\n官方国际化教程：[中文站](https://docs.flutter.cn/ui/accessibility-and-internationalization/internationalization) | [英文站](https://docs.flutter.dev/ui/accessibility-and-internationalization/internationalization)  \n\n```sh\n├── lib/\n│   ├── l10n/                   # l10n 语言包\n│   │   ├── gen/                # l10n 语言包生成的文件夹（不用编码，自动生成）\n│   │   └── app_zh_CN.arb       # 如 简体中文：zh_CN\n│   ├── shared/\n│   │   ├── config/\n│   │   │   └── language.dart   # 语言配置\n├── l10n.yaml                   # l10n 配置\n......\n```\n\n\n## 🎉 启动\n\n在 [开发环境](#%EF%B8%8F-%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83) 支持的情况下  \n\n```sh\n# 克隆项目\n$ git clone https://github.com/AmosHuKe/Mood-Example.git\n\n# 获取依赖\n$ flutter pub get\n\n# 启动项目或相关 IDE 启动\n$ flutter run\n\n# 更多启动模式\n$ flutter run --debug/release/profile/test\n\n# 清理构建缓存\n$ flutter clean\n\n# 集成测试\n$ flutter test integration_test/app_test.dart --dart-define=test_mode=true\n```\n\n\n## 📑 项目结构\n\n```md\n├── android/                                        # Android 工程文件 \n│   ├── app/                      \n│   │   ├── libs/                                   # 包含 UniMPSDK 依赖库\n│   │   └── src/\n│   │       └── main/                 \n│   │           ├── assets/                         # 包含 UniMPSDK 内容\n│   │           │   ├── apps/                       # 包含 UniMPSDK 的 uniapp 小程序\n│   │           │   ├── data/                       # 包含 UniMPSDK 内容\n│   │           └── kotlin/                         \n│   │               └── com/                     \n│   │                   └── example/   \n│   │                       └── moodexample/\n│   │                           └── MainActivity.kt # Flutter 的 Android 默认入口\n│   └── CMakeLists.txt                              # CMake（目前编译 FFI 需要的文件）\n├── assets/                                         # 静态资源文件\n├── build/                                          # 编译或运行后产物\n├── integration_test/                               # 集成测试\n│   └── app_test.dart                               # 集成测试入口 用例\n├── ios/                                            # iOS 工程文件\n│   ├── Classes/                                    # Classes（目前存放 FFI 相关文件）\n│   │   ├── include/\n│   │   │   └── dart_native_api/                    # DartNativeAPI 接口库\n│   │   └── ffi.cpp                                 # FFI 逻辑测试\n│   ├── Runner/                                     # Runner\n│   │   ├── UniMPSDK/                               # 包含 UniMPSDK 内容\n│   │   │   ├── Apps/                               # 包含 UniMPSDK 的 uniapp 小程序\n│   │   │   └── Core/                               # 包含 UniMPSDK 依赖库\n│   │   ├── AppDelegate.swift                       # Flutter 的 iOS 默认入口\n│   │   ├── Info.plist                              # 项目配置\n│   │   └── Runner-Bridging-Header.h                # 依赖库引入\n│   └── Podfile                                     # 依赖配置\n├── lib/                                            # 工程相关文件（主要编码）\n│   ├── data/                                       # 数据层\n│   │   ├── dao/                                    # 原始数据访问操作\n│   │   ├── database/                               # 数据基础设施\n│   │   │   ├── tables/                             # sqflite 数据表配置\n│   │   │   ├── database.dart                       # sqflite 数据库相关\n│   │   │   └── shared_preferences_db.dart          # shared_preferences 数据相关\n│   │   └── repositories/                           # 仓库实现层（协调业务逻辑）\n│   ├── domain/                                     # 领域层（业务抽象）\n│   │   ├── models/                                 # 数据模型\n│   │   ├── repositories/                           # 仓库抽象层（抽象业务接口）\n│   │   └── use_cases/                              # 业务用例\n│   ├── l10n/                                       # l10n 语言包\n│   │   ├── gen/                                    # l10n 语言包生成的文件夹（不用编码，自动生成）\n│   ├── shared/                                     # 共享相关\n│   │   ├── config/                                 # 配置\n│   │   │   ├── dependencies.dart                   # 依赖注入\n│   │   │   ├── language.dart                       # 语言配置\n│   │   │   └── multiple_theme_mode.dart            # 多主题配置\n│   │   └── view_models/                            # 视图模型\n│   ├── themes/                                     # 主题相关\n│   │   ├── multiple_theme_mode/                    # 多主题配色\n│   │   │   └── theme_default.dart                  # 多主题默认配色\n│   │   └── app_theme.dart                          # 主题基础\n│   ├── utils/                                      # 工具相关\n│   ├── views/                                      # 视图\n│   │   ├── home/                                   # 首页\n│   │   ├── mood/                                   # 心情页\n│   │   ├── onboarding/                             # 用户引导页\n│   │   ├── settings/                               # 侧边设置栏-其他页面（实验室等）\n│   │   │   ├── laboratory/                         # 实验室\n│   │   │   │   ├── 3d/                             # 3D 城市\n│   │   │   │   ├── ffi/                            # ffi 测试\n│   │   │   │   ├── game/                           # 游戏合集\n│   │   │   │   ├── unimp_miniapps/                 # uniapp 小程序\n│   │   │   │   └── laboratory.dart                 # 实验室首页\n│   │   │   └── setting_menu.dart                   # 侧边设置栏页\n│   │   ├── statistic/                              # 统计页\n│   │   ├── web_view/                               # WebView\n│   │   └── main_screen.dart                        # 主屏幕\n│   ├── widgets/                                    # 通用 Widget 相关\n│   ├── application.dart                            # 主应用\n│   ├── init.dart                                   # 初始化相关\n│   ├── main_local.dart                             # 主应用入口（本地数据依赖注入）\n│   ├── main.dart                                   # 主应用入口\n│   └── router.dart                                 # 路由管理\n├── .gitignore                                      # Git 提交仓库忽略文件配置\n├── .metadata                                       # 当前 workspace 配置记录\n├── analysis_options.yaml                           # Dart 代码规范/风格配置\n├── l10n.yaml                                       # l10n 配置\n├── pubspec.lock                                    # 依赖生成的文件（锁定依赖版本等）\n└── pubspec.yaml                                    # 核心配置文件（项目配置、依赖等）\n```\n\n\n## 🤔️ 常见问题  \n\n\u003c!-- ### **Q: 在 iOS 无法打开 uni小程序或无法使用 UniMPSDK**  \n\u003cdetails\u003e\n\u003csummary\u003e点击展开\u003c/summary\u003e\n\n\u003e 这是由于 UniMPSDK 官方提供的依赖超过大小限制。  \n\u003e 本项目为了 iOS 端主要功能不受限，剔除了 UniMPSDK 中 Core/Libs 所有库。  \n\u003e 详细目录说明可查看`项目结构`说明  \n\u003e 跟着以下步骤可以恢复正常使用：  \n\n1、下载 UniMPSDK_iOS 库（如链接失效，请麻烦联系我）  \n* 链接: https://pan.baidu.com/s/1j1FgMfiFTwg5H8i5Rr0m_A 提取码: qbit  \n\n2、将 UniMPSDK 中 Core/Libs 所有库添加到项目中，具体如下：\n* 使用 Xcode 打开 Mood-Example/ios 目录 --\u003e\n\u003c!-- \n* 选择 Runner -\u003e TARGETS(Runner) -\u003e Build Phases -\u003e Link Binary With Libraries  \n* 点击 + 号并选择 Add Other... 找到下载好的 UniMPSDK 目录\n* 全选 UniMPSDK/Core/Libs 中所有库，完成添加   \n--\u003e\n\u003c!-- * 右键项目目录 Runner/UniMPSDK/Core 文件夹  \n* 点击 Add Files to \"Runner\"...  \n* 找到下载的库，选中 UniMPSDK/Core/Libs 文件夹，  \n  勾选 Destination: Copy items if needed，  \n  选择 Added folders: Create groups，  \n  点击 Add 添加完成  \n\n3、调用库并使用代码，具体如下：  \n* 解除 ios/Runner/Runner-Bridging-Header.h 中 #import \"DCUniMP.h\" 的注释  \n* 将 ios/Runner/AppDelegate_UniMPSDK.swift 中的所有逻辑代码复制到 ios/Runner/AppDelegate.swift 中  \n\n4、完成，启动 iOS，测试打开小程序  \n\n5、其他\n* [官方 UniMPSDK iOS 集成教程](https://nativesupport.dcloud.net.cn/UniMPDocs/UseSdk/ios)  \n\u003c/details\u003e --\u003e\n\n### **Q: 小程序无法使用视频、地图等**  \n\u003cdetails\u003e\n\u003csummary\u003e点击展开\u003c/summary\u003e\n\n这是因为项目中只集成了核心基础库（因为仅作为集成演示），  \n许多功能库（比如视频、地图、分享、支付、登录、直播 pusher 等 SDK）没有集成，  \n\n如果你需要这些功能就需要自行集成。\n\n比如在 iOS 中集成，需要先下载  [UniMP_iOS_SDK](https://nativesupport.dcloud.net.cn/UniMPDocs/SDKDownload/ios.html) ，  \n然后你会看见如下结构：\n\n```\n├── UniMPSDK/\n│   ├── Core/         # 核心库\n│   ├── Features/     # 非核心功能库\n......\n```\n\n之后根据以下两个官方教程进行集成：\n\n- [iOS 核心库集成教程（可以看看，非核心库集成方式也是一致）](https://nativesupport.dcloud.net.cn/UniMPDocs/UseSdk/ios.html)\n- [iOS 功能模块集成（包含所有库的教程和说明）](https://nativesupport.dcloud.net.cn/UniMPDocs/UseModule/ios/ios.html)\n\n\u003c/details\u003e\n\n### **Q: 在 APP 关闭后，通知失效**  \n\u003cdetails\u003e\n\u003csummary\u003e点击展开\u003c/summary\u003e\n\n\u003e 在确认应用开启了通知的情况下，关闭 APP 后依旧无法通知。  \n\u003e 这是因为部分品牌 Android 默认使用了电池节能策略。  \n\n解决：关闭应用的电池节能策略，并打开自启动\n\n\u003c/details\u003e\n\n\n## 📦 Packages  \n\n感谢开源  \n\n| Packages | License |  \n|---|---|  \n| [bonfire](https://pub.dev/packages/bonfire) | [MIT License](https://pub.dev/packages/bonfire/license) |  \n| [card_swiper](https://pub.dev/packages/card_swiper) | [MIT License](https://pub.dev/packages/card_swiper/license) |  \n| [ditredi](https://pub.dev/packages/ditredi) | [MIT License](https://pub.dev/packages/ditredi/license) |  \n| [excel](https://pub.dev/packages/excel) | [MIT License](https://pub.dev/packages/excel/license) |  \n| [flame](https://pub.dev/packages/flame) | [MIT License](https://pub.dev/packages/flame/license) |  \n| [file_picker](https://pub.dev/packages/file_picker) | [MIT License](https://pub.dev/packages/file_picker/license) |  \n| [flutter_slidable](https://pub.dev/packages/flutter_slidable) | [MIT License](https://pub.dev/packages/flutter_slidable/license) |  \n| [flutter_zoom_drawer](https://pub.dev/packages/flutter_zoom_drawer) | [MIT License](https://pub.dev/packages/flutter_zoom_drawer/license) |  \n| [flutter_screen_lock](https://pub.dev/packages/flutter_screen_lock) | [MIT License](https://pub.dev/packages/flutter_screen_lock/license) |  \n| [flutter_smart_dialog](https://pub.dev/packages/flutter_smart_dialog) | [MIT License](https://pub.dev/packages/flutter_smart_dialog/license) |  \n| [flutter_tilt](https://pub.dev/packages/flutter_tilt) | [MIT License](https://pub.dev/packages/flutter_tilt/license) |  \n| [provider](https://pub.dev/packages/provider) | [MIT License](https://pub.dev/packages/provider/license) |  \n| [remixicon](https://pub.dev/packages/remixicon) | [MIT License](https://pub.dev/packages/remixicon/license) |  \n| [awesome_notifications](https://pub.dev/packages/awesome_notifications) | [Apache-2.0 License](https://pub.dev/packages/awesome_notifications/license) |  \n| [table_calendar](https://pub.dev/packages/table_calendar) | [Apache-2.0 License](https://pub.dev/packages/table_calendar/license) |  \n| [sqflite](https://pub.dev/packages/sqflite) | [BSD-2-Clause License](https://pub.dev/packages/sqflite/license) |  \n| [fl_chart](https://pub.dev/packages/fl_chart) | [BSD-3-Clause License](https://pub.dev/packages/fl_chart/license) |  \n| [flutter_lints](https://pub.dev/packages/flutter_lints) | [BSD-3-Clause License](https://pub.dev/packages/flutter_lints/license) |  \n| [intl](https://pub.dev/packages/intl) | [BSD-3-Clause License](https://pub.dev/packages/intl/license) |  \n| [local_auth](https://pub.dev/packages/local_auth) | [BSD-3-Clause License](https://pub.dev/packages/local_auth/license) |  \n| [go_router](https://pub.dev/packages/go_router) | [BSD-3-Clause License](https://pub.dev/packages/go_router/license) |  \n| [path_provider](https://pub.dev/packages/path_provider) | [BSD-3-Clause License](https://pub.dev/packages/path_provider/license) |  \n| [share_plus](https://pub.dev/packages/share_plus) | [BSD-3-Clause License](https://pub.dev/packages/share_plus/license) |  \n| [shared_preferences](https://pub.dev/packages/shared_preferences) | [BSD-3-Clause License](https://pub.dev/packages/shared_preferences/license) |  \n| [webview_flutter](https://pub.dev/packages/webview_flutter) | [BSD-3-Clause License](https://pub.dev/packages/webview_flutter/license) |  \n\n\n## 🖼️ Illustration\n\nIllustration by \u003ca href=\"https://icons8.com/illustrations/author/iAdLsFJOKDrk\"\u003eTanya Krasutska\u003c/a\u003e from \u003ca href=\"https://icons8.com/illustrations\"\u003eOuch!\u003c/a\u003e \n\n\n## 🎨 Design\n\nDesign by [Mindfulness Concept App](https://dribbble.com/shots/15733031-Mindfulness-Concept-App) from Bogusław Podhalicz.  \n\n\n## 📄 License\n\n[![BSD-3-Clause License](https://img.shields.io/badge/License-BSD--3--Clause-green)](https://github.com/AmosHuKe/Mood-Example/blob/main/LICENSE)  \nOpen sourced under the BSD-3-Clause license.  \n根据 BSD-3-Clause 许可证开源。  \n© AmosHuKe\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famoshuke%2Fmood-example","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famoshuke%2Fmood-example","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famoshuke%2Fmood-example/lists"}