이것 저것 많은 위젯들을 만지면서 프로젝트를 진행하고 있던 중간에 다음과 같은 오류가 자꾸 발목을 잡았다.
오류 발생
return MaterialApp(
initialRoute: '/login',
routes: {
"/login": (context) => LoginPage(),
"/main": (context) => MainPage(),
},
);
위와 같은 코드를 사용하여 페이지를 이름 형식으로 넘기는 방법을 사용하는 중간에 발생하였다.
처음에는 별 문제없이 실행도 잘되었으나 문제는 Hotload를 실행할 때(중간에 저장하여 실시간으로 변화를 확인하고자 할 때) 발생하였다.
물론 Program을 Stop하고 재실행하면 문제는 발생하지 않았지만, Flutter의 특성인 실시간 변화를 사용할 수 없다는 것은 엄청난 페널티가 아닐 수 없었다.
route가 잘못 연결되서 이런 결과를 만들었구나 싶어서 if 조건문을 다시 다듬어서
"/": (context) => 에 새로운 page를 추가했더니 해당 오류는 사라졌다.
하지만 다른 오류가 발생했다
이번에는 navigator로 던지는 과정에서 발생한 것을 알 수 있었다. “!_debugLocked': is not true.” 이전 문제가 '/'에 대한 return 값의 문제라면 페이지 전환과 관련되어 문제가 발생했다는 것을 알 수 있다.
void showRelevant() async {
await Future.delayed(Duration(seconds: 1));
Navigator.pushReplacementNamed(context, '/login');
}
우선 async를 사용하여 비동기화를 시행해주고 Navigator가 잘 작동할 수 있도록 delay를 걸어주었더니 잘 작동하였다.
아직은 정확히 어떤 이유로 오류가 발생하였는지 파악은 되지 않지만 아마도 process 중에 서로 간섭이 이루어졌던 것 같다.
아무튼 해결할 수 있어서 좋았다.