티스토리 뷰

flutter

flutter go_router vs auto_route

길 킴 2024. 9. 11. 09:18
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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함