😇
【dart-define】.fromEnvironment() で取得できないパターン
結論
=> constが必須。(final等はNG)
例)
- my.envに、hogeを定義
// my.env
hoge="HOGE!"
OK,NGパターン
// OK
const constHoge = String.fromEnvironment('hoge');
print(constHoge); // => "HOGE!"
// NG
final finalHoge = String.fromEnvironment('hoge');
print(finalHoge); // => ""
OK,NGパターン(Widgetで利用)
特に、Widgetからめて利用する際に、const定義せず利用して、取得できず、少しハマった。
// OK
const Text(String.fromEnvironment('hoge'); => "HOGE!"
// NG
Text(String.fromEnvironment('hoge'); => ""
AI回答
const と final の違いが、この動作の原因です。以下にその理由を詳しく説明します。
1. const の場合:
const キーワードを使うと、コンパイル時に定数として評価されます。Dart の String.fromEnvironment メソッドは、コンパイル時に環境変数を取得するため、const を使うことで環境変数の値が正しく取得されます。
dart
コードをコピーする
const constHoge = String.fromEnvironment('hoge');
この場合、constHoge 変数はコンパイル時に hoge 環境変数の値を取得します。
2. final の場合:
final は、実行時に初期化される変数です。しかし、String.fromEnvironment は Dart の コンパイル時の定数(環境変数)しか取得できません。final は実行時に評価されるため、この時点では環境変数は評価されず、結果として空文字列になります。
dart
コードをコピーする
final finalHoge = String.fromEnvironment('hoge');
この場合、finalHoge はコンパイル時の定数として評価されないため、デフォルトで空文字列が返されます。
まとめ:
const を使用すると、コンパイル時に String.fromEnvironment から環境変数の値を取得できます。
final は実行時に初期化されるため、String.fromEnvironment では正しい値が取得できません。
Discussion