From 1241174705cde65a9aa7489b5b9f1d15c4b82e65 Mon Sep 17 00:00:00 2001 From: fiatcode Date: Thu, 30 Apr 2026 11:16:55 +0700 Subject: [PATCH] fix: set EventChannel stream handler to emit location updates to Flutter --- .../com/traccar/traccar_client/BridgeModule.kt | 15 +++++++++++++++ .../service/LocationTrackingService.kt | 11 +++++++++++ 2 files changed, 26 insertions(+) diff --git a/android/app/src/main/kotlin/com/traccar/traccar_client/BridgeModule.kt b/android/app/src/main/kotlin/com/traccar/traccar_client/BridgeModule.kt index 50d1bf7..635d623 100644 --- a/android/app/src/main/kotlin/com/traccar/traccar_client/BridgeModule.kt +++ b/android/app/src/main/kotlin/com/traccar/traccar_client/BridgeModule.kt @@ -20,10 +20,25 @@ class BridgeModule : FlutterPlugin, MethodChannel.MethodCallHandler { methodChannel.setMethodCallHandler(this) eventChannel = EventChannel(binding.binaryMessenger, "com.traccar.client/location_updates") + eventChannel.setStreamHandler(object : EventChannel.StreamHandler { + override fun onListen(arguments: Any?, events: EventChannel.EventSink?) { + eventSink = events + } + + override fun onCancel(arguments: Any?) { + eventSink = null + } + }) } override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) { methodChannel.setMethodCallHandler(null) + eventChannel.setStreamHandler(null) + eventSink = null + } + + companion object { + var eventSink: EventChannel.EventSink? = null } override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) { diff --git a/android/app/src/main/kotlin/com/traccar/traccar_client/service/LocationTrackingService.kt b/android/app/src/main/kotlin/com/traccar/traccar_client/service/LocationTrackingService.kt index 048ec12..9855d3f 100644 --- a/android/app/src/main/kotlin/com/traccar/traccar_client/service/LocationTrackingService.kt +++ b/android/app/src/main/kotlin/com/traccar/traccar_client/service/LocationTrackingService.kt @@ -13,6 +13,7 @@ import android.os.Build import android.os.IBinder import android.os.PowerManager import androidx.core.app.NotificationCompat +import com.traccar.traccar_client.BridgeModule import com.traccar.traccar_client.MainActivity import com.traccar.traccar_client.R import com.traccar.traccar_client.location.DistanceFilterProcessor @@ -165,6 +166,16 @@ class LocationTrackingService : Service() { updateNotification(location) + BridgeModule.eventSink?.success(mapOf( + "latitude" to location.latitude, + "longitude" to location.longitude, + "accuracy" to if (location.hasAccuracy()) location.accuracy else null, + "speed" to if (location.hasSpeed()) location.speed else null, + "heading" to if (location.hasBearing()) location.bearing else null, + "altitude" to if (location.hasAltitude()) location.altitude else null, + "timestamp" to location.time + )) + if (isNetworkAvailable) { sendLocationToServer(traccarLocation) } else {