Giter VIP home page Giter VIP logo

amoshuke / mood-example Goto Github PK

View Code? Open in Web Editor NEW
419.0 11.0 67.0 114.16 MB

🐦 Flutter 3 心情记录 样例工程 - 国际化 i18n、uni 小程序、深色模式、多主题、本地数据管理、路由管理、状态管理、无障碍(Semantics)、异步 FFI、集成测试、图表统计、Excel 导入导出、游戏…

License: BSD 3-Clause "New" or "Revised" License

Kotlin 0.36% Swift 0.33% Objective-C 21.26% Dart 49.02% HTML 0.80% CSS 0.09% JavaScript 1.94% Ruby 0.17% C 20.51% C++ 5.49% CMake 0.03%
flutter flutter-examples flutter-demo flutter-app mood dart uniapp demo semantics mini-program

mood-example's Introduction

Preview1


Logo Mood Example

Sparkline

Mood-Example v1.9.9 Flutter v3.19.6 Dart v3.3.4 BSD-3-Clause License


🐦 简介

情绪记录 样例工程
管理自己的情绪,记录当下所见所想,以及其他实验室功能(不定时更新一些功能)
运用 Flutter 的实践工程,主要目的是学习、实践。

Note

注意:由于是学习实践工程,所以重点在于学习,许多业务逻辑可能并不符合现实。
Emoji 因设备缘故,会存在不同样式。

🌏 相关网站

Flutter 官网(中文):https://flutter.cn/
Flutter 官网(英文):https://flutter.dev/
Packages (原始站点) :https://pub.dev/
Packages (**镜像) :https://pub-web.flutter-io.cn/

⭐ 功能

  • 国际化 i18n l10n
  • 多主题
  • 深色模式
  • 本地数据管理
  • 路由管理
  • 状态管理
  • 集成测试
  • 情绪记录
  • 图表统计
  • Excel 导入导出
  • 无障碍支持 (Semantics)
  • Web 访问
  • 解锁认证(锁屏密码、生物特征识别)
  • 本地通知
  • 动画
  • 实验室(占用 APP 大部分包体积,源码位置查看项目结构)
    • uniapp 小程序(UniMPSDK v3.98)
    • 3D 城市(obj 格式)
    • 游戏合集(Bonfire, Flame)
    • FFI 异步调用 C/C++
      ……

🛠️ 开发环境

🛠️ 基本环境

Windows:

[√] Flutter (Channel stable, 3.19.6, on Microsoft Windows [版本 10.0.22621.3007], locale zh-CN)
[√] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[√] Visual Studio - develop Windows apps (Visual Studio Community 2022 17.9.6)
[√] Android Studio (version 2023.2)
[√] IntelliJ IDEA Ultimate Edition (version 2024.1)
[√] VS Code (version 1.88.1)

macOS:

[✓] Flutter (Channel stable, 3.19.6, on macOS 14.4.1 23E224 darwin-x64, locale zh-Hans-CN)
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 15.3)
[✓] Android Studio (version 2023.2)
[✓] VS Code (version 1.88.1)

🛠️ i18n l10n

官方国际化教程:中文站 | 英文站

├── lib/
│   ├── config/
│   │   └── language.dart   # 语言配置(用于列表选项)
│   ├── l10n/               # l10n 语言包
│   │   ├── gen/            # l10n 语言包生成的文件夹(不用编码,自动生成)
│   │   └── app_zh_CN.arb   # 如 简体中文:zh_CN
├── l10n.yaml               # l10n 配置
......

🎉 启动

开发环境 支持的情况下

# 克隆项目
$ git clone https://github.com/AmosHuKe/Mood-Example.git

# 获取依赖
$ flutter pub get

# 启动项目或相关 IDE 启动
$ flutter run

# 更多启动模式
$ flutter run --debug/release/profile/test

# 清理构建缓存
$ flutter clean

# 集成测试
$ flutter test integration_test/app_test.dart

📑 项目结构

