我有一個flutter需要webview在 Android/Ios 版本和 Web 版本中使用的應用程式。
基本上要做到這一點,我們需要一個代碼來分隔每個平臺的呼叫,這就是我的做法:
if (kIsWeb) {
WebView.platform = WebWebViewPlatform();
await Firebase.initializeApp(
options: const FirebaseOptions(
apiKey: "AIzaSyDB77Tq2JnRJ5byugeU8_C_xEoPgzJ43ys",
appId: "1:710036970741:web:22ccb9edb43f84b65cf9bc",
messagingSenderId: "710036970741",
projectId: "water-maps-152c9",
),
);
} else {
if (Platform.isIOS) {
await Firebase.initializeApp(
options: const FirebaseOptions(
apiKey: "AIzaSyBtYelRUmnhxzj1DwOHMI9gaIhGwLB4ts0",
appId: "1:710036970741:ios:d4692b04704ccdcc5cf9bc",
messagingSenderId: "710036970741",
projectId: "water-maps-152c9"));
WebView.platform = AndroidWebView();
} else {
await Firebase.initializeApp();
WebView.platform = AndroidWebView();
}
}
問題是當它在特定平臺上作為 android 運行時,它無法匯入 web 包的 webview,如果我沒有匯入它,我會收到not defined錯誤WebView.platform = WebWebViewPlatform();
所以我試影像這樣匯入它:
import 'package:webview_flutter/webview_flutter.dart' if (dart.library.html) 'package:webview_flutter_web/webview_flutter_web.dart';
但仍面臨“未定義”錯誤,如圖所示:

另外,當我嘗試將兩者都匯入時:
import 'package:webview_flutter/webview_flutter.dart' ;
import 'package:webview_flutter_web/webview_flutter_web.dart';
當我嘗試在 android 上運行應用程式時,它給了我這個錯誤
../src/flutter/.pub-cache/hosted/pub.dartlang.org/webview_flutter_web-0.1.0 4/lib/webview_flutter_web.dart:70:9: Error: Type 'IFrameElement' not found.
final IFrameElement _element;
^^^^^^^^^^^^^
../src/flutter/.pub-cache/hosted/pub.dartlang.org/webview_flutter_web-0.1.0 4/lib/webview_flutter_web.dart:274:10: Error: Type 'HttpRequest' not found.
Future<HttpRequest> request(String url,
^^^^^^^^^^^
../src/flutter/.pub-cache/hosted/pub.dartlang.org/webview_flutter_web-0.1.0 4/lib/webview_flutter_web.dart:281:21: Error: Type 'ProgressEvent' not found.
void Function(ProgressEvent e)? onProgress}) {
^^^^^^^^^^^^^
../src/flutter/packages/flutter_web_plugins/lib/src/navigation/js_url_strategy.dart:79:48: Error: Type 'html.EventListener' not found.
external ui.VoidCallback addPopStateListener(html.EventListener fn);
^^^^^^^^^^^^^^^^^^
../src/flutter/packages/flutter_web_plugins/lib/src/navigation/url_strategy.dart:193:3: Error: Type 'html.Location' not found.
html.Location get _location => html.window.location;
^^^^^^^^^^^^^
../src/flutter/packages/flutter_web_plugins/lib/src/navigation/url_strategy.dart:195:3: Error: Type 'html.History' not found.
html.History get _history => html.window.history;
^^^^^^^^^^^^
../src/flutter/packages/flutter_web_plugins/lib/src/navigation/url_strategy.dart:198:28: Error: Type 'html.EventListener' not found.
void addPopStateListener(html.EventListener fn) {
^^^^^^^^^^^^^^^^^^
../src/flutter/packages/flutter_web_plugins/lib/src/navigation/url_strategy.dart:203:31: Error: Type 'html.EventListener' not found.
void removePopStateListener(html.EventListener fn) {
^^^^^^^^^^^^^^^^^^
../src/flutter/packages/flutter_web_plugins/lib/src/navigation/utils.dart:7:7: Error: Type 'AnchorElement' not found.
final AnchorElement _urlParsingNode = AnchorElement();
^^^^^^^^^^^^^
../src/flutter/packages/flutter_web_plugins/lib/src/navigation/utils.dart:20:7: Error: Type 'Element' not found.
final Element? _baseElement = document.querySelector('base');
^^^^^^^
../src/flutter/.pub-cache/hosted/pub.dartlang.org/webview_flutter_web-0.1.0 4/lib/shims/dart_ui_fake.dart:19:26: Error: Type 'html.Element' not found.
String viewTypeId, html.Element Function(int viewId) viewFactory) {
^^^^^^^^^^^^
../src/flutter/.pub-cache/hosted/pub.dartlang.org/webview_flutter_web-0.1.0 4/lib/webview_flutter_web.dart:23:25: Error: The method 'IFrameElement' isn't defined for the class 'WebWebViewPlatform'.
- 'WebWebViewPlatform' is from 'package:webview_flutter_web/webview_flutter_web.dart' ('../src/flutter/.pub-cache/hosted/pub.dartlang.org/webview_flutter_web-0.1.0 4/lib/webview_flutter_web.dart').
uj5u.com熱心網友回復:
來自官方檔案的解決方案:
register_web_webview.dart
void registerWebViewWebImplementation() {
WebView.platform = WebWebViewPlatform();
await Firebase.initializeApp(
options: const FirebaseOptions(
apiKey: "AIzaSyDB77Tq2JnRJ5byugeU8_C_xEoPgzJ43ys",
appId: "1:710036970741:web:22ccb9edb43f84b65cf9bc",
messagingSenderId: "710036970741",
projectId: "water-maps-152c9",
),
);
}
register_native_webview.dart
void registerWebViewWebImplementation() {
if (Platform.isIOS) {
await Firebase.initializeApp(
options: const FirebaseOptions(
apiKey: "AIzaSyBtYelRUmnhxzj1DwOHMI9gaIhGwLB4ts0",
appId: "1:710036970741:ios:d4692b04704ccdcc5cf9bc",
messagingSenderId: "710036970741",
projectId: "water-maps-152c9"));
WebView.platform = AndroidWebView();
} else {
await Firebase.initializeApp();
WebView.platform = AndroidWebView();
}
}
主要.dart
import 'register_native_webview.dart'
if (dart.library.html) 'register_web_webview.dart';
main() {
registerWebViewWebImplementation();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/529298.html
上一篇:我的服裝小部件未顯示在列中
下一篇:單擊串列時更改按鈕文本?
