인프런 커뮤니티 질문&답변

진표님의 프로필 이미지
진표

작성한 질문수

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

Authentication 마무리하기

GoRouter 재빌드

작성

·

190

0

리버팟 codegen을 쓰면서 강의를 듣다가 리버팟 codegen으로는 changeNotifier를 작성하지 못한다는 기사를 읽었습니다.

다음 코드에서 막혔습니다.

@riverpod
GoRouter goRouter(GoRouterRef ref) {
  final provider = ref.read(authProvider.notifier);
  final user = ref.watch(userMeProvider);

  return GoRouter(
    routes: provider.routes,
    initialLocation: '/splash',
    // refreshListenable: ???,
    redirect: (_, state) {
      return provider.redirectLogic(state);
    },
  );
}

여기서 refreshListenable에 값을 넣어줘야 하는데 강의에서는 ChangeNotiferProvider로 했기 때문에 refreshListenable에 값을 넣어주는게 가능했는데 저는 codegen으로 하다보니 타입 에러가 뜨고 값을 넣어 줄 수가 없습니다.

final user = ref.watch(userMeProvider);

이 코드를 넣어서 user의 상태가 바뀌면 고라우터를 재빌드 시켜서 리다이렉트 함수를 다시 실행시키려고 했는데, user의 상태가 UserModelLoading에서 UserModel로 분명히 바뀜에도 불구하고 고라우터가 재빌드가 안됩니다. print() 넣어서 확인했습니다.

그냥 리버팟 codegen 쓰지말고 v1처럼 하는게 나을까요? 아니면 refreshListenable에 넣어 줄 수 있는 다른 값이나 고라우터의 리다이렉트 함수를 또 실행시켜줄 장치가 있을까요?

답변 1

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

code gen은 단순히 반복적인 코드 작성을 줄여주는 기능입니다.

쉽게 말해서 code gen이 내가 필요한 코드를 작성해주지 못한다면 사용할 이유가 없습니다.

감사합니다!

진표님의 프로필 이미지
진표

작성한 질문수

질문하기