├── android/                                        # Android 工程文件 
│   ├── app/                      
│   │   ├── libs/                                   # 包含 UniMPSDK 依赖库
│   │   └── src/
│   │       └── main/                 
│   │           ├── assets/                         # 包含 UniMPSDK 内容
│   │           │   ├── apps/                       # 包含 UniMPSDK 的 uniapp 小程序
│   │           │   ├── data/                       # 包含 UniMPSDK 内容
│   │           └── kotlin/                         
│   │               └── com/                     
│   │                   └── example/   
│   │                       └── moodexample/
│   │                           └── MainActivity.kt # Flutter 的 Android 默认入口
│   └── CMakeLists.txt                              # CMake(目前编译 FFI 需要的文件)
├── assets/                                         # 静态资源文件
├── build/                                          # 编译或运行后产物
├── integration_test/                               # 集成测试
│   └── app_test.dart                               # 集成测试入口 用例
├── ios/                                            # iOS 工程文件
│   ├── Classes/                                    # Classes(目前存放 FFI 相关文件)
│   │   ├── include/
│   │   │   └── dart_native_api                     # DartNativeAPI 接口库
│   │   └── ffi.cpp                                 # FFI 逻辑测试
│   ├── Runner/                                     # Runner
│   │   ├── UniMPSDK/                               # 包含 UniMPSDK 内容
│   │   │   ├── Apps/                               # 包含 UniMPSDK 的 uniapp 小程序
│   │   │   └── Core/                               # 包含 UniMPSDK 依赖库
│   │   ├── AppDelegate.swift                       # Flutter 的 iOS 默认入口
│   │   ├── Info.plist                              # 项目配置
│   │   └── Runner-Bridging-Header.h                # 依赖库引入
│   └── Podfile                                     # 依赖配置
├── lib/                                            # 工程相关文件(主要编码)
│   ├── common/                                     # 公共相关
│   │   ├── local_auth_utils.dart                   # 本地认证(生物特征识别)
│   │   ├── notification.dart                       # 本地通知
│   │   ├── utils_intl.dart                         # 国际化工具
│   │   └── utils.dart                              # 工具
│   ├── config/                                     # 配置
│   │   ├── language.dart                           # 语言配置(用于列表选项)
│   │   └── multiple_themes.dart                    # 多主题配置
│   ├── db/                                         # 数据存储相关
│   │   ├── database/                               # sqflite 数据表配置
│   │   ├── db.dart                                 # sqflite 数据库相关
│   │   └── preferences_db.dart                     # shared_preferences 数据相关
│   ├── l10n/                                       # l10n 语言包
│   │   ├── gen/                                    # l10n 语言包生成的文件夹(不用编码,自动生成)
│   ├── models/                                     # 数据模型
│   ├── providers/                                  # 业务状态逻辑
│   ├── services/                                   # 数据服务
│   ├── themes/                                     # 主题相关
│   │   ├── multiple_themes_mode/                   # 多主题配色
│   │   │   └── theme_default.dart.dart             # 多主题默认配色
│   │   └── app_theme.dart                          # 主题基础
│   ├── views/                                      # 视图
│   │   ├── home/                                   # 首页
│   │   ├── menu_screen/                            # 侧边设置栏
│   │   ├── mood/                                   # 心情页
│   │   ├── onboarding/                             # 用户引导页
│   │   ├── settings/                               # 侧边设置栏-其他页面组件(实验室等)
│   │   │   └── laboratory/                         # 实验室
│   │   │       ├── 3d/                             # 3D 城市
│   │   │       ├── ffi/                            # ffi 测试
│   │   │       ├── game/                           # 游戏合集
│   │   │       ├── unimp_miniapps/                 # uniapp 小程序
│   │   │       └── index.dart                      # 实验室首页
│   │   ├── statistic/                              # 统计页
│   │   └── web_view/                               # WebView
│   ├── widgets/                                    # 通用组件相关
│   ├── application.dart                            # 主应用
│   ├── home_screen.dart                            # 主应用导航相关
│   ├── init.dart                                   # 初始化相关
│   ├── main.dart                                   # 主应用入口
│   └── routes.dart                                 # 路由管理
├── test/                                           # 测试
├── .gitignore                                      # Git 提交仓库忽略文件配置
├── .metadata                                       # 当前 workspace 配置记录
├── analysis_options.yaml                           # Dart 语言代码规范
├── l10n.yaml                                       # l10n 配置
├── pubspec.lock                                    # 依赖生成的文件
└── pubspec.yaml                                    # 核心配置文件(项目配置、依赖等)

