스크린 이동 후 뒤로가기를 수행할 때 또는 Drawer와 Dialog등이 클릭 후 자동으로 숨겨지기 원할 때 pop을 사용한다. 이 때 Navigator.of(context).pop()과 Navigator.pop(context)를 사용하는 두 가지 방식이 있어 차이를 짚고 넘어가려 한다.
사실 두 함수 기능에 큰 차이는 없으며 Navigator.pop(context)이 내부적으로 Navigator.of(context).pop()을 호출하는 구조이다. Navigator.of(context).pop()을 사용하면 가장 타이트하게 떨어져있는 context를 불러올 수 있다. 그러므로 특정 예외상황을 제외하고는 범용적으로 사용될 수 있는 Navigator.pop(context)를 쓰는 것이 낫다.
이 예외 상황은 showDialog()에 의해 생성된 route가 root navigator에 의해 push 되는 상황이다. 이런 상황은 앱이 multiple Navigator objects를 가지게 될 수 있기 때문에 Navigator.of(context, rootNavigator: true).pop(result)를 사용해 dialog를 정확하게 close해주는 것이 더 낫다. 여기서 rootNavigator가 true가 되면 가장 먼 NavigatorState를 불러올 것이라는 의미이다. 만약 Getx를 사용하고 있다면 그냥 Get.back() 함수를 호출하면 되기 때문에 좀 더 고민을 덜어줄 수 있을 것 같다.
추가적으로 Navigator.push(context)와 Navigator.of(context).push()의 경우도 pop과 크게 다르지 않은데 .of(context)를 붙여 더 정확한 Navigator로 push 해주기 위해 사용된다. Navigator.push(context)만 사용했을 때는 pop과 같이 rootNavigator 옵션이 있는데 의미 또한 pop과 동일하게 true일 때 가장 먼 NavigatorState를 가져온다.
참고 자료
https://newbedev.com/flutter-navigator-of-context-pop-vs-navigator-pop-context-difference