GetX™框架的官方CLI,可轻松构建Flutter和服务器应用程序
// 安装:
pub global activate get_cli
// 使用本命令需要设置系统环境变量: [FlutterSDK安装目录]\bin\cache\dart-sdk\bin
flutter pub global activate get_cli
// 在当前目录创建一个 Flutter 项目:
// 注: 默认使用文件夹名称作为项目名称
// 你可以使用 `get create project:my_project` 给项目命名
// 如果项目名称有空格则使用 `get create project:"my cool project"`
get create project
// 在现有项目中生成所选结构:
get init
// 创建页面:
// (页面包括 controller, view, 和 binding)
// 注: 你可以随便命名, 例如: `get create page:login`
get create page:home
// 在指定文件夹创建新 controller:
// 注: 你无需引用文件夹, Getx 会自动搜索 home 目录,
// 并把你的controller放在那儿
get create controller:dialogcontroller on home
// 在指定文件夹创建新 view:
// 注: 你无需引用文件夹,Getx 会自动搜索 home 目录,
// 并把你的 view 放在那儿
get create view:dialogview on home
// 在指定文件夹创建新 provider:
get create provider:user on home
// 生成国际化文件:
// 注: 你在 'assets/locales' 目录下的翻译文件应该是json格式的
get generate locales assets/locales
// 生成 model 类:
// 注: 'assets/models/' 目录下的模板文件应该是json格式的
// 注: on == 输出文件夹
// Getx 会自动搜索 home 目录,
// 并把你的 model 放在那儿
get generate model on home with assets/models/user.json
//生成无 provider 的 model
get generate model on home with assets/models/user.json --skipProvider
//注: URL 必须返回json
get generate model on home from "https://api.github.com/users/CpdnCristiano"
// 为你的项目安装依赖:
get install camera
// 为你的项目安装多个依赖:
get install http path camera
// 为你的项目安装依赖(指定版本号):
get install path:1.6.4
// 你可以为多个依赖指定版本号
// 为你的项目安装一个dev依赖(dependencies_dev):
get install flutter_launcher_icons --dev
// 为你的项目移除一个依赖:
get remove http
// 为你的项目移除多个依赖:
get remove http path
// 更新 CLI:
get update
// 或 `get upgrade`
// 显示当前 CLI 版本:
get -v
// 或 `get -version`
// 帮助
get help
探索 CLI
让我们看看 CLI 都有啥命令吧
新建项目
get create project
用来新建一个项目, 你可以在 Flutter 和 get_server里选一个, 创建默认目录之后, 它会运行一个 get init
初始化
get init
这条命令要慎用,它会覆盖 lib 文件夹下所有内容。 它允许你在两种结构中二选一, getx_pattern 和 clean.
创建 Page
get create page:name
这条命令允许你创建模块,建议选择getx_pattern的人使用。
创建 view, controller 和 binding 文件, 除了自动添加路由。
你可以在一个模块内创建另一个模块。
get create page:name on other_module
当你创建一个项目,并且用 on
创建一个页面, CLI 会使用children pages.
创建 Screen
get create screen:name
和 create page
类似, 但更适合使用 Clean 的人。
创建 controller
get create controller:dialog on your_folder
在指定目录创建 controller
带选项使用 你可以创建一个模板文件, 用你喜欢的方式
运行
get create controller:auth with examples/authcontroller.dart on your_folder
或者使用 URL 运行
get create controller:auth with 'https://raw.githubusercontent.com/jonataslaw/get_cli/master/samples_file/controller.dart.example' on your_folder
输入:
@import
class @controller extends GetxController {
final email = ''.obs;
final password = ''.obs;
void login() {
}
}
输出:
import 'package:get/get.dart';
class AuthController extends GetxController {
final email = ''.obs;
final password = ''.obs;
void login() {}
}
创建 view
get create view:dialog on your_folder
在指定目录创建 view
生成国家化文件
在 assets/locales 目录创建 json 格式的语言文件
输入:
zh_CN.json
{
"buttons": {
"login": "登录",
"sign_in": "注册",
"logout": "注销",
"sign_in_fb": "用 Facebook 登录",
"sign_in_google": "用 Google 登录",
"sign_in_apple": "用 Apple 登录"
}
}
en_US.json
{
"buttons": {
"login": "Login",
"sign_in": "Sign-in",
"logout": "Logout",
"sign_in_fb": "Sign-in with Facebook",
"sign_in_google": "Sign-in with Google",
"sign_in_apple": "Sign-in with Apple"
}
}
运行 :
get generate locales assets/locales
输出:
abstract class AppTranslation {
static Map<String, Map<String, String>> translations = {
'en_US' : Locales.en_US,
'zh_CN' : Locales.zh_CN,
};
}
abstract class LocaleKeys {
static const buttons_login = 'buttons_login';
static const buttons_sign_in = 'buttons_sign_in';
static const buttons_logout = 'buttons_logout';
static const buttons_sign_in_fb = 'buttons_sign_in_fb';
static const buttons_sign_in_google = 'buttons_sign_in_google';
static const buttons_sign_in_apple = 'buttons_sign_in_apple';
}
abstract class Locales {
static const en_US = {
'buttons_login': 'Login',
'buttons_sign_in': 'Sign-in',
'buttons_logout': 'Logout',
'buttons_sign_in_fb': 'Sign-in with Facebook',
'buttons_sign_in_google': 'Sign-in with Google',
'buttons_sign_in_apple': 'Sign-in with Apple',
};
static const zh_CN = {
'buttons_login': 'Entrar',
'buttons_sign_in': 'Cadastrar-se',
'buttons_logout': 'Sair',
'buttons_sign_in_fb': '用 Facebook 登录',
'buttons_sign_in_google': '用 Google 登录',
'buttons_sign_in_apple': '用 Apple 登录',
};
}
现在只需要在 GetMaterialApp 中加入
GetMaterialApp(
...
translationsKeys: AppTranslation.translations,
...
)
例:生成 model
创建json model 文件assets/models/user.json
输入:
{
"name": "",
"age": 0,
"friends": ["", ""]
}
运行:
get generate model on home with assets/models/user.json
输出:
class User {
String name;
int age;
List<String> friends;
User({this.name, this.age, this.friends});
User.fromJson(Map<String, dynamic> json) {
name = json['name'];
age = json['age'];
friends = json['friends'].cast<String>();
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['name'] = this.name;
data['age'] = this.age;
data['friends'] = this.friends;
return data;
}
}
拆分不同类型文件
有一天有个用户问我,是否可能修改一下最终文件名,他发现 my_controller_name.controller.dart
比 CLI 生成的默认文件 my_controller_name_controller. dart
更具有可读性,考虑到像他这样的用户,我加了个选项,可以让你选择你自己的分隔符,只需要在你的 pubsepc.yaml 里这样写
例子:
get_cli:
separator: "."
你的 import 乱不乱?
为了帮你管理你的 import 我加了个新命令: get sort
, 除了帮你排序整理 import, 这条命令还帮你格式化 dart 文件。感谢 dart_style. get sort
会用 separator 重命名所有文件。 如果不想重命名文件,使用 --skipRename
。
如果你喜欢用相对路径写 import, 使用 --relative
选项. get_cli 会自动转换。
cli 国际化
CLI 现在有一套国际化系统。
如果你想把 CLI 翻译成你的语言:
- 在 tranlations 目录创建一个你语言对应的json文件
- 从 file 复制所有key, 然后翻译成你的语言
- 发送你的 PR.
TODO:
- 自定义 model 支持
- 单元测试
- 优化生成结构
- 增加备份系统