인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

JY Hwang님의 프로필 이미지
JY Hwang

작성한 질문수

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

SplashScreen 구현해보기

토큰 체크 MaterialPageRoute String

작성

·

67

0

void checkToken() async {
  final refreshToken = await storage.read(key: REFRESH_TOKEN_KEY);
  final accessToken = await storage.read(key: ACCESS_TOKEN_KEY);

  if (refreshToken == null || accessToken == null) {
    Navigator.of(context).pushNamedAndRemoveUntil(
        MaterialPageRoute(
            builder: (_) => LoginScreen()
        ),
          (route)=> false,
    );
  }else{
    Navigator.of(context).pushNamedAndRemoveUntil(
      MaterialPageRoute(
          builder: (_) => RootTab()
      ),
          (route)=> false,
    );
  }
  }

강의와 동일하게 작성한 해당 코드에서
아래와 같은 오류가 생성됩니다.
MaterialPageRoute<dynamic>' can't be assigned to the parameter type 'String'.

답변 2

0

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

안녕하세요!

"Named"라고 돼있는 함수를 사용하시면 페이지의 "이름"을 넣어줘야하는데 MaterialPageRoute를 입력하셔서 그렇습니다! (해당 부분 강의랑 완전 같지 않을거예요! 아마 함수 이름에 Named가 없거나 MaterialPageRoute가 아닌 페이지 이름이 입력 돼있을겁니다)

감사합니다!

0

안녕하세요, 인프런 AI 인턴입니다. JY Hwang님.

제공해주신 코드를 보니, Navigator.of(context).pushNamedAndRemoveUntil 메서드를 사용하는 과정에서 잘못된 매개변수 타입을 사용하시고 있는 듯합니다. pushNamedAndRemoveUntil 메서드는 실제로 라우트 이름(String)을 첫 번째 인자로 받아야 하지만, 귀하의 코드에서는 MaterialPageRoute 객체를 전달하고 있습니다.

비슷한 문제를 다룬 기존 질문들을 확인해보니, 아래 링크들이 도움이 될 수 있습니다:

위 링크들에서 관련된 내용과 해결책을 확인하실 수 있습니다.

코드 오류 관련하여 일반적인 해결책은 다음과 같습니다:

void checkToken() async {
  final refreshToken = await storage.read(key: REFRESH_TOKEN_KEY);
  final accessToken = await storage.read(key: ACCESS_TOKEN_KEY);

  if (refreshToken == null || accessToken == null) {
    Navigator.of(context).pushNamedAndRemoveUntil('/login', (route) => false);
  } else {
    Navigator.of(context).pushNamedAndRemoveUntil('/root', (route) => false);
  }
}

위 코드에서, MaterialPageRoute 대신 라우트 이름을 직접 사용하도록 수정하였습니다. 이 내용을 바탕으로 다시 시도해 보시기 바랍니다.

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

JY Hwang님의 프로필 이미지
JY Hwang
질문자

강의에서는 main.dart파일에 라우트를 따로 지정해놓지 않고 진행하였는데, 똑같이 진행이 안되는 문제는 왜 그럴까요?

JY Hwang님의 프로필 이미지
JY Hwang
질문자

원인해결입니다 :)

JY Hwang님의 프로필 이미지
JY Hwang

작성한 질문수

질문하기