taketiyo.log

Web Engineering 🛠 & Body Building 💪

【Flutter】環境毎に異なる変数を設定する【Dart】

Programming

  / /

通常アプリを開発する際、例えば呼び出されるAPIには、テスト環境用と本番環境用のエンドポイントがあります。
この記事では、テスト環境と本番環境で異なる値を参照するためのシンプルなアプローチを紹介します。
 

目次

 

最終的なゴール

下記の通り、環境毎に異なる設定値が定義されたコレクションを準備し、アプリケーションからそのコレクションを参照させます。

const environment = {
  'isProd': true,
  'apiBaseUri': 'https://production.exampel.com',
};

 

実装

bool.fromEnvironment('dart.vm.product')にて現在の実行環境がdevelopmentなのか、releaseなのか判定する事が出来ます。
flutter build <target>コマンドにてリリース用ビルドを生成した際や、flutter run --releaseコマンドにてアプリケーションを実行した際にreleaseモードであると判定されます。

よって下記のように実装することが可能です。

const bool isProduction = bool.fromEnvironment('dart.vm.product');

const VariablesDev = {
  'isProd': false,
  'apiBaseUri': 'http://development.exampel.com',
};

const VariablesProd = {
  'isProd': true,
  'apiBaseUri': 'https://production.exampel.com',
};

final environment = isProduction ? VariablesProd : VariablesDev;

 
例えばHTTP通信の土台を担うRepositoryクラスから参照する場合は下記の通りです。

class Repository
{
  final String _apiBaseUri = environment['apiBaseUri'];

  Future<http.Response> post(String path, Map<String, dynamic> data) async
  {
    final String body = json.encode(data);

    final http.Response response = await http.post('$_apiBaseUri$path', body: body);

    return response;
  }
}

 
環境毎にenvironmentの内容が動的に変化するため、コードベースを非常にシンプルに保つことが可能になります。