Flutter插件ft_cli的介绍与安装使用
Flutter插件ft_cli的介绍与安装使用
概述
为了更方便地实现“Bob叔叔的干净架构”,该插件提供了一个基础结构,可以动态生成类。此外,你还可以通过编辑模板文件和触发器来轻松动态地修改代码,并创建新文件。
安装插件ft_cli
首先,你需要安装ft_cli
插件。可以通过以下命令全局激活:
dart pub global activate ft_cli
或者,如果你有一个本地副本,可以通过以下命令激活:
dart pub global activate --source path ./RepositoryProject
命令
初始化项目
运行以下命令来初始化你的项目,生成基本结构:
ft_cli init
这将生成一个.ft_cli
文件夹,其中包含配置变量。
生成微前端组件
ft_cli mf
选择你要创建的组件,并输入组件名称(使用蛇形命名法)。
生成层
ft_cli g layer lib/app/module/home
# 或者
ft_cli g l lib/app/module/home
生成页面
ft_cli g page lib/app/module/home HomeCards
# 或者
ft_cli g p lib/app/module/home HomeCards
生成的页面类如下:
// presentation/ui/pages/home_cards/home_cards_page.dart
import 'package:flutter/material.dart';
import 'home_cards_controller.dart';
class HomeCardsPage extends StatefulWidget {
@override
_HomeCardsPageState createState() => _HomeCardsPageState();
}
class _HomeCardsPageState extends State<HomeCardsPage> {
final GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return Scaffold(
key: scaffoldKey,
appBar: const AppBar(),
body: const Container(),
);
}
}
生成控制器
ft_cli g controller lib/app/module/home HomeCards
# 或者
ft_cli g c lib/app/module/home HomeCards
生成的控制器类如下:
// presentation/ui/pages/home_cards/home_cards_controller.dart
class HomeCardsController {
bool loading = false;
void setLoading(bool value) {
loading = value;
}
}
生成数据源
ft_cli g datasource lib/app/module/home GetHomeCards
# 或者
ft_cli g d lib/app/module/home GetHomeCards
生成的数据源类如下:
// data/datasources/get_home_cards_datasource.dart
abstract class GetHomeCardsDatasource {
Future<void> call();
}
// external/datasources/get_home_cards_imp_datasource.dart
import '../../data/datasources/get_home_cards_datasource.dart';
class GetHomeCardsImpDatasource implements GetHomeCardsDatasource {
@override
Future<void> call() {
// TODO: implement call
throw UnimplementedError();
}
}
生成仓库
ft_cli g repository lib/app/module/home GetHomeCards
# 或者
ft_cli g repository lib/app/module/home GetHomeCards
生成的仓库类如下:
// domain/repositories/get_home_cards_repository.dart
abstract class GetHomeCardsRepository {
Future<void> call();
}
// data/repositories/get_home_cards_imp_repository.dart
import '../../repositories/get_home_cards_repository.dart';
class GetHomeCardsImpRepository implements GetHomeCardsRepository {
@override
Future<void> call() {
// TODO: implement call
throw UnimplementedError();
}
}
生成用例
ft_cli g usecase lib/app/module/home GetHomeCards
# 或者
ft_cli g u lib/app/module/home GetHomeCards
生成的用例类如下:
// domain/usecases/get_home_cards_usecase.dart
abstract class GetHomeCardsUsecase {
Future<void> call();
}
// domain/usecases/get_home_cards_imp_usecase.dart
import 'get_home_cards_usecase.dart';
class GetHomeCardsImpUsecase implements GetHomeCardsUsecase {
@override
Future<void> call() {
// TODO: implement call
throw UnimplementedError();
}
}
生成服务
ft_cli g service lib/app/module/home HomeCards
# 或者
ft_cli g s lib/app/module/home HomeCards
生成的服务类如下:
// domain/services/home_cards_service.dart
abstract class HomeCardsService {
Future<void> call();
}
// domain/services/home_cards_imp_service.dart
import 'home_cards_service.dart';
class HomeCardsImpService implements HomeCardsService {
@override
Future<void> call() {
// TODO: implement call
throw UnimplementedError();
}
}
生成实体
ft_cli g entity lib/app/module/home Home
# 或者
ft_cli g e lib/app/module/home Home
生成的实体类如下:
// domain/models/entities/home_entity.dart
class HomeEntity {
HomeEntity();
}
生成 DTO
ft_cli g dto lib/app/module/home Home
生成的 DTO 类如下:
// domain/models/dtos/home_dto.dart
import '../../models/entities/home_entity.dart';
class HomeDto extends HomeEntity {
HomeDto() : super();
}
帮助信息
-------------------------- HELPS --------------------------
i, init 生成项目的可配置文件...
示例: ft_cli init
mf, microfrontend 选择创建新的微前端组件...
示例: ft_cli mf
l, layer 生成模块的文件夹结构...
示例: ft_cli g l lib/app/modules/nome_modulo
p, page 创建带控制器的新页面...
示例: ft_cli g p lib/app/modules/nome_modulo Nome
c, controller 创建新的控制器...
示例: ft_cli g c lib/app/modules/nome_modulo Nome
d, datasource 创建外部数据源的查找层...
示例: ft_cli g d lib/app/modules/nome_modulo Nome
r, repository 创建处理数据的层...
示例: ft_cli g r lib/app/modules/nome_modulo Nome
u, usecase 创建处理业务规则的层...
示例: ft_cli g u lib/app/modules/nome_modulo Nome
s, service 创建处理服务的层...
示例: ft_cli g s lib/app/modules/nome_modulo Nome
e, entity 创建实体...
示例: ft_cli g e lib/app/modules/nome_modulo Nome
dto 创建用于数据传输的 DTO...
示例: ft_cli g dto lib/app/modules/nome_modulo Nome
预留词
预留词可以在生成的模板文件中使用,这些文件位于.ft_cli/templete
目录下。预留词必须在花括号内使用,例如{{name}}
。预留词也可以使用扩展名,例如{{name.pascalCase}}
,它会根据需要格式化单词。你可以查看下面的列表以获取所有预留词及其扩展名。
预留词 | 默认值 |
---|---|
name | 终端输入的值,这是生成模型表达式的最后一个参数 |
path | 终端输入的路径,新文件生成的位置 |
module | 终端输入的模块名,将生成新文件的模块名 |
projectName | 创建微前端组件时的项目名输入 |
projectNameComplete | 项目名与微前端模板模式连接后的名称 |
repositoryPathInterface | domain/repositories |
repositoryNameFileInterface | {{name.snakeCase}}_repository |
repositoryPath | data/repositories |
repositoryNameFile | {{name.snakeCase}}_imp_repository |
repositoryNameClassInterface | {{name.pascalCase}}Repository |
repositoryNameClass | {{name.pascalCase}}ImpRepository |
datasourcePathInterface | data/datasources |
datasourceNameFileInterface | {{name.snakeCase}}_datasource |
datasourcePath | external/datasources |
datasourceNameFile | {{name.snakeCase}}_imp_datasource |
datasourceNameClassInterface | {{name.pascalCase}}Datasource |
datasourceNameClass | {{name.pascalCase}}ImpDatasource |
usecasePathInterface | domain/usecases |
usecaseNameFileInterface | {{name.snakeCase}}_usecase |
usecasePath | domain/usecases |
usecaseNameFile | {{name.snakeCase}}_imp_usecase |
usecaseNameClassInterface | {{name.pascalCase}}Usecase |
usecaseNameClass | {{name.pascalCase}}ImpUsecase |
pagePath | presentation/ui/pages/{{name.snakeCase}} |
pageNameFile | {{name.snakeCase}}_page |
pageNameClass | {{name.pascalCase}}Page |
controllerPath | presentation/ui/pages/{{name.snakeCase}} |
controllerNameFile | {{name.snakeCase}}_controller |
controllerNameClass | {{name.pascalCase}}Controller |
方法
方法可以在触发器或模板中使用,并按顺序工作。例如{{path.replace(str1,str2).replace(str3, str4)}}
。
扩展名
扩展名 | 示例 |
---|---|
camelCase | testCase |
constantCase | TESTE_CASE |
sentenceCase | Teste case |
snakeCase | teste_case |
dotCase | teste.case |
paramCase | teste-case |
pathCase | teste/case |
pascalCase | TesteCase |
headerCase | Teste-Case |
titleCase | Teste Case |
触发器
在.ft_cli/templete
目录下,生成了{{term}}_replace_trigger.json
文件,可以从注释中应用替换到任何输入表达式。例如:
[
{
"pathFile": "{{path}}\\{{module}}_module.dart",
"from": "//imports",
"to": "//imports\nimport '{{controllerPath}}/{{controllerNameFile}}.dart';"
},
{
"pathFile": "{{path}}\\{{module}}_module.dart",
"from": "//Dependence",
"to": "//Dependence\nfinal {{controllerNameClass.camelCase}} = {{controllerNameClass.pascalCase}};"
}
]
模板
.ft_cli/template/layer/complete_new_file_exemple.template
文件内容如下:
class {{module.pascalCase}}Module extends Module {
@override
final List<Bind> binds = [
//Usecases
//Repositories
//Datasources
//Controllers
];
@override
final List<ModularRoute> routes = [
//Pages
];
}
测试
要添加测试,只需创建一个模板,例如:
import 'package:flutter_test/flutter_test.dart';
import 'package:{{path.replace(\,/).replace(lib/,)}}/{{name.snakeCase}}';
void main() {
test('adds one to input values', () {
final calculator = Calculator();
expect(calculator.addOne(2), 3);
expect(calculator.addOne(-7), -6);
expect(calculator.addOne(0), 1);
});
}
然后在类创建的触发器中添加模板路径,进行替换,将测试文件转发到测试文件夹中,例如:
[
{
"pathFile": "{{path.replace(lib/app,test)}}/{{name.snakeCase}}_test",
"pathTemplete": ".ft_cli/template/example_test.template",
"extension": "dart",
"replaceOldFileWithNew": false,
"generate": true
}
]
更多关于Flutter插件ft_cli的介绍与安装使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter插件ft_cli的介绍与安装使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
ft_cli
是一个用于 Flutter 项目的命令行工具,旨在简化开发流程,自动生成代码和文件结构。它可以帮助开发者快速生成常见的 Flutter 代码模板,如页面、组件、服务等,从而提高开发效率。
安装 ft_cli
首先,你需要确保已经安装了 Flutter 和 Dart SDK。然后,可以通过以下步骤安装 ft_cli
:
-
全局安装
ft_cli
: 使用 Dart 的pub
工具全局安装ft_cli
:dart pub global activate ft_cli
-
验证安装: 安装完成后,可以通过以下命令验证是否安装成功:
ft_cli --version
如果显示出版本号,说明安装成功。
使用 ft_cli
ft_cli
提供了多个命令来生成不同的代码模板。以下是一些常用的命令:
1. 生成页面(Page)
生成一个 Flutter 页面,包括页面类、路由和相关的文件。
ft_cli generate page HomePage
这将在 lib/pages
目录下生成 home_page.dart
文件,并自动配置路由。
2. 生成组件(Component)
生成一个可复用的 Flutter 组件。
ft_cli generate component CustomButton
这将在 lib/components
目录下生成 custom_button.dart
文件。
3. 生成服务(Service)
生成一个服务类,通常用于处理业务逻辑或与后端 API 交互。
ft_cli generate service ApiService
这将在 lib/services
目录下生成 api_service.dart
文件。
4. 生成模型(Model)
生成一个数据模型类。
ft_cli generate model User
这将在 lib/models
目录下生成 user.dart
文件。
5. 生成路由配置(Route)
生成路由配置文件,通常用于集中管理应用的路由。
ft_cli generate route AppRouter
这将在 lib/routes
目录下生成 app_router.dart
文件。
6. 生成全局状态管理(State Management)
生成全局状态管理相关的代码,如 Provider
或 Bloc
的状态管理。
ft_cli generate state AppState
这将在 lib/state
目录下生成 app_state.dart
文件。
自定义配置
ft_cli
允许你通过配置文件自定义生成代码的路径和模板。你可以在项目根目录下创建 .ft_cli.yaml
文件,配置生成文件的路径和模板。
例如:
paths:
pages: lib/views
components: lib/widgets
services: lib/services
models: lib/data/models
routes: lib/navigation
state: lib/state