Công cụ CLI nội bộ hỗ trợ phát triển Flutter: khởi tạo dự án chuẩn, sinh code type-safe cho assets, và setup branding đa môi trường.
Vì đây là công cụ nội bộ, cài đặt trực tiếp từ source:
# Clone repo
git clone <repo-url> finvoras_gen
cd finvoras_gen
# Cài đặt global
dart pub global deactivate finvoras_gen
dart pub global activate --source path .
finvoras_gen refreshĐảm bảo ~/.pub-cache/bin có trong PATH của bạn.
Tự động hoá toàn bộ setup ban đầu cho một Flutter project chuẩn Finvoras.
finvoras_gen init <app-id>
# Ví dụ
finvoras_gen init vn.com.finvoras.myapp
# Khởi tạo với tên ứng dụng tùy chỉnh (sẽ ghi vào pubspec.yaml cho branding)
finvoras_gen init vn.com.finvoras.myapp --app-name "My Super App"Options:
| Flag | Viết tắt | Mặc định | Mô tả |
|---|---|---|---|
--app-name |
-n |
Auto-format |
Tên hiển thị của ứng dụng trên iOS/Android |
Các bước tự động thực hiện:
- Chạy
flutter createvới--orgvà--project-nametừ<app-id>. - Clone submodule nội bộ
packagestừ GitHub. - Link các local packages vào
pubspec.yaml(workspace + dependencies). - Ghi cấu hình
finvoras_genvàopubspec.yaml(output, assets, locales...). - Thêm bộ package chuẩn:
injectable,get_it,equatable,build_runner,flutter_localizations,flutter_easyloading,get,firebase_core,... - Tạo
melos.yamlvà đồng bộmelos.scripts(get,analyze,build_assets) vào cảpubspec.yaml(hỗ trợ Dart Pub Workspaces). - Tạo thư mục
assets/images/vàassets/locales/. - Cập nhật
ios/Podfilelên platform15.0cùng post_install hook đồng bộ deployment target cho toàn bộ CocoaPods. - Chạy
flutter pub get. - Tự động chạy
pod install --repo-updatetrong thư mụciosđể cập nhật CocoaPods.
Lưu ý: Nếu thư mục
packages/đã tồn tại, lệnh sẽ hỏi xác nhận trước khi tiếp tục.
Tự động cấu hình flutter_flavorizr, native splash screen và launcher icons cho tất cả môi trường.
# Mặc định: dev, qa, prod — behavior mode (chung Application ID)
finvoras_gen branding
# Tùy chỉnh environments
finvoras_gen branding --envs dev,staging,prod
# Platform mode: mỗi flavor có Application ID riêng (thêm suffix .<env>)
finvoras_gen branding --type platform --envs dev,stg,prod
# Chỉ định đường dẫn logo
finvoras_gen branding --logo assets/images/my_logo.png
# Tùy chỉnh tên hiển thị của ứng dụng (nếu không, sẽ tự động format từ pubspec.yaml)
finvoras_gen branding --app-name "Siêu Ứng Dụng"
# CI mode: bỏ qua tất cả confirmation prompts
finvoras_gen branding --yesOptions:
| Flag | Viết tắt | Mặc định | Mô tả |
|---|---|---|---|
--type |
-t |
behavior |
behavior (chung 1 App ID) hoặc platform (mỗi flavor 1 App ID) |
--envs |
-e |
dev,qa,prod |
Danh sách môi trường, phân cách bằng dấu phẩy |
--logo |
assets/images/logo.png |
Đường dẫn đến file ảnh logo | |
--app-name |
-n |
Auto-format |
Tên hiển thị của ứng dụng trên iOS/Android |
--yes |
-y |
false |
Bỏ qua confirmation (dùng cho CI) |
--dry-run |
false |
Xem trước thay đổi mà không ghi file |
Các bước tự động thực hiện:
- Đọc
app_idtừfinvoras_gen.app_idtrongpubspec.yaml. - Ghi cấu hình
flavorizrvàopubspec.yaml. - Tạo
flutter_native_splash-<env>.yamlvàflutter_launcher_icons-<env>.yamlcho từng môi trường. - Thêm dev dependencies:
flutter_flavorizr,flutter_native_splash,flutter_launcher_icons. - Chạy
flutter_flavorizr, sinh splash và icons cho từng môi trường.
Lưu ý: Khi sử dụng flavors, bạn cần build app với flag
--flavor <name>(ví dụ:flutter build appbundle --flavor prod). Lệnhfastlanecủa công cụ này đã được cấu hình để tự động xử lý việc này.
Lệnh prepare đóng vai trò là "one-shot bootstrap" để thiết lập ứng dụng monorepo một cách hoàn chỉnh.
# Chạy chuẩn bị cho toàn bộ workspace với FVM
finvoras_gen prepare --runtime fvm --workspace all --yes
# Chỉ định runtime flutter mặc định
finvoras_gen prepare --runtime flutterOptions:
| Flag | Viết tắt | Mặc định | Mô tả |
|---|---|---|---|
--runtime |
-r |
Bắt buộc: flutter hoặc fvm |
|
--workspace |
-w |
all |
all, root, hoặc danh sách: packages/a,packages/b |
--yes |
-y |
false |
Chạy non-interactive |
Pipeline của prepare:
- Đọc cấu hình từ
ProjectSpec(nhận dạng monorepo, app name,...). - Sử dụng Mustache template engine để render các file critical:
lib/main.dart,lib/app.dart(bọcAppOrchestrator, an toàn Firebase & placeholder route),lib/core/configs/di.dart,lib/core/configs/prepare_environment.dart(bootstrap pipeline tuần tự và song song an toàn cho runtime services). - Chuẩn hoá cấu hình monorepo trong
pubspec.yaml(workspace, local package paths,finvoras_gen,melos.scripts). - Root dependency sync (
pub get). - Package dependency sync cho workspace đã chọn.
- Codegen package (
build_runner,finvoras_gen assetsnếu package có cấu hình). - Codegen root.
- Verify + in summary
done/failed/skippedtheo từng step.
Sinh các class Dart type-safe từ cấu hình finvoras_gen trong pubspec.yaml.
# Sử dụng pubspec.yaml mặc định
finvoras_gen assets
# Hoặc chạy shorthand trực tiếp từ root CLI
finvoras_gen
# Chỉ định file pubspec tùy chỉnh
finvoras_gen assets --config path/to/pubspec.yaml
# Hoặc shorthand tại root
finvoras_gen -c path/to/pubspec.yaml
# Kết hợp với build.yaml
finvoras_gen assets --config pubspec.yaml --build build.yamlOptions:
| Flag | Viết tắt | Mặc định | Mô tả |
|---|---|---|---|
--config |
-c |
pubspec.yaml |
Đường dẫn đến file pubspec.yaml |
--build |
-b |
Đường dẫn đến file build.yaml |
Cấu hình Fastlane để tự động hóa việc deploy cho cả Android và iOS lên Google Play Store, TestFlight và Firebase App Distribution.
finvoras_gen fastlaneCác bước tự động thực hiện:
- Kiểm tra sự tồn tại của thư mục
android/vàios/. - Tự động sinh cấu hình: Tự động tạo
Appfile(sử dụngapp_idtừ dự án) vàGemfilemà không cần nhập liệu thủ công. - Tạo file
Fastfilevới các lane chuẩn cho cả 2 nền tảng:increment_version: Tự động tăng build number trongpubspec.yaml(đồng bộ cho cả Android/iOS).deploy: Build và Upload lên Play Store (internal) hoặc TestFlight.production: Build và Upload lên Play Store (production) hoặc App Store.beta: Build và Upload lên Firebase App Distribution.
- Tùy chọn nâng cao: Sau khi setup cơ bản, bạn có thể chọn chạy
fastlane initđể thiết lập nâng cao (metadata, screenshots).
Đặc điểm nổi bật:
- Auto Flow: Tự động lấy
app_idtừpubspec.yamlđể cấu hìnhAppfile. - Đa nền tảng: Hỗ trợ đầy đủ cho cả Android và iOS trong cùng một lệnh.
- Hỗ trợ Flavor: Tự động nhận diện nếu dự án có sử dụng flavors. Mặc định sẽ build flavor
prod. - Release Notes: Tự động tạo file changelog cho Android từ input của người dùng.
Hữu ích sau khi đổi branch hoặc gặp lỗi cache.
finvoras_gen refreshTự động chạy flutter clean rồi flutter pub get.
finvoras_gen version
# hoặc
finvoras_gen -v
finvoras_gen --versionSau khi chạy init, cấu hình sau sẽ được tự động thêm vào pubspec.yaml của dự án đích:
finvoras_gen:
app_id: vn.com.finvoras.myapp # Application ID — dùng bởi branding command
output: lib/generated/ # Thư mục xuất file sinh code
line_length: 80
assets:
enabled: true
outputs:
class_name: AppAssets
locales:
enabled: true
folder: assets/locales
outputs:
translation_name: AppTranslation
keys_name: AppLocalesKeys
integrations:
flutter_svg: true
lottie: trueLệnh init sẽ clone repository packages nội bộ vào thư mục packages/:
https://github.com/hoangsang17th/packages
# Tạo thư mục test, chạy init trong đó
mkdir /tmp/test_app && cd /tmp/test_app
finvoras_gen init vn.io.enth17.chopchop
# Setup branding sau khi init
finvoras_gen branding