🤔️ 常见问题

Q: 小程序无法使用视频、地图等

点击展开

这是因为项目中只集成了核心基础库(因为仅作为集成演示),
许多功能库(比如视频、地图、分享、支付、登录、直播 pusher 等 SDK)没有集成,

如果你需要这些功能就需要自行集成。

比如在 iOS 中集成,需要先下载 UniMP_iOS_SDK
然后你会看见如下结构:

├── UniMPSDK/
│   ├── Core/         # 核心库
│   ├── Features/     # 非核心功能库
......

之后根据以下两个官方教程进行集成:

Q: 在 APP 关闭后,通知失效

点击展开

在确认应用开启了通知的情况下,关闭 APP 后依旧无法通知。
这是因为部分品牌 Android 默认使用了电池节能策略。

解决:关闭应用的电池节能策略,并打开自启动

📦 Packages

感谢开源

Packages License
bonfire MIT License
card_swiper MIT License
ditredi MIT License
excel MIT License
flame MIT License
fluro MIT License
file_picker MIT License
flutter_slidable MIT License
flutter_zoom_drawer MIT License
flutter_screen_lock MIT License
flutter_smart_dialog MIT License
flutter_tilt MIT License
provider MIT License
remixicon MIT License
awesome_notifications Apache-2.0 License
flutter_screenutil Apache-2.0 License
flutter_timezone Apache-2.0 License
table_calendar Apache-2.0 License
sqflite BSD-2-Clause License
animations BSD-3-Clause License
fl_chart BSD-3-Clause License
flutter_lints BSD-3-Clause License
intl BSD-3-Clause License
local_auth BSD-3-Clause License
path_provider BSD-3-Clause License
share_plus BSD-3-Clause License
shared_preferences BSD-3-Clause License
webview_flutter BSD-3-Clause License

🖼️ Illustration

Illustration by Tanya Krasutska from Ouch!

🎨 Design

Design by Mindfulness Concept App from Bogusław Podhalicz.

📄 License

BSD-3-Clause License
Open sourced under the BSD-3-Clause license.
根据 BSD-3-Clause 许可证开源。
© AmosHuKe

mood-example's People

Contributors

amoshuke avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mood-example's Issues

启动失败

flutter clean以及flutter pub get命令都试过了,还是报错

# Git最新的代码就是这个版本,无论是手动改成^2.6.1或者2.6.1以及最新版,都是不行
bonfire: 2.6.1

Flutter版本信息:

Flutter assets will be downloaded from https://storage.flutter-io.cn. Make sure you trust this source!
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 3.3.4, on Microsoft Windows [版本 10.0.19044.2130], locale zh-CN)
[√] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
[√] Chrome - develop for the web
[√] Visual Studio - develop for Windows (Visual Studio Community 2022 17.2.6)
[√] Android Studio (version 2021.2)
[√] IntelliJ IDEA Ultimate Edition (version 2022.1)
[√] Connected device (3 available)
[√] HTTP Host Availability

运行构建命令:

flutter build apk --target-platform android-arm64

错误日志:

Flutter assets will be downloaded from https://storage.flutter-io.cn. Make sure you trust this source!
/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/bonfire-2.6.1/lib/tiled/tiled_world_map.dart:15:8: Error: Error when reading '/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/tiledjsonreader-1.2.5/lib/map/layer/object_group.dart': 系统找不到指定的文件�?

import 'package:tiledjsonreader/map/layer/object_group.dart';
       ^
/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/bonfire-2.6.1/lib/tiled/tiled_world_map.dart:21:8: Error: Error when reading '/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/tiledjsonreader-1.2.5/lib/tile_set/tile_set.dart': 系统找不到指定的文件�?

