Skip to content

Commit 96e2afb

Browse files
committed
chore: android fix
1 parent d642ac8 commit 96e2afb

File tree

1 file changed

+67
-56
lines changed
  • packages/firebase_database/firebase_database/android/src/main/kotlin/io/flutter/plugins/firebase/database

1 file changed

+67
-56
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
/*
2-
* Copyright 2022, the Chromium project authors. Please see the AUTHORS file
3-
* for details. All rights reserved. Use of this source code is governed by a
4-
* BSD-style license that can be found in the LICENSE file.
5-
*/
6-
71
package io.flutter.plugins.firebase.database
82

93
import android.util.Log
@@ -17,67 +11,84 @@ import com.google.firebase.database.MutableData
1711
import com.google.firebase.database.Transaction
1812
import com.google.firebase.database.Transaction.Handler
1913
import io.flutter.plugin.common.MethodChannel
20-
import java.util.*
2114

2215
class TransactionHandler @JvmOverloads constructor(
23-
@NonNull private val channel: MethodChannel,
24-
private val transactionKey: Int
16+
@NonNull private val channel: MethodChannel,
17+
private val transactionKey: Int
2518
) : Handler {
26-
27-
private val transactionCompletionSource = TaskCompletionSource<Map<String, Any?>>()
2819

29-
fun getTask(): Task<Map<String, Any?>> {
30-
return transactionCompletionSource.task
20+
private val transactionCompletionSource = TaskCompletionSource<Map<String, Any?>>()
21+
22+
fun getTask(): Task<Map<String, Any?>> {
23+
return transactionCompletionSource.task
24+
}
25+
26+
@NonNull
27+
override fun doTransaction(@NonNull currentData: MutableData): Transaction.Result {
28+
val snapshotMap = mutableMapOf<String, Any?>().apply {
29+
put(Constants.KEY, currentData.key ?: "")
30+
put(Constants.VALUE, currentData.value)
3131
}
3232

33-
@NonNull
34-
override fun doTransaction(@NonNull currentData: MutableData): Transaction.Result {
35-
val snapshotMap = mutableMapOf<String, Any?>()
36-
val transactionArgs = mutableMapOf<String, Any?>()
33+
val transactionArgs = mutableMapOf<String, Any?>().apply {
34+
put(Constants.SNAPSHOT, snapshotMap)
35+
put(Constants.TRANSACTION_KEY, transactionKey)
36+
}
3737

38-
snapshotMap[Constants.KEY] = currentData.key ?: ""
39-
snapshotMap[Constants.VALUE] = currentData.value
38+
return try {
39+
val executor = TransactionExecutor(channel)
40+
val updatedData: Any? = executor.execute(transactionArgs)
4041

41-
transactionArgs[Constants.SNAPSHOT] = snapshotMap
42-
transactionArgs[Constants.TRANSACTION_KEY] = transactionKey
42+
@Suppress("UNCHECKED_CAST")
43+
val transactionHandlerResult: Map<String, Any?> = when (updatedData) {
44+
is Map<*, *> -> updatedData as Map<String, Any?>
45+
null -> emptyMap()
46+
else -> {
47+
Log.e("firebase_database", "Unexpected transaction result type: ${updatedData::class.java}")
48+
emptyMap()
49+
}
50+
}
51+
52+
val aborted: Boolean = (transactionHandlerResult["aborted"] as? Boolean) ?: false
53+
val exception: Boolean = (transactionHandlerResult["exception"] as? Boolean) ?: false
4354

44-
return try {
45-
val executor = TransactionExecutor(channel)
46-
val updatedData = executor.execute(transactionArgs)
47-
@Suppress("UNCHECKED_CAST")
48-
val transactionHandlerResult = updatedData as Map<String, Any?>
49-
val aborted = transactionHandlerResult["aborted"] as Boolean
50-
val exception = transactionHandlerResult["exception"] as Boolean
51-
52-
if (aborted || exception) {
53-
Transaction.abort()
54-
} else {
55-
currentData.value = transactionHandlerResult["value"]
56-
Transaction.success(currentData)
57-
}
58-
} catch (e: Exception) {
59-
Log.e("firebase_database", "An unexpected exception occurred for a transaction.", e)
60-
Transaction.abort()
55+
if (aborted || exception) {
56+
Transaction.abort()
57+
} else {
58+
if (transactionHandlerResult.containsKey("value")) {
59+
currentData.value = transactionHandlerResult["value"]
6160
}
61+
Transaction.success(currentData)
62+
}
63+
} catch (e: Exception) {
64+
Log.e("firebase_database", "An unexpected exception occurred for a transaction.", e)
65+
Transaction.abort()
6266
}
67+
}
6368

64-
override fun onComplete(
65-
@Nullable error: DatabaseError?,
66-
committed: Boolean,
67-
@Nullable currentData: DataSnapshot?
68-
) {
69-
when {
70-
error != null -> {
71-
transactionCompletionSource.setException(
72-
FlutterFirebaseDatabaseException.fromDatabaseError(error)
73-
)
74-
}
75-
currentData != null -> {
76-
val payload = FlutterDataSnapshotPayload(currentData)
77-
val additionalParams = mutableMapOf<String, Any?>()
78-
additionalParams[Constants.COMMITTED] = committed
79-
transactionCompletionSource.setResult(payload.withAdditionalParams(additionalParams).toMap())
80-
}
81-
}
69+
override fun onComplete(
70+
@Nullable error: DatabaseError?,
71+
committed: Boolean,
72+
@Nullable currentData: DataSnapshot?
73+
) {
74+
when {
75+
error != null -> {
76+
transactionCompletionSource.setException(
77+
FlutterFirebaseDatabaseException.fromDatabaseError(error)
78+
)
79+
}
80+
currentData != null -> {
81+
val payload = FlutterDataSnapshotPayload(currentData)
82+
val additionalParams: MutableMap<String, Any> = mutableMapOf(
83+
Constants.COMMITTED to committed
84+
)
85+
transactionCompletionSource.setResult(
86+
payload.withAdditionalParams(additionalParams).toMap()
87+
)
88+
}
89+
else -> {
90+
transactionCompletionSource.setResult(emptyMap())
91+
}
8292
}
93+
}
8394
}

0 commit comments

Comments
 (0)