前回、前々回の続き。BrickHub/masonでいろいろ試したときの備忘録(*´ω`*)
前回まででとりあえずの作り方がわかったけど、
最終確認がないので、promptをカスタマイズできないか試してみた。
hooksが用意されていて、それを使うと
- 動的な質問(prompt)や
- 入力された値のvalidation
などができそうな感じ(*´ω`*)
hooksディレクトリは--hooks
をつけると作ってくれる。
$ mason new example --hooks
最終確認の質問を追加する
値の入力後&実行前のhookはpre_gen.dart
に記述する。
// hooks/pre_gen.dart import 'dart:io'; import 'package:mason/mason.dart'; Future<void> run(HookContext context) async { // 入力された値を表示 context.logger.info(''); context.logger.info('*****************************'); context.vars.forEach((key, value) { context.logger.info('${key} = ${value}'); }); context.logger.info('*****************************'); context.logger.info(''); // 最終確認のpromptを作成 final confirm = context.logger.prompt("Confirm: y/n", defaultValue: "n"); // 入力された値のチェック if (confirm.toLowerCase() != "y") { // キャンセル処理 context.logger.err('Canceled'); exit(ExitCode.usage.code); } // 実行前のメッセージ表示 final name = context.vars['app_name']; context.logger.info('Creating $name!'); }
context.logger.prompt()
でprompを作れるよう。
mason-cli
のコードだとこのあたりっぽい。
ためしてみる
実行はconfig.json
で。与えるパラメタはこんな感じ。
{ "app_title": "My First App", "app_name": "first_app", "app_id": "com.memorylovers.first_app", "org_domain": "com.memorylovers", "app_desc": "This is My First App" }
コードを生成する場合
$ mason make flutter_new_project -c config.json ***************************** app_title = My First App app_name = first_app app_id = com.memorylovers.first_app org_domain = com.memorylovers app_desc = This is My First App ***************************** Confirm: y/n (n) y Creating first_app! ✓ Generated 202 files. (0.2s) // .... Created first_app!
こんな感じで、パラメタの表示と、確認の質問を追加できた(*´ω`*)
キャンセルする場合
$ mason make flutter_new_project -c config.json ✓ Compiled pre_gen.dart (0.9s) ***************************** app_title = My First App app_name = first_app app_id = com.memorylovers.first_app org_domain = com.memorylovers app_desc = This is My First App ***************************** Confirm: y/n (n) n Canceled
キャンセルもちゃんと動いてる(*´ω`*)
以上!! これでかなり柔軟にできるように。。
簡単なチェックのみだけど、値のチェックや加工などもできそう(*´ω`*)