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

1 回复

更多关于Flutter插件ft_cli的介绍与安装使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


ft_cli 是一个用于 Flutter 项目的命令行工具,旨在简化开发流程,自动生成代码和文件结构。它可以帮助开发者快速生成常见的 Flutter 代码模板,如页面、组件、服务等,从而提高开发效率。

安装 ft_cli

首先,你需要确保已经安装了 Flutter 和 Dart SDK。然后,可以通过以下步骤安装 ft_cli

  1. 全局安装 ft_cli: 使用 Dart 的 pub 工具全局安装 ft_cli

    dart pub global activate ft_cli
    
  2. 验证安装: 安装完成后,可以通过以下命令验证是否安装成功:

    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)

生成全局状态管理相关的代码,如 ProviderBloc 的状态管理。

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
回到顶部