본문 바로가기
flutter

flutter go_router vs auto_route

by Gil 2024. 9. 11.
728x90

Flutter 에서 화면 전환 관련해서 go_router 라이브러리를 많이 사용하고 있다. 
그래서 go_router를 사용하였는데, 생각보다 매개변수를 화면에 전달하는 과정이 불편하고 문제가 많이 보였다. 

내가 개선하고 싶은 부분

🤔 화면에 매개변수 전달 시, 자동으로 관련 파라미터 전달 인터페이스를 생성해주는 라이브러리는 없을까? 

‼ auto_route 라는 라이브러리 발견!

AS-IS (go_router)

context.push(ExerciseCheckScreen.routePath, extra: {
  ExerciseCheckScreen.extraKeyScreenType: ExerciseScreenType.DISCOMFORT,
  ExerciseCheckScreen.extraKeyDailyPlanId: planId,
});

TO-BE (auto_route) 

router.push(ExerciseCheckRoute(
  dailyPlanId: planId,
  screenType: ExerciseScreenType.DISCOMFORT,
));

 

단순히 결과만 봐서는 별로 간결해졌다고 보이지 않는다. 하지만, go_router를 사용할 경우 아래의 코드가 추가로 필요하다. 

@RoutePage()
class ExerciseCheckScreen extends HookWidget {
  const ExerciseCheckScreen({super.key, required this.dailyPlanId, required this.screenType, this.onExerciseStart,});

  static const routePath = '/main/exerciseCheckScreen';
  static const routeName = 'ExerciseCheckScreen';
  static const extraKeyScreenType = "extraKeyScreenType";
  static const extraKeyDailyPlanId = "extraKeyDailyPlanId";
// 운동 만족도/불편함 체크 화면
GoRoute(
  path: ExerciseCheckScreen.routePath,
  name: ExerciseCheckScreen.routeName,
  pageBuilder: (context, state) {
    final extraMap = state.extra as Map<String, dynamic>;
    final screenType = extraMap[ExerciseCheckScreen.extraKeyScreenType] as ExerciseScreenType;
    final dailyPlanId = extraMap[ExerciseCheckScreen.extraKeyDailyPlanId] as String;

    return CustomTransitionPage(
        key: state.pageKey,
        child: ExerciseCheckScreen(dailyPlanId: dailyPlanId, screenType: screenType),
        transitionsBuilder: popupTransitionBuilder);
  },
)

주고 받을 파라미터 키값 정의를 해야하고, router 설정페이지에서 Map 형식을 원하는 타입으로 캐스팅 해야 하는 번거로운 과정이 필요하다. 

auto_route는 아래처럼 단순해진다. 

CustomRoute(
  page: ExerciseCheckRoute.page,
  transitionsBuilder: popupTransitionBuilder,
)

 

go_router 에서 정의해야 하는 복잡한 코드들을 build_runner가 내부적으로 알아서 만들어준다. 

 

'flutter' 카테고리의 다른 글

Flutter Webview 연동하기  (0) 2024.09.24
Flutter Mvvm Clean Architecture Guide  (0) 2024.09.13
flutter thread 분석  (0) 2024.06.05
Provider 라이브러리 사용  (0) 2020.02.23
How Flutter renders Widget  (0) 2019.11.23