GlobalKey<NavigatorState>
타입의 static한 변수 선언global 하게 변수들을 담을 수 있는 클래스와 globalKey 타입의 static변수 선언
candy_global_variable.dart
CandyGlobalVariable
import 'package:flutter/material.dart';
/// Global variables
/// * [GlobalKey<NavigatorState>]
class CandyGlobalVariable {
static final GlobalKey<NavigatorState> naviagatorState =
GlobalKey<NavigatorState>();
}
navigatorKey
연결main.dart
파일에 기입된 MaterialApp
찾아서 navigatorKey 연결
...
return MaterialApp(
...
navigatorObservers: [observer],
navigatorKey: CandyGlobalVariable.naviagatorState,
routes: CandyRouter.routes,
home: RootPage(authSnapshot: authSnapshot),
);
navigatorKey: CandyGlobalVariable.naviagatorState
연결
Q. context를 얻어오는 방법?
A.
SchedulerBinding.instance.addPostFrameCallback((_) {
final context = CandyGlobalVariable.naviagatorState.currentContext;
}
를 통해 현재 context를 얻어와서, provider 접근을 할 수 있고, navigator.push()를 할 수 있음
아래 코드는
showCupertinoModalBottomSheet()
호출한 예제 코드import 'candy_message_handler.dart'; class ShowScreenHandler extends CandyMessageHandler { void handle(RemoteMessage message) { final data = message.data; SchedulerBinding.instance.addPostFrameCallback((_) { final context = CandyGlobalVariable.naviagatorState.currentContext; showCupertinoModalBottomSheet( expand: true, context: context, builder: (context, _) => const CustomView(), ); }); } }