我正在尝试使用 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(最新)进行测试
使用旧架构的 React Native 和 NativeModules 0.73 确实允许添加额外的可空性的类型引用。
像 Double 这样的原语是什么意思? (而不是 Double)不要通过桥完美转换。
参考 here NativeModules 参数类型是类型。其中大多数都非常严格,并且不能很好地考虑可空性。
TurboModules 和 Fabric 可以做到这一点。强烈建议至少升级到最新的 React-Native 0.74,以充分受益。