プロジェクト毎にflutter configを設定する
前提
-
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, {
FileSystem fileSystem,
Logger logger,
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
に書き込むようになっています。
Discussion