|
4 | 4 |
|
5 | 5 | package io.flutter.plugins.firebase.database |
6 | 6 |
|
7 | | -import android.util.Log |
8 | 7 | import androidx.annotation.NonNull |
9 | 8 | import com.google.android.gms.tasks.Task |
10 | 9 | import com.google.android.gms.tasks.TaskCompletionSource |
@@ -485,7 +484,7 @@ class FirebaseDatabasePlugin : |
485 | 484 | } |
486 | 485 |
|
487 | 486 | private fun removeEventStreamHandlers() { |
488 | | - for ((eventChannel, streamHandler) in streamHandlers) { |
| 487 | + for ((eventChannel, streamHandler) in streamHandlers.toMap()) { |
489 | 488 | streamHandler?.onCancel(null) |
490 | 489 | eventChannel.setStreamHandler(null) |
491 | 490 | } |
@@ -851,20 +850,21 @@ class FirebaseDatabasePlugin : |
851 | 850 |
|
852 | 851 | override fun queryObserve(app: DatabasePigeonFirebaseApp, request: QueryRequest, callback: (KotlinResult<String>) -> Unit) { |
853 | 852 | try { |
854 | | - Log.d("FirebaseDatabase", "🔍 Kotlin: Setting up query observe for path=${request.path}") |
855 | 853 | val database = getDatabaseFromPigeonApp(app) |
856 | 854 | val reference = database.getReference(request.path) |
857 | 855 | val query = queryFromModifiers(reference, request.modifiers) |
858 | 856 |
|
859 | 857 | // Generate a unique channel name |
860 | | - val channelName = "firebase_database_query_${System.currentTimeMillis()}_${request.path.hashCode()}" |
| 858 | + val channelName = |
| 859 | + synchronized(this) { "firebase_database_query_${listenerCount++}" } |
861 | 860 |
|
862 | 861 | // Set up the event channel |
863 | 862 | val eventChannel = EventChannel(messenger, channelName) |
864 | 863 | val streamHandler = EventStreamHandler(query, object : OnDispose { |
865 | 864 | override fun run() { |
866 | 865 | // Clean up when the stream is disposed |
867 | | - eventChannel.setStreamHandler(null) |
| 866 | + eventChannel.setStreamHandler(null) |
| 867 | + streamHandlers.remove(eventChannel) |
868 | 868 | } |
869 | 869 | }) |
870 | 870 | eventChannel.setStreamHandler(streamHandler) |
|
0 commit comments