import 'package:tiledjsonreader/tile_set/tile_set.dart';
       ^
/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/bonfire-2.6.1/lib/tiled/tiled_world_map.dart:350:20: Error: Type 'ObjectGroup' not found.
  void _addObjects(ObjectGroup layer) {
                   ^^^^^^^^^^^
/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/bonfire-2.6.1/lib/tiled/tiled_world_map.dart:424:42: Error: Type 'TileSet' not found.
  TiledDataObjectCollision _getCollision(TileSet tileSetContain, int index) {
                                         ^^^^^^^
/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/bonfire-2.6.1/lib/tiled/tiled_world_map.dart:520:5: Error: Type 'TileSet' not found.
    TileSet tileSetContain,
    ^^^^^^^
/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/bonfire-2.6.1/lib/tiled/tiled_world_map.dart:124:18: Error: 'ObjectGroup' isn't a type.
    if (layer is ObjectGroup) {
                 ^^^^^^^^^^^
/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/bonfire-2.6.1/lib/tiled/tiled_world_map.dart:278:5: Error: 'TileSet' isn't a type.
    TileSet? tileSetContain;
    ^^^^^^^
/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/bonfire-2.6.1/lib/tiled/tiled_world_map.dart:284:24: Error: The getter 'tileSet' isn't defined for the class 'TileSetDetail'.
 - 'TileSetDetail' is from 'package:tiledjsonreader/map/tile_set_detail.dart' ('/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/tiledjsonreader-1.2.5/lib/map/tile_set_detail.dart').   
Try correcting the name to the name of an existing getter, or defining a getter or field named 'tileSet'.
        return tileSet.tileSet != null &&
                       ^^^^^^^
/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/bonfire-2.6.1/lib/tiled/tiled_world_map.dart:290:37: Error: The getter 'tileSet' isn't defined for the class 'TileSetDetail'.
 - 'TileSetDetail' is from 'package:tiledjsonreader/map/tile_set_detail.dart' ('/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/tiledjsonreader-1.2.5/lib/map/tile_set_detail.dart').   
Try correcting the name to the name of an existing getter, or defining a getter or field named 'tileSet'.
      tileSetContain = findTileset?.tileSet;
                                    ^^^^^^^
/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/bonfire-2.6.1/lib/tiled/tiled_world_map.dart:350:20: Error: 'ObjectGroup' isn't a type.
  void _addObjects(ObjectGroup layer) {
                   ^^^^^^^^^^^
/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/bonfire-2.6.1/lib/tiled/tiled_world_map.dart:424:42: Error: 'TileSet' isn't a type.
  TiledDataObjectCollision _getCollision(TileSet tileSetContain, int index) {
                                         ^^^^^^^
/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/bonfire-2.6.1/lib/tiled/tiled_world_map.dart:434:43: Error: The getter 'type' isn't defined for the class 'TileSetItem'.
 - 'TileSetItem' is from 'package:tiledjsonreader/tile_set/tile_set_item.dart' ('/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/tiledjsonreader-1.2.5/lib/tile_set/tile_set_item.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'type'.
      String type = tileSetItemList.first.type ?? '';
                                          ^^^^
/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/bonfire-2.6.1/lib/tiled/tiled_world_map.dart:520:5: Error: 'TileSet' isn't a type.
    TileSet tileSetContain,
    ^^^^^^^
/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/bonfire-2.6.1/lib/tiled/tiled_world_map.dart:581:29: Error: The getter 'TileSet' isn't defined for the class 'TiledWorldMap'.
 - 'TiledWorldMap' is from 'package:bonfire/tiled/tiled_world_map.dart' ('/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/bonfire-2.6.1/lib/tiled/tiled_world_map.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'TileSet'.
          tileSet.tileSet = TileSet.fromJson(_result);
                            ^^^^^^^
/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/bonfire-2.6.1/lib/tiled/tiled_world_map.dart:581:19: Error: The setter 'tileSet' isn't defined for the class 'TileSetDetail'.
 - 'TileSetDetail' is from 'package:tiledjsonreader/map/tile_set_detail.dart' ('/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/tiledjsonreader-1.2.5/lib/map/tile_set_detail.dart').   
Try correcting the name to the name of an existing setter, or defining a setter or field named 'tileSet'.
          tileSet.tileSet = TileSet.fromJson(_result);
                  ^^^^^^^
/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/bonfire-2.6.1/lib/util/overlay_manager.dart:43:42: Error: The getter 'value' isn't defined for the class 'OverlayManager'.
 - 'OverlayManager' is from 'package:flame/src/game/overlay_manager.dart' ('/E:/src/flutter/.pub-cache/hosted/pub.flutter-io.cn/flame-1.4.0/lib/src/game/overlay_manager.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'value'.
  Set<String> get value => game.overlays.value;
                                         ^^^^^


FAILURE: Build failed with an exception.

* Where:
Script 'E:\src\flutter\packages\flutter_tools\gradle\flutter.gradle' line: 1159

* What went wrong:
Execution failed for task ':app:compileFlutterBuildRelease'.
> Process 'command 'E:\src\flutter\bin\flutter.bat'' finished with non-zero exit value 1

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1m 6s
Running Gradle task 'assembleRelease'...                           68.4s
Gradle task assembleRelease failed with exit code 1

背景图片

卡片上的背景图片是怎么制作的?

flutter run 报错 (Apple M1)

$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.19.0, on macOS 14.0 23A344 darwin-arm64, locale
    zh-Hans-CN)
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 15.0)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2023.1)
[✓] VS Code (version 1.86.0)
[✓] Connected device (3 available)
[✓] Network resources

• No issues found!

模拟器是 iPhone15 iOS 17
报错如下:

[   +1 ms] Error (Xcode): Building for 'iOS-simulator', but linking in object file

(/Users/zhuliangzhen/dev/learning/Mood-Example/ios/Runner/UniMPSDK/Core/Libs/liblibWeex.
           a[arm64][2](uni_api_file_stream_export.o)) built for 'iOS'
           
[        ] Error (Xcode): Linker command failed with exit code 1 (use -v to see
invocation)
           
[        ] Could not build the application for the simulator.
[        ] Error launching application on iPhone 15.
[   +4 ms] 
           #0      throwToolExit (package:flutter_tools/src/base/common.dart:10:3)
           #1      RunCommand.runCommand
(package:flutter_tools/src/commands/run.dart:811:9)
           <asynchronous suspension>
           #2      FlutterCommand.run.<anonymous closure>
           (package:flutter_tools/src/runner/flutter_command.dart:1389:27)
           <asynchronous suspension>
           #3      AppContext.run.<anonymous closure>
           (package:flutter_tools/src/base/context.dart:153:19)
           <asynchronous suspension>
           #4      CommandRunner.runCommand (package:args/command_runner.dart:212:13)
           <asynchronous suspension>
           #5      FlutterCommandRunner.runCommand.<anonymous closure>
           (package:flutter_tools/src/runner/flutter_command_runner.dart:355:9)
           <asynchronous suspension>
           #6      AppContext.run.<anonymous closure>
           (package:flutter_tools/src/base/context.dart:153:19)
           <asynchronous suspension>
           #7      FlutterCommandRunner.runCommand
           (package:flutter_tools/src/runner/flutter_command_runner.dart:295:5)
           <asynchronous suspension>
           #8      run.<anonymous closure>.<anonymous closure>
           (package:flutter_tools/runner.dart:119:9)
           <asynchronous suspension>
           #9      AppContext.run.<anonymous closure>
           (package:flutter_tools/src/base/context.dart:153:19)
           <asynchronous suspension>
           #10     main (package:flutter_tools/executable.dart:90:3)
           <asynchronous suspension>

系统信息:

  • Apple M1 Pro
  • macOS 14.0 (23A344)

求帮助😭

ios开启小程序报错

Could not build the precompiled application for the device.
Error (Xcode): Library not found for -llibNavigator

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.