【Flutter】ビルド変数の設定

1 min read読了の目安(約1600字

zenn、最近流行ってるようなので投稿してみました。

はじめに

Flutterについて、GMOペパボ様のブログで公開されているFlutterハンズオン資料(https://tech.pepabo.com/2020/05/27/flutter-hands-on/)で勉強していたところ、文中で少しだけ触れられていた「APIのトークンをビルド変数に設定する」というのがわからなかったので調べてみました。

なんでそれがやりたいの?

このハンズオンにおいて、APIのトークンを成果物から読み取れないようにしたかったからです。
他の使い方としては、DB接続用のid、パスワード、およびローカル、本番環境の切り替えなどでしょうか。

前提

OS :MacOS
IDE:AndroidStudio
Flutterバージョン:1.20.4

結論

flutterの実行時にオプション--dart-define=NAME=valueで値を指定して、String.fromEnviroment()で読み込めばOK!
FlutterのString.fromEnviromentのドキュメントはこちら

[sample.dart]

// ビルド変数を読み込めなかった場合は、defaultValueが適用される
const token = String.fromEnviroment("ACCESS_TOKEN", defaultValue="hoge")
// 注意:constでないとビルド変数を読み込まない(コンパイル時定数)
$ flutter run --dart-define=ACCESS_TOKEN=dummy_token

もうちょっと手軽にできないの?【AndroidStudio】

毎回コマンドラインで値を手打ちするのはめんどくさいので、Run/Debugのボタンで実行した際も値を指定するようにしちゃいましょう。

メニューバー [Run]>[Edit Configurations...]を選択し、[Additional Arguments]に引数を指定してやれば、Run/Debugのボタンからビルドした際もビルド変数が渡されます。
Configurations

(正直AndroidStudioあんまり使いこなせてないので、もっといいやり方があれば教えてください)

参考文献

社内でFlutterのハンズオンを行ったので、資料を公開します - ペパボテックブログ
Flutter実行時にコマンドラインオプションで変数を渡してアプリの挙動を切り替える|itog|note
Dart: String.fromEnvironment()の値が取得できない - Qiita
Dartの変数定義時の修飾static/final/const、そしてconst constructorについて - Qiita