-
카테고리
-
세부 분야
모바일 앱 개발
-
해결 여부
미해결
중첩 네비게이션 질문입니다.
22.11.22 22:14 작성 조회수 226
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 에 대한 이해를 잘못하고 있는 걸까요?
답변을 작성해보세요.
0
오준석
지식공유자2022.11.23
죄송합니다만 제가 정확히 질문 이해가 안 되어서요.
일단 사용 방법에 문제가 없는지 확인해 보시고요.
위의 경우에만 null 이 넘어오니까 NavigatorKeys.navRoot.currentContext! 사용에 문제가 있을 것 같긴 하네요.
답변 1