강의

멘토링

로드맵

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

위시드님의 프로필 이미지
위시드

작성한 질문수

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

Authentication 마무리하기

Go router 적용시 에러 (버전 충돌 문제?)

해결된 질문

작성

·

258

0


final routerProvider = Provider<GoRouter>((ref) {
  // watch - 값이 변경될때마다 다시 빌드
  // read - 한번만 읽고 값이 변경돼도 다시 빌드 하지 않음
  final provider = ref.read(authProvider);

  return GoRouter(
    routes: provider.routes,
    initialLocation: '/splash',
    refreshListenable: provider,
    redirect: (context, state) => provider.redirectLogic(context, state), /
  );
});
void main() {
  runApp(
    ProviderScope(
      child: _App(),
    ),ㅇ
  );
}

class _App extends ConsumerWidget {
  const _App({super.key});

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    final router = ref.watch(routerProvider);

    return MaterialApp.router(
      theme: ThemeData(fontFamily: 'NotoSans'),
      debugShowCheckedModeBanner: false,
      routerConfig: router,
    );
  }
}

안녕하세요. GoRouter 적용해보기 파트에서 에러를 만나 어려움을 겪고 있네요. 버전업 때문에 기존 코드를 조금 수정하니 이전에 뜨던 오류는 사라졌습니다. 그러나 아래 에러 메시지에서는 어떻게 해결을 해야할 지 모르겠네요..

 

Got a stack frame from package:stack_trace, where a vm or web frame was expected. This can happen if FlutterError.demangleStackTrace was not set in an environment that propagates non-standard stack traces to the framework, such as during tests.

'package:flutter/src/foundation/stack_frame.dart':

 

 

패키지 버전은

flutter_riverpod: ^2.2.0

go_router: ^7.1.1

답변 2

0

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

안녕하세요!

go router를 추가하기만 하면 생기는 문제일까요?

감사합니다!

위시드님의 프로필 이미지
위시드
질문자

아 ㅎㅎ 선생님 버전 충돌 + 업뎃 + 라우트 네임중복(복붙 실수) 등이 겹쳐져서 터진 에러였네요.. 어제 하루종일 찾아보다가 포기했다가. 오늘 잃마치고 다시 정신차리고 디멩글 세팅해서 수정했네요.. ㅋㅋ SplashScreen이 두개 중복됐던것.. 죄송합니다...ㅠ

0

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

Flutter 프로젝트에서 GoRouter를 사용하면서 주어진 오류를 겪고 계신 것 같습니다. 이 오류는 보통 비표준 스택 트레이스가 Flutter 프레임워크에 전달되는 상황에서 발생할 수 있습니다. 특히 테스트 환경에서 이러한 문제가 발생할 수 있습니다.

다음은 이 문제를 해결하는 데 도움이 될 수 있는 몇 가지 단계입니다:

패키지 버전 충돌 확인

먼저, 사용하는 패키지의 버전이 서로 충돌하지 않는지 확인해야 합니다. flutter/pubspec.yaml 파일에서 모든 패키지의 의존성을 명확히 하고, 서로 호환 가능한 버전을 사용하고 있는지 체크하세요.

FlutterError.demangleStackTrace 설정

FlutterError.demangleStackTrace 설정은 비표준 스택 트레이스를 처리할 때 필요합니다. 보통 테스트 환경에서 사용되며, 아래와 같이 설정할 수 있습니다:

void main() {
  FlutterError.demangleStackTrace = (StackTrace stack) {
    return stack;
  };

  runApp(
    ProviderScope(
      child: _App(),
    ),
  );
}

코드 확인

  • redirect 콜백의 반환 타입이 FutureOr<String?>이 되도록 아래와 같이 변경해야 합니다:
redirect: (context, state) {
  return provider.redirectLogic(context, state);
}

관련하여 비슷한 주제를 다루는 질문을 확인하시고, 추가적인 도움이 필요하시면 구글 검색 결과 또는 코드팩토리 Flutter 수강생 Q&A를 참조해 보세요.

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

위시드님의 프로필 이미지
위시드

작성한 질문수

질문하기