api 요청에 대한 응답으로 refresh token 만료 Exception이 왓을 때, 위젯과 관련없는 클래스에서 로그인 페이지로 navigate를 하는 방법을 찾아야 했다. 여기서 관건은, context를 사용할 수 없다는 것이었다.
구글링을 해보니 많이들 restart_app이라는 라이브러리를 추천하길래 다운로드하여 사용해보았으나,
flutter clean을 하고 다시 런해도, vscode를 껐다 켜도, flutter upgrade후 다시 다 해봐도!! 뭘 해도 다음과 같은 에러가 계속 발생하여 포기할 수 밖에 없었다...ㅠㅠ
unhandled exception: missingpluginexception(no implementation found for method restartapp on channel restart)
더 구글링을 해보니 navigatorkey를 사용하는 방법을 찾을 수 있었다.
감사한 스택오버플로우 글
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>(); //추가!
void main() {
runApp(CupertinoApp(
title: 'Navigate without context',
initialRoute: '/',
navigatorKey: navigatorKey, // important
onGenerateRoute: ...
));
}
import 'package:{내 어플리케이션 패키지 이름}/main.dart'; //꼭 추가!!!
abstract class API {
static Future<dynamic> get() async {
// call some api
...
// then you want to navigate to specific screen like login
navigatorKey.currentState?.pushNamed('/login'); // navigate to login, with null-aware check
}
}
참고
https://stackoverflow.com/questions/52962112/how-to-navigate-without-context-in-flutter-app