inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Flutter 중급 1편 - 클린 아키텍처

중첩 네비게이션 질문입니다.

358

Jay

작성한 질문수 3

0

안녕하세요.
강사님 Bottom tab 메뉴를 가지고 있는 중첩 네비게이션을 구현하고 있습니다.
각 탭 별로 네비게이션 관리를 하기 위해 탭 별 NavigatorState Key 를 저장하여 관리하고
static final GlobalKey<NavigatorState> navHome = GlobalKey();
static final GlobalKey<NavigatorState> navIntro = GlobalKey();
static final GlobalKey<NavigatorState> navPayment = GlobalKey();

탭 내에서 push 를 하면 내비게이션 내부에서만 페이지가 활성화 되기에 화면 전체를 덮는 페이지들도 필요해 아래와 같이 선언하여 사용하여 탭을 감싸고 있는 상위 위젯을 열었습니다.
static final GlobalKey<NavigatorState> navRoot = GlobalKey();
홈 탭에서 로그인이 필요하여 해당 부분을
(홈 탭에서 호출 부분)
final result = await Navigator.push(
NavigatorKeys.navRoot.currentContext!,
MaterialPageRoute( builder: () => const SignInScreen(),
settings: RouteSettings(name: SignInScreen.routeName),
),
)
전체 화면으로 호출하였고,
완료후 리턴값이 필요하여 await 로 push 후 리턴 값을 기다렸다가 출력 하니 null 이 됩니다.

로그인 화면에서 pop 전에 리턴 값은 확인 하였고요
(로그인 에서 pop 부분 )
Navigator.pop(NavigatorKeys.navRoot.currentContext!, param);

param 이 null 이 아닌데 왜 홈 탭에서는 null 이 들어 올까요?
bottom tab 을 감싸고 있는 상위 Widget 에서 await 호출 후 리턴값을 받으려 해도 동일 합니다.
하지만 홈 탭에서 로그인 화면을 context 로 push 하고,
pop 에서도 context 로 pop 하면 리턴값이 정상적으로 넘어옵니다.
(홈 탭에서 호출 부분)
final result = await Navigator.push(
context,
MaterialPageRoute( builder: () => const SignInScreen(),
settings: RouteSettings(name: SignInScreen.routeName),
),
)

제가 뭔가 잘 못 사용하고 있는거겠죠? Navigation 에 대한 이해를 잘못하고 있는 걸까요?

Flutter android ios

답변 1

0

오준석

죄송합니다만 제가 정확히 질문 이해가 안 되어서요.

https://stackoverflow.com/questions/49628510/flutter-keep-bottomnavigationbar-when-push-to-new-screen-with-navigator

일단 사용 방법에 문제가 없는지 확인해 보시고요.

위의 경우에만 null 이 넘어오니까 NavigatorKeys.navRoot.currentContext! 사용에 문제가 있을 것 같긴 하네요.

0

오준석

일단 의심이 되는 부분은 BuildContext 가 위젯 트리의 정보를 가지고 있는데, NavigatorKeys.navRoot.currentContext! 의 경우 원하는 경로의 위젯 정보를 알 수 없는 경우가 아닌가 의심됩니다

0

오준석

해당 상황을 재현하려고 이것 저것 해 보았는데요. context 는 기본 컨텍스트를 사용했습니다.

일단 잘 되고 있습니다.

https://github.com/ssac-flutter/nested-navigation-bar

0

Jay

우왓 감사합니다. 참고해 보도록 하겠습니다.

MVVM, 클린 아키텍처 관련 질문 있습니다.

0

85

2

가끔씩 ui가 깨지는? 현상이 있어서 질문드립니다.

0

91

1

freezed 3.0 대응된 코드 깃헙에도 업데이트 해주실 수 있으신가요?

0

176

3

sealed class 사용시 기능은 동작하지만 Radio위젯에 선택 표시가 안되는 부분 질문

0

117

2

sealed class 사용시 The getter 'orderType' isn't defined for the type 'NoteOrder<dynamic>' 오류

0

92

2

유즈케이스 관련하여 질문 드립니다.

0

91

1

mockito사용시 오류 해결법

1

123

2

sealed class 사용 문의2

0

75

2

sealed class 사용 문의

0

116

2

freezed3.0에서 build시 when생성되지 않습니다.

0

263

2

Try implementing the missing methods, or make the class abstract. 문제해결 공유

0

236

2

This is likely caused by a misconfigured builder definition. 오류 해결 방법

1

316

3

강의 화면이 안보여요

0

133

3

Flutter에서 추천하는 Navigator, Router

0

322

2

The following ProgressEvent object was thrown resolving an image codec: [object ProgressEvent]

0

324

3

event와 ui_event

0

211

1

코드 색깔 관련 질문

0

207

1

Photo.fleezed.dart,photo.g.dart삭제시 에러

0

203

2

sealed class 적용 시...

0

325

1

클린 아키텍처 질문

0

307

1

sealed class 데이터 접근

0

323

1

서버에서 데이터를 가져와서 사용하는 경우...

0

230

1

뷰/뷰모델 작성 질문

0

269

1

freezed JsonKey 사용 예시 공유

1

789

1