LoginSignup
1
0

More than 1 year has passed since last update.

プロジェクト毎にflutter configを設定する

Last updated at Posted at 2021-08-12

前提

  • 2.0.0 より前のversion
    • flutter config を実施すると ~/.flutter_settings に設定ファイルが作成さる
  • 2.0.0 以降のversion
    • flutter config を実施すると ~/.config/flutter/settings に設定ファイルが作成さる

:warning: プロジェクト毎にflutter confignを設定する場合、2.0.0 以降のversion である必要があります。

概要

あるプロジェクトだけしか使わない設定でも、flutter config すると全般に効いてくるので、
特定のプロジェクトだけの flutter config にしたい。

※ もしかしたら需要無いかもですが、気になって調べた際のメモになります。なんかの参考になれば。。

方法

方法としては 2.0.0 以降のversion で設定ファイルが作られる場所を見たら想像付くかと思いますが、
XDG Base Directory仕様になっているので、環境変数 XDG_CONFIG_HOME を設定しておけば、
$XDG_CONFIG_HOME/settings に設定ファイルが作成されるようになります。

運用例

例えば fvmを使っていて、複数プロジェクトそれぞれ別のflutter versionで開発していた場合に、
特定のプロジェクトだけ --build-dir を設定しているが、他のプロジェクトではデフォルトがいい場合、
direnvを使って、特定のプロジェクト直下に、.envrc を以下の内容で作成しておけば、
fvm flutter config xxxx で設定した内容が、.fvm/settings に設定されるようになります。

export XDG_CONFIG_HOME=$PWD/.fvm

この状態で fvm flutter config --enable-web と設定すると .fvm/settings

{
  "enable-web": true
}

が保存されます。

fvm_config.json と一緒にgit管理しとけばメンバー間で共有できて良さそうです :sparkles:

:warning: 注意点としてXDG Base Directory仕様を採用している別のツールなどを一緒に使う場合はそちらも設定ファイルが
.fvm 配下に作られちゃいます。。

補足

実際にconfigを書き出している箇所を調べてみたら、flutterのソースには↓の様になっていました。

  static String _configPath(
      Platform platform, FileSystem fileSystem, String name) {
    final String homeDirFile =
        fileSystem.path.join(_userHomePath(platform), '.${kConfigDir}_$name');
    if (platform.isLinux || platform.isMacOS) {
      if (fileSystem.isFileSync(homeDirFile)) {
        return homeDirFile;
      }
      final String configDir = platform.environment[kXdgConfigHome] ??
          fileSystem.path.join(_userHomePath(platform), '.config', kConfigDir);
      return fileSystem.path.join(configDir, name);
    }
    return homeDirFile;
  }

kXdgConfigHome = XDG_CONFIG_HOME で定義されています。
また、既に ~/.flutter_settings が存在する場合は、そちらの内容を反映するようになっています。
この内容が反映されたのが、 こちらのPR がマージされたタイミングで
それ以前は以下の様な実装になっています。

class Config {
  factory Config(
    String name, {
    @required FileSystem fileSystem,
    @required Logger logger,
    @required Platform platform,
  }) {
    final File file = fileSystem.file(fileSystem.path.join(
      _userHomePath(platform),
      name,
    ));
    return Config._(file, logger);
  }

  // Reads the process environment to find the current user's home directory.
  //
  // If the searched environment variables are not set, '.' is returned instead.
  //
  // Note that this is different from FileSystemUtils.homeDirPath.
  static String _userHomePath(Platform platform) {
    final String envKey = platform.operatingSystem == 'windows'
      ? 'APPDATA'
      : 'HOME';
    return platform.environment[envKey] ?? '.';
  }
}

$HOME/.flutter_settings に書き込むようになっています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0