@@ -32,64 +32,93 @@ class GoogleMapsNavigationPlugin : FlutterPlugin, ActivityAware {
32
32
}
33
33
}
34
34
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
44
45
45
46
override fun onAttachedToEngine (binding : FlutterPlugin .FlutterPluginBinding ) {
46
47
instance = this
48
+
49
+ // Init view registry and its method channel handlers
47
50
viewRegistry = GoogleMapsViewRegistry ()
48
- imageRegistry = ImageRegistry ()
49
- viewMessageHandler = GoogleMapsViewMessageHandler (viewRegistry)
51
+ viewMessageHandler = GoogleMapsViewMessageHandler (viewRegistry!! )
50
52
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!! )
52
58
ImageRegistryApi .setUp(binding.binaryMessenger, imageRegistryMessageHandler)
59
+
60
+ // Setup platform view factory and its method channel handlers
53
61
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!! )
57
67
AutoMapViewApi .setUp(binding.binaryMessenger, autoViewMessageHandler)
58
68
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)
59
74
}
60
75
61
76
override fun onDetachedFromEngine (binding : FlutterPlugin .FlutterPluginBinding ) {
62
- MapViewApi .setUp(binding.binaryMessenger, null ) // Cleanup
77
+ // Cleanup method channel handlers
78
+ MapViewApi .setUp(binding.binaryMessenger, null )
63
79
ImageRegistryApi .setUp(binding.binaryMessenger, null )
80
+ AutoMapViewApi .setUp(binding.binaryMessenger, null )
81
+ NavigationInspector .setUp(binding.binaryMessenger, null )
82
+
64
83
GoogleMapsNavigationSessionManager .destroyInstance()
65
84
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
66
94
instance = null
67
95
}
68
96
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)
80
104
}
81
105
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
+ }
85
111
86
- override fun onReattachedToActivityForConfigChanges ( binding : ActivityPluginBinding ) {
87
- GoogleMapsNavigationSessionManager .getInstance().onActivityCreated(binding.activity)
112
+ GoogleMapsNavigationSessionManager .getInstanceOrNull()?.onActivityDestroyed(forConfigChange)
113
+ lifecycle = null
88
114
}
89
115
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 )
95
124
}
0 commit comments