[Flutter]Main.dart 실행파일 나누기

S_Soo100·2022년 11월 14일
0

flutter

목록 보기
2/14
post-thumbnail
🔥 main.dart를 쪼개서 사용해보자~!
  • 플러터 프로젝트를 명령어를 나누어 사용함을 통해 dev/product/qa 등 쪼개서 빌드할 수 있다.
    이점이라고 한다면 baseURL등이 빌드하는 방법에 따라 알아서 나눠지기 때문에 실수를 줄일 수 있고 테스트가 쉽다.
  • ⚠️vscode⚠️ 사용 기준으로 작성하였다.

구현

환경을 나누기 위한 env.dart를 만든 다음 import 'package:meta/meta.dart'; 를 임포트하고,
enum으로 BuildFlavor를 나눠준다(나누고 싶은 빌드 모드).

그리고 BuildEnvironment 클래스를 사용한다.

env.dart

import 'package:meta/meta.dart';

enum BuildFlavor { production, development, qa }

BuildEnvironment get env => _env;
BuildEnvironment _env;

class BuildEnvironment {
  /// The backend server.final String baseUrl;
  final BuildFlavor flavor;

  BuildEnvironment._init({this.flavor, this.baseUrl});

  /// Sets up the top-level [env] getter on the first call only.static void init({@required flavor, @required baseUrl}) =>
      _env ??= BuildEnvironment._init(flavor: flavor, baseUrl: baseUrl);
}

main_dev.dart

import 'package:flutter/material.dart';
import 'env.dart';
import 'app.dart';

void main() {
  BuildEnvironment.init(
      flavor: BuildFlavor.development,  //이부분에 enum으로 선언한 flavor를 지정
			baseUrl: 'http://development_server.com');  //이부분에 url사용
  assert(env != null);
  runApp(App());
}

main_prod.dart

import 'package:flutter/material.dart';
import 'env.dart';
import 'app.dart';

void main() {
  BuildEnvironment.init(
      flavor: BuildFlavor.production,  //이부분에 enum으로 선언한 flavor를 지정
			baseUrl: 'http://production_server.com');  //이부분에 url사용
  assert(env != null);
  runApp(App());
}
  • 모두 지정했으면 원래의 main.dart는 삭제해도 된다. 그런데 우리는 main.dart에 너무 많은것을 집어넣어두었다면? runApp() 아래 부분에 다른 클래스나 함수를 만들어두었다면 파일을 나누어서 main_$flavor.dart 들이 공용으로 사용하게 하고, runZonedGuardedawait Firebase.initializeApp();같이 메인에 엮는 기능은 각각의 main에 모두 넣어주자.
    (더 좋은 방법이 있을 수 있다!)
  • 다음으로 vsCode설정을 해주자. .vscode/launch.json 파일로 이동한다. 그리고 아래와 같이 “configurations” 부분을 설정해준다.
    {
      "version": "0.2.0",
      "configurations": [
        {
          "name": "development",
          "program": "lib/main_dev.dart",
          "request": "launch",
          "type": "dart"
        },
        {
          "name": "production",
          "program": "lib/f.dart",
          "request": "launch",
          "type": "dart"
        }
        {
          "name": "qa",
          "program": "lib/main_qa.dart",
          "request": "launch",
          "type": "dart"
        }
      ]
    }
  • 이제 플러터를 run하거나 build할 때는 target "-t" 옵션을 사용해야 한다.

    flutter run -t lib/main_dev.dart flutter build -t lib/main_dev.dart

profile
플러터, 리액트

0개의 댓글