代码之家  ›  专栏  ›  技术社区  ›  barmin

React Native:组件“NativeCamera”的视图配置getter回调必须是一个函数(收到“undefined”)

  •  0
  • barmin  · 技术社区  · 9 月前

    我试图在Android上加载原生相机组件,但总是收到标题错误。

    此组件位于本地包中,通过包json链接

        "react-native-native-camera": "file:lib/react-native-native-camera",
    

    我可以在包列表中看到我的包,当我在RN代码组件中登录UIManager时,它就在那里。

    以下是组件代码:

    package com.NativeCamera
    
    import android.util.Log
    import com.facebook.react.bridge.ReadableArray
    import com.facebook.react.bridge.ReadableMap
    import com.facebook.react.common.MapBuilder
    import com.facebook.react.uimanager.SimpleViewManager
    import com.facebook.react.uimanager.ThemedReactContext
    import com.facebook.react.uimanager.annotations.ReactProp
    
    class NativeCameraManager : SimpleViewManager<NativeCameraView>() {
    
        companion object {
            const val REACT_CLASS = "SmNativeCamera"
        }
    
        enum class Events(private val mName: String) {
            EVENT_CAMERA_READY("onCameraReady"),
            EVENT_ON_MOUNT_ERROR("onMountError"),
            EVENT_ON_RECORDING_START("onRecordingStart"),
            EVENT_ON_RECORDING_END("onRecordingEnd");
    
            override fun toString(): String {
                return mName
            }
        }
    
        override fun getName(): String {
            Log.d("NativeCameraView", "getName() called")
    
            return REACT_CLASS
        }
    
        override fun createViewInstance(c: ThemedReactContext): NativeCameraView {
            Log.d("NativeCameraView", "createViewInstance() called")
    
            return NativeCameraView(c)
        }
    
        override fun getCommandsMap(): Map<String, Int>? {
            return MapBuilder.of(
                    "startRecording",
                    COMMAND_START_RECORDING,
                    "stopRecording",
                    COMMAND_STOP_RECORDING,
                    "lockFocusAndExposure",
                    COMMAND_LOCK_FOCUS_AND_EXPOSURE,
                    "startBeep",
                    COMMAND_START_BEEP,
                    "changeFacing",
                    COMMAND_CHANGE_FACING
            )
        }
    
        override fun receiveCommand(view: NativeCameraView, commandId: Int, args: ReadableArray?) {
            when (commandId) {
                COMMAND_START_RECORDING -> view.startRecording(args)
                COMMAND_STOP_RECORDING -> view.stopRecording()
               
            }
        }
    
    

    在logcat日志中,我只能看到getName()函数的日志

            Log.d("NativeCameraView", "getName() called")
    

    虽然

            Log.d("NativeCameraView", "createViewInstance() called")
    

    从未被召唤。

    有什么想法吗

    P.S.尝试了许多与重置缓存、gradlew清理等相关的事情

    在logcat日志中,我只能看到getName()函数的日志

    Log.d(“NativeCameraView”,“调用getName()”)
    

    虽然

    Log.d(“NativeCameraView”,“调用了createViewInstance()”)
    

    从未被召唤。

    有什么想法吗

    P.S.尝试了许多与重置缓存、gradlew清理等相关的事情

    0 回复  |  直到 9 月前