Open19
Flutterプロジェクトの環境設定
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
Flutterを業務でやる場合きっとそれぞれの PJ でバージョンの違う Flutter とか使うはず
アプリも本番環境用、開発環境用みたいにわけたりするはず
- rbenv 的なのあるんだろうか??
- スキーム的なのあるんだろうか??
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
Flutter のバージョン管理いろいろあるらしい
ぱっと検索した感じ以下3つ
- fvm
- asdf
- Sidekick
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
Homebrew でいけるなら fvm でいいかな??
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
fvm 導入
下記コマンド実行
$brew tap leoafarias/fvm
$brew install fvm
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
- Android Studio で任意の Flutter プロジェクトを開く
- もともといれてた flutter を削除
- .zprofile とかの flutter パスを削除
- Android Studio のターミナルで下記コマンド実行
$fvm use stable
- Preferences から flutter のパス設定
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
Dart のパスはもしかしたら自動で設定されるかも??
Pub get するとシミュレーターで起動できました
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
参考
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
本番とか開発環境の設定
とりあえず参考になりそうなやつ
flavor 使うのかな??
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
ちょっと楽ができるかも??
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
とりあえずこれで Pub get
dependencies:
flutter_flavor:
flutter_flavorizr:
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
pubspec.yaml に設定追加
flavorizr:
app:
android:
flavorDimensions: "flavor-type"
ios:
flavors:
dummy:
app:
name: "Dummyのアプリ名"
android:
applicationId: "DummyのアプリID"
ios:
bundleId: "DummyのバンドルID"
release:
app:
name: "Releaseのアプリ名"
android:
applicationId: "ReleaseのアプリID"
ios:
bundleId: "ReleaseのバンドルID"
Android Studio のターミナルで下記実行
たぶん Gem やらはもう入ってた
fvm flutter pub run flutter_flavorizr
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
release は Android でエラーになるのでだめだった
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
Edit Configutations... から + -> Flutter で Dummy 用のやつを追加する
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
コマンド実行で下記ができてた
- app.dart
- flavors.dart
- main_dummy.dart
- main_release.dart
main_dumy.dart 選択して実行するととりあえず動いた
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
Flavor の設定たりてなかった。。。
上の状態だと全部同じバンドル ID になってしまう
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
- main.dart から MyApp を削除
- main.dart から MyHomePage を root_page.dark に切り出す
- app.dart はこんな感じ
class App extends StatelessWidget {
const App({Key? key}) : super(key: key);
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: const [
AppLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: const [
Locale('ja', ''),
Locale('en', ''),
],
onGenerateTitle: (context) => AppLocalizations.of(context)!.homeTitle,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: _flavorBanner(
child: const MyHomePage(),
show: kDebugMode,
),
);
}
Widget _flavorBanner({
required Widget child,
bool show = true,
}) =>
show
? Banner(
child: child,
location: FlavorConfig.instance.location,
message: F.name,
color: FlavorConfig.instance.color,
textStyle: const TextStyle(
fontWeight: FontWeight.w700,
fontSize: 12.0,
letterSpacing: 1.0),
textDirection: TextDirection.ltr,
)
: Container(
child: child,
);
}
main-dummy.dart はこんな感じ
void main() {
FlavorConfig(
name: "Dummy",
color: Colors.red,
location: BannerLocation.bottomStart,
variables: {
"title": "ほげDummy",
});
F.appFlavor = Flavor.DUMMY;
runApp(const App());
}
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
下記で variables
に設定した値を取れる
var hoge = FlavorConfig.instance.variables["title"];
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
これで Flavor ごとに分岐処理もできた
import 'flavors.dart';
switch (F.appFlavor) {
case Flavor.DUMMY:
// なんか処理
break;
default:
// なんか処理
break;
}
![am10](https://res.cloudinary.com/zenn/image/fetch/s--4b71qYiF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/59a9d456e1.jpeg)
Android 起動で下記エラーになったけどただの容量不足だった。。。
Error launching application on Android SDK built for x86.