0.1 代码规范 代码检查 pubspec.yaml 开启 flutter_lints
1 2 3 4 5 6 7 8 9 10 11 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^1.0.0 ...
目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 ├── lib │ ├── common // 通用功能 │ │ ├── api // 拉取数据 │ │ │ └── index.dart │ │ ├── components // 业务组件 │ │ │ └── index.dart │ │ ├── extension // 扩展 │ │ │ └── index.dart │ │ ├── i18n // 多语言 │ │ │ └── index.dart │ │ ├── index.dart │ │ ├── models // 数据模型 │ │ │ └── index.dart │ │ ├── routers // 路由 │ │ │ └── index.dart │ │ ├── services // 全局服务 │ │ │ └── index.dart │ │ ├── style // 样式 │ │ │ └── index.dart │ │ ├── utils // 工具函数 │ │ │ └── index.dart │ │ ├── values // 配置值 │ │ │ └── index.dart │ │ └── widgets // 基础组件 │ │ └── index.dart │ ├── main.dart │ └── pages // 业务 │ ├── goods // 商品 │ ├── index.dart │ ├── msg // 消息 │ ├── my // 我的 │ ├── order // 订单 │ ├── search // 搜索 │ ├── styles // 样式调试 │ └── system // 系统 │ └── splash // 欢迎屏 │ ├── controller.dart // 逻辑 │ ├── index.dart │ ├── view.dart // 视图 │ └── widgets // 组件
导包 common 内采用相对路径,这样方便代码复用
common/index.dart 导出所有,这样业务 pages 只要一个 import
就行了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 library common;export 'api/index.dart' ;export 'components/index.dart' ;export 'extension/index.dart' ;export 'i18n/index.dart' ;export 'models/index.dart' ;export 'routers/index.dart' ;export 'services/index.dart' ;export 'style/index.dart' ;export 'utils/index.dart' ;export 'values/index.dart' ;export 'widgets/index.dart' ;import 'package:flutter/material.dart' ;import 'package:flutter_woo_commerce_getx_learn/common/index.dart' ;import 'package:get/get.dart' ;import 'index.dart' ;class WidgetsPage extends GetView <WidgetsController > { const WidgetsPage({Key? key}) : super (key: key);
package:flutter_woo_commerce_getx_learn
是你的项目包名
业务代码 逻辑、视图、组件 分离,业务拆分到 2 层目录,不要再往下了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 │ └── pages │ ├── goods │ ├── index.dart │ ├── msg │ ├── my │ ├── order │ ├── search │ ├── styles │ └── system │ └── splash │ ├── controller.dart │ ├── index.dart │ ├── view.dart │ └── widgets
组件内不要包含屏幕适配代码 ScreenUtil 适配可以放在视图层,否则到处都是 .w .h .sp 比较乱
1 2 3 4 5 6 7 8 9 10 11 CardWidget( padding: EdgeInsets.symmetric(horizontal: 24. w, vertical: 51. w), child: Column( children: [ _buildForm(), SizedBox(height: 50. h), _buildSigInBtn(), ], ), )
这种代码放在 lib/pages/ 这层
组件抽取 通用基础组件放在 common/widgets
可复用性最强
1 2 3 4 5 6 7 8 9 10 11 12 ├── common │ └── widgets │ ├── button.dart │ ├── checkbox.dart │ ├── group_list.dart │ ├── icon.dart │ ├── image.dart │ ├── index.dart │ ├── input.dart │ ├── list_tile.dart │ ├── text.dart │ └── text_form.dart
业务组件放在 common/components
满足本 app 业务需求
Api 输入输出不要用 Map , 类型需明确 1 2 3 4 5 static Future<bool > register(UserRegisterReq? req) async { ... return false ; }
UserRegisterReq
就是入参类型明确,定义文件放在 lib/common/models/request
类名约定
用途
前缀
后缀
举例
数据模型
Model
AttributeModel
API 请求
Req
OrdersReq
Service 服务
Service
CartService
UI 组件
Widget
PinPutWidget
样式
App
AppColors
资源
Assets
AssetsImages
extension 扩展
Ex
ExColor
page 控制器
Controller
BuyNowController
page 视图
Page
BuyNowPage
page widget 组件
Build
BuildPriceLine
变量、函数名约定
用途
前缀
后缀
举例
私有
_
_findIndex
视图拆分函数
_build
_buildButtons
主视图函数(保留)
_buildView