Open19

Flutterプロジェクトの環境設定

am10am10

Flutterを業務でやる場合きっとそれぞれの PJ でバージョンの違う Flutter とか使うはず

アプリも本番環境用、開発環境用みたいにわけたりするはず

  • rbenv 的なのあるんだろうか??
  • スキーム的なのあるんだろうか??
am10am10

fvm 導入

下記コマンド実行

$brew tap leoafarias/fvm
$brew install fvm
am10am10
  1. Android Studio で任意の Flutter プロジェクトを開く
  2. もともといれてた flutter を削除
  3. .zprofile とかの flutter パスを削除
  4. Android Studio のターミナルで下記コマンド実行
    $fvm use stable
    
  5. Preferences から flutter のパス設定
am10am10

Dart のパスはもしかしたら自動で設定されるかも??

Pub get するとシミュレーターで起動できました

am10am10

とりあえずこれで Pub get

dependencies:
  flutter_flavor:
  flutter_flavorizr:
am10am10

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
am10am10

release は Android でエラーになるのでだめだった

am10am10

Edit Configutations... から + -> Flutter で Dummy 用のやつを追加する

am10am10

コマンド実行で下記ができてた

  • app.dart
  • flavors.dart
  • main_dummy.dart
  • main_release.dart

main_dumy.dart 選択して実行するととりあえず動いた

am10am10

Flavor の設定たりてなかった。。。

上の状態だと全部同じバンドル ID になってしまう

am10am10
  1. main.dart から MyApp を削除
  2. main.dart から MyHomePage を root_page.dark に切り出す
  3. 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());
}
am10am10

下記で variables に設定した値を取れる

var hoge = FlavorConfig.instance.variables["title"];
am10am10

これで Flavor ごとに分岐処理もできた

import 'flavors.dart';

switch (F.appFlavor) {
      case Flavor.DUMMY:
        // なんか処理
        break;          
      default:
        // なんか処理
        break;
    }
am10am10

Android 起動で下記エラーになったけどただの容量不足だった。。。

Error launching application on Android SDK built for x86.