@@ -85,15 +85,14 @@ class AmplifyDataStorePlugin :
85
85
NativeApiBridge {
86
86
private lateinit var channel: MethodChannel
87
87
private lateinit var eventChannel: EventChannel
88
- private lateinit var observeCancelable: Cancelable
88
+ private var observeCancelable: Cancelable ? = null
89
89
private lateinit var hubEventChannel: EventChannel
90
90
91
91
private val dataStoreObserveEventStreamHandler: DataStoreObserveEventStreamHandler
92
92
private val dataStoreHubEventStreamHandler: DataStoreHubEventStreamHandler
93
93
private val uiThreadHandler: Handler
94
94
private val LOG = Amplify .Logging .forNamespace(" amplify:flutter:datastore" )
95
95
private var isSettingUpObserve = AtomicBoolean ()
96
- private var nativeAuthPlugin: NativeAuthPlugin ? = null
97
96
private var nativeApiPlugin: NativeApiPlugin ? = null
98
97
private val coroutineScope = CoroutineScope (CoroutineName (" AmplifyFlutterPlugin" ))
99
98
private val dispatcher: CoroutineDispatcher = Dispatchers .IO
@@ -114,6 +113,8 @@ class AmplifyDataStorePlugin :
114
113
* be instantiated only once but still maintain a reference to the active method channel.
115
114
*/
116
115
var flutterAuthProviders: FlutterAuthProviders ? = null
116
+ var nativeAuthPlugin: NativeAuthPlugin ? = null
117
+ var hasAddedUserAgent : Boolean = false
117
118
}
118
119
119
120
val modelProvider = FlutterModelProvider .instance
@@ -185,6 +186,14 @@ class AmplifyDataStorePlugin :
185
186
override fun onDetachedFromEngine (binding : FlutterPlugin .FlutterPluginBinding ) {
186
187
channel.setMethodCallHandler(null )
187
188
189
+ eventChannel.setStreamHandler(null )
190
+ hubEventChannel.setStreamHandler(null )
191
+
192
+ observeCancelable?.cancel()
193
+ observeCancelable = null
194
+
195
+ dataStoreHubEventStreamHandler.onCancel(null )
196
+
188
197
nativeAuthPlugin = null
189
198
NativeAuthBridge .setUp(binding.binaryMessenger, null )
190
199
@@ -438,7 +447,7 @@ class AmplifyDataStorePlugin :
438
447
439
448
queryPredicate = QueryPredicateBuilder .fromSerializedMap(
440
449
request[" queryPredicate" ].safeCastToMap()
441
- ) ? : QueryPredicates .all()
450
+ ) ? : QueryPredicates .all()
442
451
} catch (e: Exception ) {
443
452
uiThreadHandler.post {
444
453
postExceptionToFlutterChannel(
@@ -502,7 +511,7 @@ class AmplifyDataStorePlugin :
502
511
}
503
512
504
513
fun onSetUpObserve (flutterResult : Result ) {
505
- if (this :: observeCancelable.isInitialized || isSettingUpObserve.getAndSet(true )) {
514
+ if (observeCancelable != null || isSettingUpObserve.getAndSet(true )) {
506
515
flutterResult.success(true )
507
516
return
508
517
}
@@ -932,16 +941,27 @@ class AmplifyDataStorePlugin :
932
941
throw NotImplementedError (" Not yet implemented" )
933
942
}
934
943
944
+ fun addUserAgent (
945
+ version : String ,
946
+ ) {
947
+ if (hasAddedUserAgent) return
948
+
949
+ @OptIn(AmplifyFlutterApi ::class )
950
+ Amplify .addUserAgentPlatform(UserAgent .Platform .FLUTTER , " $version /datastore" )
951
+
952
+ hasAddedUserAgent = true
953
+ }
954
+
935
955
override fun configure (
936
956
version : String ,
937
957
config : String ,
938
958
callback : (kotlin.Result <Unit >) -> Unit
939
959
) {
940
960
coroutineScope.launch(dispatcher) {
941
961
try {
942
- @OptIn(AmplifyFlutterApi ::class )
943
- Amplify .addUserAgentPlatform(UserAgent .Platform .FLUTTER , " $version /datastore" )
962
+ addUserAgent(version)
944
963
Amplify .configure(AmplifyOutputs (config), context)
964
+
945
965
withContext(Dispatchers .Main ) {
946
966
callback(kotlin.Result .success(Unit ))
947
967
}
0 commit comments