問題
dart2.6のdart2nativeで遊ぼうとしたらString.fromEnvironment()でハマりまくったのでメモがてら記事にしました。
dart2nativeコマンドで-Dフラグをつけて定数を埋め込んでワンバイナリにできるようなので試しに下記のコードで確認しようとしたところ・・・。
void main() {
print(String.fromEnvironment('hoge'));
}
$ dart2native -Dhoge=fuga main.dart -o main
$ ./main
null
nullしかでない!!
どこが悪いのか一向に変わらず2時間ほど格闘していました。。。
結論
constつけよう
void main() {
print(const String.fromEnvironment('hoge'));
}
String.fromEnvironment()をconstで宣言しなければいけなかったというしょーもないオチです。
そもそもfromEnvironmentって環境変数を取れそうみを出しつつそうじゃない部分が気に食わないのですが。
ちなみに環境変数はdart:ioのPlatform.environment['環境変数名']なので覚えておきましょう。
最後に
dart2nativeとString.fromEnvironment()でワンバイナリ+埋め込まれた定数を扱えるようになったのでそろそろサーバサイドDartに本気を出すのもいいのではないかと思う今日この頃です。
手始めにgoで書いてたcliツールとかdartで書き直してみようかと思います。
これを機にflutter以外のdartにも目を向けてもっとdartにのめり込みましょう ![]()