@@ -32,64 +32,93 @@ class GoogleMapsNavigationPlugin : FlutterPlugin, ActivityAware {
3232 }
3333 }
3434
35- internal lateinit var viewRegistry: GoogleMapsViewRegistry
36- private lateinit var viewMessageHandler: GoogleMapsViewMessageHandler
37- private lateinit var imageRegistryMessageHandler: GoogleMapsImageRegistryMessageHandler
38- private lateinit var viewEventApi: ViewEventApi
39- private lateinit var _binding : FlutterPlugin .FlutterPluginBinding
40- private lateinit var lifecycle: Lifecycle
41- internal lateinit var imageRegistry: ImageRegistry
42- private lateinit var autoViewMessageHandler: GoogleMapsAutoViewMessageHandler
43- internal lateinit var autoViewEventApi: AutoViewEventApi
35+ internal var viewRegistry: GoogleMapsViewRegistry ? = null
36+ internal var imageRegistry: ImageRegistry ? = null
37+ internal var autoViewEventApi: AutoViewEventApi ? = null
38+ private var viewEventApi: ViewEventApi ? = null
39+
40+ private var viewMessageHandler: GoogleMapsViewMessageHandler ? = null
41+ private var imageRegistryMessageHandler: GoogleMapsImageRegistryMessageHandler ? = null
42+ private var autoViewMessageHandler: GoogleMapsAutoViewMessageHandler ? = null
43+
44+ private var lifecycle: Lifecycle ? = null
4445
4546 override fun onAttachedToEngine (binding : FlutterPlugin .FlutterPluginBinding ) {
4647 instance = this
48+
49+ // Init view registry and its method channel handlers
4750 viewRegistry = GoogleMapsViewRegistry ()
48- imageRegistry = ImageRegistry ()
49- viewMessageHandler = GoogleMapsViewMessageHandler (viewRegistry)
51+ viewMessageHandler = GoogleMapsViewMessageHandler (viewRegistry!! )
5052 MapViewApi .setUp(binding.binaryMessenger, viewMessageHandler)
51- imageRegistryMessageHandler = GoogleMapsImageRegistryMessageHandler (imageRegistry)
53+ binding.applicationContext.registerComponentCallbacks(viewRegistry)
54+
55+ // Init image registry and its method channel handlers
56+ imageRegistry = ImageRegistry ()
57+ imageRegistryMessageHandler = GoogleMapsImageRegistryMessageHandler (imageRegistry!! )
5258 ImageRegistryApi .setUp(binding.binaryMessenger, imageRegistryMessageHandler)
59+
60+ // Setup platform view factory and its method channel handlers
5361 viewEventApi = ViewEventApi (binding.binaryMessenger)
54- _binding = binding
55- binding.applicationContext.registerComponentCallbacks(viewRegistry)
56- autoViewMessageHandler = GoogleMapsAutoViewMessageHandler (viewRegistry)
62+ val factory = GoogleMapsViewFactory (viewRegistry!! , viewEventApi!! , imageRegistry!! )
63+ binding.platformViewRegistry.registerViewFactory(" google_navigation_flutter" , factory)
64+
65+ // Setup auto map view method channel handlers
66+ autoViewMessageHandler = GoogleMapsAutoViewMessageHandler (viewRegistry!! )
5767 AutoMapViewApi .setUp(binding.binaryMessenger, autoViewMessageHandler)
5868 autoViewEventApi = AutoViewEventApi (binding.binaryMessenger)
69+
70+ // Setup navigation session manager and its method channel handlers
71+ GoogleMapsNavigationSessionManager .createInstance(binding.binaryMessenger)
72+ val inspectorHandler = GoogleMapsNavigationInspectorHandler (viewRegistry!! )
73+ NavigationInspector .setUp(binding.binaryMessenger, inspectorHandler)
5974 }
6075
6176 override fun onDetachedFromEngine (binding : FlutterPlugin .FlutterPluginBinding ) {
62- MapViewApi .setUp(binding.binaryMessenger, null ) // Cleanup
77+ // Cleanup method channel handlers
78+ MapViewApi .setUp(binding.binaryMessenger, null )
6379 ImageRegistryApi .setUp(binding.binaryMessenger, null )
80+ AutoMapViewApi .setUp(binding.binaryMessenger, null )
81+ NavigationInspector .setUp(binding.binaryMessenger, null )
82+
6483 GoogleMapsNavigationSessionManager .destroyInstance()
6584 binding.applicationContext.unregisterComponentCallbacks(viewRegistry)
85+
86+ // Cleanup references
87+ viewRegistry = null
88+ viewMessageHandler = null
89+ imageRegistryMessageHandler = null
90+ viewEventApi = null
91+ imageRegistry = null
92+ autoViewMessageHandler = null
93+ autoViewEventApi = null
6694 instance = null
6795 }
6896
69- override fun onAttachedToActivity (binding : ActivityPluginBinding ) {
70- val factory = GoogleMapsViewFactory (viewRegistry, viewEventApi, imageRegistry)
71- _binding .platformViewRegistry.registerViewFactory(" google_navigation_flutter" , factory)
72- GoogleMapsNavigationSessionManager .createInstance(_binding .binaryMessenger)
73- val inspectorHandler = GoogleMapsNavigationInspectorHandler (viewRegistry)
74- NavigationInspector .setUp(_binding .binaryMessenger, inspectorHandler)
75- GoogleMapsNavigationSessionManager .getInstance().onActivityCreated(binding.activity)
76-
77- lifecycle = FlutterLifecycleAdapter .getActivityLifecycle(binding)
78- lifecycle.addObserver(viewRegistry)
79- lifecycle.addObserver(GoogleMapsNavigationSessionManager .getInstance())
97+ private fun attachActivity (binding : ActivityPluginBinding ) {
98+ lifecycle =
99+ FlutterLifecycleAdapter .getActivityLifecycle(binding).also { lc ->
100+ viewRegistry?.let (lc::addObserver)
101+ GoogleMapsNavigationSessionManager .getInstanceOrNull()?.let (lc::addObserver)
102+ }
103+ GoogleMapsNavigationSessionManager .getInstanceOrNull()?.onActivityCreated(binding.activity)
80104 }
81105
82- override fun onDetachedFromActivityForConfigChanges () {
83- GoogleMapsNavigationSessionManager .getInstance().onActivityDestroyed()
84- }
106+ private fun detachActivity (forConfigChange : Boolean ) {
107+ lifecycle?.let { lc ->
108+ viewRegistry?.let (lc::removeObserver)
109+ GoogleMapsNavigationSessionManager .getInstanceOrNull()?.let (lc::removeObserver)
110+ }
85111
86- override fun onReattachedToActivityForConfigChanges ( binding : ActivityPluginBinding ) {
87- GoogleMapsNavigationSessionManager .getInstance().onActivityCreated(binding.activity)
112+ GoogleMapsNavigationSessionManager .getInstanceOrNull()?.onActivityDestroyed(forConfigChange)
113+ lifecycle = null
88114 }
89115
90- override fun onDetachedFromActivity () {
91- lifecycle.removeObserver(GoogleMapsNavigationSessionManager .getInstance())
92- GoogleMapsNavigationSessionManager .getInstance().onActivityDestroyed()
93- lifecycle.removeObserver(viewRegistry)
94- }
116+ override fun onAttachedToActivity (binding : ActivityPluginBinding ) = attachActivity(binding)
117+
118+ override fun onDetachedFromActivityForConfigChanges () = detachActivity(forConfigChange = true )
119+
120+ override fun onReattachedToActivityForConfigChanges (binding : ActivityPluginBinding ) =
121+ attachActivity(binding)
122+
123+ override fun onDetachedFromActivity () = detachActivity(forConfigChange = false )
95124}
0 commit comments