React Native - 本机模块 - 双参数不可为空(Bridge、Kotlin)

问题描述 投票:0回答:1

我正在尝试使用 Kotlin 创建一个 React Native Native 模块。我想使用可选参数,但是当我使用

Double?
时应用程序崩溃了。

示例:

反应本机:

const {add} = NativeModules.MyModule;
add();  // param not set

Kotlin 与

String?
一起工作

fun add(data: String?) {}

Kotlin 出现

Double?
崩溃

fun add(data: Double?) {}

崩溃:

com.facebook.react.bridge.NativeArgumentsParseException: Attempt to invoke virtual method 'double java.lang.Double.doubleValue()' on a null object reference (constructing arguments for MyModule.add at argument index 0)

虽然 Kotlin 支持可空的

Double
?
,但 React Native Bridge 似乎错误地尝试使用
doubleValue()
函数来转换它。该函数不处理空值。

作为解决方法,我可以使用

ReadableMap
并将所有内容放入其中,效果很好。但是,我很困惑为什么支持可选
String
参数,但不支持可选
Double
参数。这让我怀疑我是否做错了什么。

编辑:使用 React Native 73.6 和 75.2(最新)进行测试

android react-native kotlin null double
1个回答
0
投票

使用旧架构的 React Native 和 NativeModules 0.73 确实允许添加额外的可空性的类型引用。

像 Double 这样的原语是什么意思? (而不是 Double)不要通过桥完美转换。

  • 由于 Double 已经被认为可以为空,我认为这种语法会混淆解析器,然后抛出错误。

参考 here NativeModules 参数类型是类型。其中大多数都非常严格,并且不能很好地考虑可空性。

TurboModules 和 Fabric 可以做到这一点。强烈建议至少升级到最新的 React-Native 0.74,以充分受益。

© www.soinside.com 2019 - 2024. All rights reserved.