diff --git a/fml/platform/ohos/napi_util.cc b/fml/platform/ohos/napi_util.cc index e08e22f642bcbb0d4ddada0698eaeb44671ee165..e0439f192bca7d7e067c1b3b5ee447e16a8428e7 100644 --- a/fml/platform/ohos/napi_util.cc +++ b/fml/platform/ohos/napi_util.cc @@ -220,6 +220,9 @@ napi_value CreateArrayBuffer(napi_env env, void* inputData, size_t dataSize) { void* data = nullptr; napi_value arrayBuffer = nullptr; napi_value result = nullptr; + if (inputData == nullptr) { + return nullptr; + } napi_status status = napi_create_arraybuffer(env, dataSize, &data, &arrayBuffer); if (status) { diff --git a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/common/StandardMessageCodec.ets b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/common/StandardMessageCodec.ets index 8650cfe643a400cfba7dd4b99b505f151fa82bd7..0f12280e43523bbcc7f6b427d0bbb898cdf9973b 100644 --- a/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/common/StandardMessageCodec.ets +++ b/shell/platform/ohos/flutter_embedding/flutter/src/main/ets/plugin/common/StandardMessageCodec.ets @@ -65,15 +65,15 @@ export default class StandardMessageCodec implements MessageCodec { static INSTANCE = new StandardMessageCodec(); encodeMessage(message: ESObject): ArrayBuffer { - if (message == null) { - return StringUtils.stringToArrayBuffer(""); - } const stream = ByteBuffer.from(new ArrayBuffer(1024)) this.writeValue(stream, message); return stream.buffer } decodeMessage(message: ArrayBuffer): ESObject { + if (message == null) { + return null + } const buffer = ByteBuffer.from(message) return this.readValue(buffer) } diff --git a/shell/platform/ohos/napi/platform_view_ohos_napi.cpp b/shell/platform/ohos/napi/platform_view_ohos_napi.cpp index 61fc94fb214913f81fd2f14db1ad07e270a1f282..b4bbe98c3c9d5836706372aa7b3c91e222a1b38c 100644 --- a/shell/platform/ohos/napi/platform_view_ohos_napi.cpp +++ b/shell/platform/ohos/napi/platform_view_ohos_napi.cpp @@ -287,16 +287,15 @@ void PlatformViewOHOSNapi::FlutterViewHandlePlatformMessage( return; } - if (message->data().GetSize() > 0) { - callbackParam[1] = fml::napi::CreateArrayBuffer( - env_, (void*)message->data().GetMapping(), message->data().GetSize()); - - status = napi_create_int64(env_, reponse_id, &callbackParam[2]); - if (status != napi_ok) { - FML_DLOG(ERROR) << "napi_create_int64 err " << status; - return; - } + callbackParam[1] = fml::napi::CreateArrayBuffer( + env_, (void*)message->data().GetMapping(), message->data().GetSize()); + status = napi_create_int64(env_, reponse_id, &callbackParam[2]); + if (status != napi_ok) { + FML_DLOG(ERROR) << "napi_create_int64 err " << status; + return; + } + if (message->hasData()) { fml::MallocMapping mapping = message->releaseData(); char* mapData = (char*)mapping.Release(); status = napi_create_string_utf8(env_, mapData, strlen(mapData), @@ -309,12 +308,14 @@ void PlatformViewOHOSNapi::FlutterViewHandlePlatformMessage( if (mapData) { delete mapData; } + } else { + callbackParam[3] = nullptr; + } - status = fml::napi::InvokeJsMethod( - env_, ref_napi_obj_, "handlePlatformMessage", 4, callbackParam); - if (status != napi_ok) { - FML_DLOG(ERROR) << "InvokeJsMethod fail "; - } + status = fml::napi::InvokeJsMethod(env_, ref_napi_obj_, + "handlePlatformMessage", 4, callbackParam); + if (status != napi_ok) { + FML_DLOG(ERROR) << "InvokeJsMethod fail "; } }