Flutter for Restro
· 阅读需 4 分钟
介绍
Restro
figma 设计
git@gitlab.suixingpay.com:wang_sb/flutter_resto_demo.git
https://restosuite.sg.larksuite.com/wiki/M5z1wnh9AiN7OLkXFZklBglEged
https://www.figma.com/design/nyVmeDET90AY92wTh7Xbx0/%E9%A2%84%E8%AE%A2-APP?node-id=407-45570&m=dev
Flutter
国内镜像:
export PUB_HOSTED_URL="https://pub.flutter-io.cn"
export FLUTTER_STORAGE_BASE_URL="https://storage.flutter-io.cn"
flutter 基础框架
特性
- 状态管理:GetX
- 路由管理:GetX
- 路由拦截:middlewares
- 路由 Controller 绑定:GetPage -> binding
- 全局 Controller 绑定: app.dart -> initialBinding
- 网络请求封装:commons/ajax.dart -> dio
- 主题切换:GetX
- 枚举:封装 enums
- 区分环境配置: config
- 本地存储、区分 local 和 session 级别:commons/storage.dart
- iconfont 图标:脚本基于 iconfont.json 生成
- 国际化:GetX
- 全局错误捕获上报服务器
- MVVM 模式:models/pages/controllers+services
- 日志管理:commons/logger.dart
- 启动屏:纯 Flutter 组件方式实现,如果是 android 或 ios 可以考虑使用 flutter_native_splash + Flutter组件方式,避免白屏 + 处理业务逻辑
- 屏幕适配(缩放):flutter_screenutil
- 代码生成 build_runner + 自定义脚本
- 代码规范:git_hooks
- app 版本检测,下载新的版本
- 如何做热更新或者类似热更新
- 依赖注入:injectable
- 权限管理:permission_handler 处理相机、存储、GPS等权限 app_settings 让用户跳转到系统设置页
代码生成
通过代码生成,简化开发流程,提高开发效率。
基础代码生成
- models 生成: 基于 json_serializable 做
*.g.dart
相关文件生成 - iconfont:基于builder/iconfont_builder.dart 生成
gen/icon_font.gen.dart
- assets: 基于flutter_gen 做资源文件生成
gen/assets.gen.dart
注意:项目拉取下来之后,首先通过如下命令生成代码。
# 清除缓存
dart run build_runner clean
# 生成代码 强制覆盖已存在的生成文件
dart run build_runner build --delete-conflicting-outputs
生成页面
基于bin/create_page.dart
生成 pages/controllers/services 修改路由文件routes/app_routes.dart
参数说明:
- --name=xxx 指定名称
- -y 强制覆盖已存在文件
最终会生成:
- 创建:pages/test_user/test_user_page.dart;
- 创建:controllers/test_user_controller.dart;
- 创建:services/test_user_service.dart;
- 修改:routes/app_routes.dart
# 例如生成一个test_user页面
dart bin/create_page.dart --name=test_user -y
打开模拟器
flutter emulators
flutter emulators --launch <模拟器名称>
区分环境配置
项目中,区分环境配置主要是通过RUN_ENV
变量来实现的,在lib/config/config.dart
中根据RUN_ENV
变量来配置不同的环境。
# 开发环境
flutter run --dart-define=RUN_ENV=dev
# 生产环境
flutter run --dart-define=RUN_ENV=production
# 测试环境
flutter run --dart-define=RUN_ENV=test
# 打包Android
flutter build apk --release --shrink --dart-define=RUN_ENV=production
# 打包iOS
flutter build ios --dart-define=RUN_ENV=production
代码规范
项目中,代码规范主要是通过analysis_options.yaml
文件来实现的。
git_hooks结合,提交时检测:
# 安装 git_hooks
dart bin/git_hooks_init.dart
# 卸载 报错忽略,库有问题,其实已经卸载了
dart bin/git_hooks_un_install.dart
测试
Flutter 约定测试文件放在/test
目录中,测试文件以_test.dart
结尾,例如test/widget_test.dart
。
运行测试:
flutter test
参考文档
- Flutter 官方文档
- Flutter 官方示例
- Flutter 官方插件
- Flutter 官方插件
- Flutter 学习 Codelabs
- GetX 路由、状态、国际化等
- GetX 路由管理
- Flutter 项目名称修改