Orientação gerada a partir de informações públicas. Apenas para referência.
ft_cli é uma ferramenta de linha de comando projetada para simplificar a integração de projetos Flutter e Dart com Arquitetura Limpa. Ela fornece scaffolding automatizado para criar bases de código estruturadas e sustentáveis seguindo os princípios da arquitetura limpa. O CLI simplifica a configuração do projeto gerando componentes em camadas, como entidades, repositórios, casos de uso e camadas de apresentação. Ele suporta desenvolvimento multiplataforma em macOS, Windows e Linux, tornando-se ideal para equipes que buscam impor uma arquitetura consistente em aplicações Flutter.
Casos de uso
Automatizando a configuração do projeto de Arquitetura Limpa
Gerando estruturas de código em camadas
Impor a organização consistente do projeto
Acelerando a inicialização de novos projetos Flutter
Apoiar padrões arquitetônicos em toda a equipe
Principais recursos
Geração automática de código para camadas de arquitetura limpa
Suporte de CLI multiplataforma (macOS, Windows, Linux)
Integração com fluxos de trabalho do Flutter e Dart
Estrutura de projeto scaffolded alinhada com o design orientado por domínio
Interface de linha de comando para desenvolvimento rápido
dart pub global activate --source path ./RepositoryProject
Overview
To make it easier and more intuitive to implement Uncle Bob's Clean Architecture. This CLI provides the base structure, where will dynamically generate the Classes as shown in the examples below.
You can also have the advantage of editing in an easy and dynamic way through the editing of template and triggers to apply replace in some piece of code and create new files from the commands.
Commands:
ft_cli init
Create the configurable variables of your project, generating a basic structure, where will generate a .ft_cli folder.
# Generate Micro Frontend
ft_cli mf
Select the component you want to create and write the name in snakeCase.
# Generate UseCase, Repository and DataSource
ft_cli g usecase lib/app/module/home GetHomeCards -r -d
# Or
ft_cli g u lib/app/module/home GetHomeCards -r -d
Result
# Generate Service
ft_cli g service lib/app/module/home HomeCards
# Or
ft_cli g s lib/app/module/home HomeCards
-------------------------- HELPS --------------------------
i, init Gera os arquivos configuraveis do projeto...
Exemplo: ft_cli init
mf, microfrontend Seleciona a opção para criação de novos componentes de microfrontend...
Exemplo: ft_cli mf
l, layer Gera a estrutura de pastas de um modulo...
Exemplo: ft_cli g l lib/app/modules/nome_modulo
p, page Cria uma nova pagina com um controller...
Exemplo: ft_cli g p lib/app/modules/nome_modulo Nome
c, controller Cria um novo controller...
Exemplo: ft_cli g c lib/app/modules/nome_modulo Nome
d, datasource Cria a camada de busca dados de fontes externas...
Exemplo: ft_cli g d lib/app/modules/nome_modulo Nome
r, repository Cria a camada para tratar os dados...
Exemplo: ft_cli g r lib/app/modules/nome_modulo Nome
u, usecase Cria a camada para tratar as regras de negócio...
Exemplo: ft_cli g u lib/app/modules/nome_modulo Nome
s, service Cria a camada para tratar os serviços...
Exemplo: ft_cli g s lib/app/modules/nome_modulo Nome
e, entity Cria as entidades...
Exemplo: ft_cli g e lib/app/modules/nome_modulo Nome
dto Cria os dto para transferência de dados...
Exemplo: ft_cli g dto lib/app/modules/nome_modulo Nome
Reserved Words
The reserved words can be used in the templet files that are generated in .ft_cli/templete the reserved words must be used inside mustaches {{}} example {{name}}, can also be used in reserved words an extension, example {{name.pascalCase}} whose extension will format the word as needed, you can check the lists below for all reserved words and extensions.
Reserved words can be edited in my_project\.ft_cli\configs.json
Reserved Words
Default
name
Entrada pelo terminal, este valor é o último parâmetro da expressão para gerar os modelos
path
Entrada pelo terminal, caminho onde o novo arquivo será gerado
module
input input by the terminal, name of the module that will generate the new files
projectName
Entrada do nome do projeto quando é criado um componente de microfrontend
projectNameComplete
O nome do projeto concatenado com o padrão do modelo dos microfrontend
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
Methods
The Methods can be used in triggers or templates, and work in sequence, example {{path.replace(str1,str2).replace(str3, str4)}}.
WARNING: If changing routes, use in Windows \\ and in Mac or Linux /.
Method
Exemple
replace
{{path.replace(string1,string2)}}
Extensions
Extension
Exemple
camelCase
testeCase
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
Triggers
In .ft_cli/templete a {{term}}_replace_trigger.json file is generated where from your annotation it can apply a replace to any input expression, for example:
Where will perform a replace on the pointed file, from the expression.
Generate new file
In .ft_cli / templete a file {{term}} _ new_file_trigger.json is generated where, from his annotation, he can create a new file with the pre-defined templete, for example:
Note, the generate variable must be true to generate the file.
class {{module.pascalCase}}Module extends Module {
@override
final List<Bind> binds = [
//Usecases
//Repositories
//Datasources
//Controllers
];
@override
final List<ModularRoute> routes = [
//Pages
];
}
Where will generate a new file from the defined template.
Tests
To add tests, just create a template, example:
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);
});
}
Then add the path of the template in the trigger of creation of the class to be tested, making a replace of the path of this class, forwarding the test file to the tests folder, example: