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

작성자 없음

작성자 정보가 삭제된 글입니다.

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

redirectionLogic 에러관련 질문입니다

작성

·

169

·

수정됨

0

안녕하세요 코드팩토리님! 좋은 강의 잘 듣고 있습니다. 현재 115강까지 수강한 상태이고 go_router.dart 파일 안에 redirectionLogic부분에 에러가 발생하였습니다. 강사님과 달리 현재 go router 7 버전을 사용하고 있습니다. 버전 차이로 인해 추가로 수정해야하는 부분이 있거나 혹은 제가 실수한 부분이 있다면 알려주시면 감사하겠습니다 :)

 

go_router.dart

auth_provider.dart

String? redirectLogic(GoRouterState state) {
    final UserModelBase? user = ref.read(userMeProvider);

    final logginIn = state.location == '/login';

    if (user == null) {
      return logginIn ? null : '/login';
    }

    // user is not null

    // UserModel
    // there is user information and
    // user is logging in or at the SplashScreen,
    // move on to home screen
    if (user is UserModel) {
      return logginIn || state.location == '/splash' ? '/' : null;
    }

    // UserModelError
    if (user is UserModelError) {
      return !logginIn ? '/login' : null;
    }

    return null;
  }

 

코드 실행 시 발생한 에러 메시지 입니다

답변 2

0

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

안녕하세요!

강의에서 말씀 드린대로 redirectLogic의 시그니처가 변경 됐습니다.

에러 메세지에서 보여주는대로 GoRouterState 파라미터 하나를 받는게 아니라

BuildContext와 GoRouterState 두개를 받습니다.

함수 정의에서 파라미터 하나 추가 해주시면 됩니다.

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다. skymin님의 질문에 답변 드리겠습니다.

질문자님이 겪고 계신 문제는 GoRouter 라이브러리의 버전 변경으로 인해 발생한 형태(Type) 불일치 오류로 보입니다. GoRouter 버전 7에서는 redirect 함수의 시그니처가 변경되어 이제 FutureOr<String?> Function(BuildContext, GoRouterState) 타입을 사용해야 합니다. 이는 원래 사용하던 단순한 String? Function(GoRouterState) 타입과는 달리, BuildContext를 첫 번째 파라미터로 받으며, FutureOr을 사용하여 연산을 비동기적으로 수행할 수 있도록 변화되었다는 것을 의미합니다.

기존 답변에서도 유사한 종류의 문제를 회원님들이 겪었으며, 강의를 업데이트하거나 redirect 함수의 시그니처를 새로운 시그니처에 맞게 변경하는 방식으로 해결했습니다. 해당 문제를 해결하기 위해 GoRouter 7.0 업데이트 강의 섹션을 참고하시거나, 아래의 기존 답변들에서 자세한 해결 방법을 확인해보실 수 있습니다.

  • go_router.dart error(auth_provider내 redirectLogic) - 답변에서는 redirect 함수 앞에 BuildContext context를 추가함으로써 해결한 사례가 나와 있습니다.
  • go Router redirect 에러 - 코드팩토리 강사님께서 새로운 redirect 함수의 시그니처에 대해 설명하시며, 새로운 버전에 맞게 코드를 수정하는 방법을 제시하셨습니다.

위의 정보를 바탕으로, auth_provider.dart 내에 정의된 redirectLogic 함수의 시그니처를 다음과 같이 변경하실 수 있습니다:

FutureOr<String?> redirectLogic(BuildContext context, GoRouterState state) {
    // 여기서부터 나머지 코드...
}

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기