From 2185a57d0e4e9d95d05b7a14c73e26c57ba583f2 Mon Sep 17 00:00:00 2001 From: wuzhiming Date: Wed, 13 Mar 2024 17:18:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20flutter=5Fwebview=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E8=83=8C=E6=99=AF=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lib/src/ohos_webview.dart | 10 +-- .../lib/src/ohos_webview.g.dart | 46 ++++++------- .../lib/src/ohos_webview_api_impls.dart | 9 +-- .../lib/src/ohos_webview_controller.dart | 2 +- .../webview_flutter/GeneratedOhosWebView.ets | 68 +++++++++---------- .../webview_flutter/OhosWebView.ets | 1 + .../WebSettingsHostApiImpl.ets | 7 ++ .../webview_flutter/WebViewHostApiImpl.ets | 10 +-- 8 files changed, 82 insertions(+), 71 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_ohos/lib/src/ohos_webview.dart b/packages/webview_flutter/webview_flutter_ohos/lib/src/ohos_webview.dart index e64086ba1..f20880340 100644 --- a/packages/webview_flutter/webview_flutter_ohos/lib/src/ohos_webview.dart +++ b/packages/webview_flutter/webview_flutter_ohos/lib/src/ohos_webview.dart @@ -443,11 +443,6 @@ class WebView extends OhosObject { return api.setWebChromeClientFromInstance(this, client); } - /// Sets the background color of this WebView. - Future setBackgroundColor(Color color) { - return api.setBackgroundColorFromInstance(this, color.value); - } - @override WebView copy() { return WebView.detached( @@ -597,6 +592,11 @@ class WebSettings extends OhosObject { return api.setSupportMultipleWindowsFromInstance(this, support); } + /// Sets the background color of this WebView. + Future setBackgroundColor(Color color) { + return api.setBackgroundColorFromInstance(this, color.value); + } + /// Tells the WebView to enable JavaScript execution. /// /// The default is false. diff --git a/packages/webview_flutter/webview_flutter_ohos/lib/src/ohos_webview.g.dart b/packages/webview_flutter/webview_flutter_ohos/lib/src/ohos_webview.g.dart index d79870103..f36866336 100644 --- a/packages/webview_flutter/webview_flutter_ohos/lib/src/ohos_webview.g.dart +++ b/packages/webview_flutter/webview_flutter_ohos/lib/src/ohos_webview.g.dart @@ -1013,29 +1013,6 @@ class WebViewHostApi { return; } } - - Future setBackgroundColor(int arg_instanceId, int arg_color) async { - final BasicMessageChannel channel = BasicMessageChannel( - 'dev.flutter.pigeon.webview_flutter_ohos.WebViewHostApi.setBackgroundColor', - codec, - binaryMessenger: _binaryMessenger); - final List? replyList = await channel - .send([arg_instanceId, arg_color]) as List?; - if (replyList == null) { - throw PlatformException( - code: 'channel-error', - message: 'Unable to establish connection on channel.', - ); - } else if (replyList.length > 1) { - throw PlatformException( - code: replyList[0]! as String, - message: replyList[1] as String?, - details: replyList[2], - ); - } else { - return; - } - } } /// Flutter API for `WebView`. @@ -1179,6 +1156,29 @@ class WebSettingsHostApi { } } + Future setBackgroundColor(int arg_instanceId, int arg_color) async { + final BasicMessageChannel channel = BasicMessageChannel( + 'dev.flutter.pigeon.webview_flutter_ohos.WebSettingsHostApi.setBackgroundColor', + codec, + binaryMessenger: _binaryMessenger); + final List? replyList = await channel + .send([arg_instanceId, arg_color]) as List?; + if (replyList == null) { + throw PlatformException( + code: 'channel-error', + message: 'Unable to establish connection on channel.', + ); + } else if (replyList.length > 1) { + throw PlatformException( + code: replyList[0]! as String, + message: replyList[1] as String?, + details: replyList[2], + ); + } else { + return; + } + } + Future setJavaScriptEnabled(int arg_instanceId, bool arg_flag) async { final BasicMessageChannel channel = BasicMessageChannel( 'dev.flutter.pigeon.webview_flutter_ohos.WebSettingsHostApi.setJavaScriptEnabled', diff --git a/packages/webview_flutter/webview_flutter_ohos/lib/src/ohos_webview_api_impls.dart b/packages/webview_flutter/webview_flutter_ohos/lib/src/ohos_webview_api_impls.dart index 8a8c53b79..1f5938711 100644 --- a/packages/webview_flutter/webview_flutter_ohos/lib/src/ohos_webview_api_impls.dart +++ b/packages/webview_flutter/webview_flutter_ohos/lib/src/ohos_webview_api_impls.dart @@ -370,10 +370,6 @@ class WebViewHostApiImpl extends WebViewHostApi { ); } - /// Helper method to convert instances ids to objects. - Future setBackgroundColorFromInstance(WebView instance, int color) { - return setBackgroundColor(instanceManager.getIdentifier(instance)!, color); - } } /// Flutter API implementation for [WebView]. @@ -450,6 +446,11 @@ class WebSettingsHostApiImpl extends WebSettingsHostApi { instanceManager.getIdentifier(instance)!, support); } + /// Helper method to convert instances ids to objects. + Future setBackgroundColorFromInstance(WebSettings instance, int color) { + return setBackgroundColor(instanceManager.getIdentifier(instance)!, color); + } + /// Helper method to convert instances ids to objects. Future setJavaScriptEnabledFromInstance( WebSettings instance, diff --git a/packages/webview_flutter/webview_flutter_ohos/lib/src/ohos_webview_controller.dart b/packages/webview_flutter/webview_flutter_ohos/lib/src/ohos_webview_controller.dart index 28278fe8b..af18a57ce 100644 --- a/packages/webview_flutter/webview_flutter_ohos/lib/src/ohos_webview_controller.dart +++ b/packages/webview_flutter/webview_flutter_ohos/lib/src/ohos_webview_controller.dart @@ -431,7 +431,7 @@ class OhosWebViewController extends PlatformWebViewController { @override Future setBackgroundColor(Color color) => - _webView.setBackgroundColor(color); + _webView.settings.setBackgroundColor(color); @override Future setJavaScriptMode(JavaScriptMode javaScriptMode) => diff --git a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/GeneratedOhosWebView.ets b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/GeneratedOhosWebView.ets index 9bf71bda0..345372a24 100644 --- a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/GeneratedOhosWebView.ets +++ b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/GeneratedOhosWebView.ets @@ -302,8 +302,6 @@ export abstract class WebViewHostApi { abstract setWebChromeClient(instanceId: number, clientInstanceId: number); - abstract setBackgroundColor(instanceId: number, color: number); - static getCodec(): MessageCodec { return WebViewHostApiCodec.INSTANCE; } @@ -1065,38 +1063,6 @@ export abstract class WebViewHostApi { channel.setMessageHandler(null); } } - { - const channel: BasicMessageChannel = - new BasicMessageChannel( - binaryMessenger, "dev.flutter.pigeon.webview_flutter_ohos.WebViewHostApi.setBackgroundColor", - WebViewHostApi.getCodec() - ); - if (api != null) { - channel.setMessageHandler( - { - onMessage: (message: ESObject, reply: Reply) => { - let wrapped: ArrayList = new ArrayList(); - const args: Array = message; - const instanceIdArg: number = args[0]; - const colorArg: number = args[1]; - try { - api.setBackgroundColor( - instanceIdArg, - colorArg - ); - wrapped.insert(null, 0); - } catch (err) { - const wrappedError: ArrayList = GeneratedOhosWebView.wrapError(err); - wrapped = wrappedError; - } - reply.reply(wrapped.convertToArray()); - } - } - ) - } else { - channel.setMessageHandler(null); - } - } } } @@ -1942,6 +1908,8 @@ export abstract class WebSettingsHostApi { abstract setSupportMultipleWindows(instanceId: number, support: boolean): void; + abstract setBackgroundColor(instanceId: number, color: number); + abstract setJavaScriptEnabled(instanceId: number, flag: boolean): void; abstract setUserAgentString(instanceId: number, userAgentString: string): void; @@ -2092,6 +2060,38 @@ export abstract class WebSettingsHostApi { channel.setMessageHandler(null); } } + { + const channel: BasicMessageChannel = + new BasicMessageChannel( + binaryMessenger, "dev.flutter.pigeon.webview_flutter_ohos.WebSettingsHostApi.setBackgroundColor", + WebSettingsHostApi.getCodec() + ); + if (api != null) { + channel.setMessageHandler( + { + onMessage: (message: ESObject, reply: Reply) => { + let wrapped: ArrayList = new ArrayList(); + const args: Array = message; + const instanceIdArg: number = args[0]; + const colorArg: number = args[1]; + try { + api.setBackgroundColor( + instanceIdArg, + colorArg + ); + wrapped.insert(null, 0); + } catch (err) { + const wrappedError: ArrayList = GeneratedOhosWebView.wrapError(err); + wrapped = wrappedError; + } + reply.reply(wrapped.convertToArray()); + } + } + ) + } else { + channel.setMessageHandler(null); + } + } { const channel: BasicMessageChannel = new BasicMessageChannel( diff --git a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/OhosWebView.ets b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/OhosWebView.ets index c38e9df9d..2581df140 100644 --- a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/OhosWebView.ets +++ b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/OhosWebView.ets @@ -30,6 +30,7 @@ export struct OhosWebView { src: DynamicUtils.getParams(this.params, "src"), controller: this.controller }) + .backgroundColor(DynamicUtils.getParams(this.params, "backgroundColor")) .onDownloadStart(DynamicUtils.getParams(this.params, "onDownloadStart")) .onPageBegin(DynamicUtils.getParams(this.params, "onPageBegin")) .onPageEnd(DynamicUtils.getParams(this.params, "onPageEnd")) diff --git a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebSettingsHostApiImpl.ets b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebSettingsHostApiImpl.ets index 34fc45bde..e0d1be617 100644 --- a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebSettingsHostApiImpl.ets +++ b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebSettingsHostApiImpl.ets @@ -24,6 +24,8 @@ export interface WebSettings { setSupportMultipleWindows(support: boolean); + setBackgroundColor(color: number); + setJavaScriptEnabled(flag: boolean); setUserAgentString(userAgentString: string); @@ -82,6 +84,11 @@ export class WebSettingsHostApiImpl extends WebSettingsHostApi { webSettings.setSupportMultipleWindows(support); } + setBackgroundColor(instanceId: number, color: number) { + const webSettings:WebSettings = this.instanceManager.getInstance(instanceId); + webSettings.setBackgroundColor(color); + } + setJavaScriptEnabled(instanceId: number, flag: boolean) { const webSettings:WebSettings = this.instanceManager.getInstance(instanceId); webSettings.setJavaScriptEnabled(flag); diff --git a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebViewHostApiImpl.ets b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebViewHostApiImpl.ets index 07fa1d459..085fc9052 100644 --- a/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebViewHostApiImpl.ets +++ b/packages/webview_flutter/webview_flutter_ohos/ohos/webview_flutter/src/main/ets/io.flutter.plugins/webview_flutter/WebViewHostApiImpl.ets @@ -248,10 +248,6 @@ export class WebViewHostApiImpl extends WebViewHostApi { webView.setWebChromeClient(this.instanceManager.getInstance(clientInstanceId)); } - setBackgroundColor(instanceId: number, color: number) { - //TODO:Web ground - } - getInstanceManager(): InstanceManager { return this.instanceManager; } @@ -484,6 +480,12 @@ class WebSettingsImpl implements WebSettings { DynamicUtils.setParams(this.params, "multiWindowAccess", support); } + setBackgroundColor(color: number) { + // number 无法实现透明度,所以转成 string + let colorStr = `#${color.toString(16).padStart(8, '0')}`; + DynamicUtils.setParams(this.params, "backgroundColor", colorStr); + } + setJavaScriptEnabled(flag: boolean) { DynamicUtils.setParams(this.params, "javaScriptAccess", flag); } -- Gitee