注意: 生成工具有待完善,目前先按工具代码规范编写代码,如有不满足的场景,再修改工具。
编写规范需注意:
- 构造方法为类名下的第一行代码,且不能有注释。成员字段需写在构造方法后面。
- 成员变量的注释需要用
///,不能用//。 - 构造方法不能标注
@override。
/// 组件简介(必须)/// 属性简介(必须)./bin/api_tool_xxx generate \
--file 相对ui_component目录的组件文件路径 \
--folder 相对ui_component目录的组件文件夹路径 \
--name 组件名,多个组件名之间用英文,分割 \
--folder-name [可选]生成的组件示例文件夹名称,默认生成的文件夹名称是第一个name参数的下划线表示 \
--[no-]only-api 是否只更新api文件 \
--[no-]use-grammar 是否采用语法分析器,默认采用词法分析前置条件: 在 demo_tool/version 中填入对应 Dart SDK 的版本号。
初始化命令有以下 3 种使用方式:
-
初始化一个组件文件中的一个组件示例
如果没有指定--folder-name,默认文件夹名称是第一个name参数的下划线表示。示例:./demo_tool/bin/api_tool_xxx generate --file lib/src/components/tags/td_tag.dart --name TDTag --folder-name tag --only-api
-
把一个文件中的多个组件合并生成一份示例数据
API 说明生成在一个文件中。如果没有指定--folder-name,默认文件夹名称是第一个name参数的下划线表示。./demo_tool/bin/api_tool_xxx generate --file lib/checkbox/custom_check_box.dart --name SquareCheckbox,TECheckBox --folder-name checkbox2
-
把一个文件夹中的多个组件合并生成一份示例数据
API 说明生成在一个文件中。如果没有指定--folder-name,默认文件夹名称是第一个name参数的下划线表示。./demo_tool/bin/api_tool_xxx generate --folder lib/setting --name SettingItemWidget,SettingTowRowCellWidget,SettingLeftTextCellWidget,SettingCheckBoxCellWidget,SettingTowTextCellWidget,SettingTowLineTextCellWidget,SettingGroupWidget,SettingGroupTextWidget --folder-name setting
如果想只更新 API 文档,那么在上述初始化的命令之后增加参数 --only-api 即可。
默认采用词法分析,如果想采用语法分析的方式生成代码,那么在上述初始化的命令之后增加参数 --use-grammar 即可。
演示代码依赖 Flutter AOP 能力,通过解析 @Demo 注解所在的方法自动生成。因此,组件示例的写法要求将可显示的部分提取成独立方法,并添加 @Demo 注解。示例:
@Override
Widget build(BuildContext context) {
return ExamplePage(
exampleCodeGroup: 'button',
children: [
ExampleModule(
title: '默认',
children: [
ExampleItem(
desc: '可点击',
builder: _buildNormalClickButton
)
]
)
]
);
}
@Demo(group: 'button')
TDButton _buildNormalClickButton(BuildContext context) {
return TDButton(
content: '强按钮',
style: TDButtonStyle.primary(),
onTap: onTap,
onLongPress: onLongPress,
);
}其中,group 参数需与 exampleCodeGroup 参数一致,为直接的字符串赋值,不能是变量引用或者字符串拼接。
提交 PR 后,将会触发流水线自动打包 APK,流水线配置了 AOP 能力。