【问题标题】:I have a question about using Webview in flutter我有一个关于在颤振中使用 Webview 的问题
【发布时间】:2020-11-24 06:55:11
【问题描述】:

您好,我在 Flutter 中链接 webview 时遇到问题,所以我想问一个问题。

首先webview连接正常。但是,当我单击 web 视图中的另一个超链接时,应用程序本身就会终止。

在这种情况下,我还有什么需要处理的吗?

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key}) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  WebViewController _controller;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: WebView(
          initialUrl: 'https://www.notion.so/noteasy/915417f1fd964d1f92ad3bb6429b908a',
          javascriptMode: JavascriptMode.unrestricted,
        ),
      ),
    );
  }
}

这是当我按下超链接并被强制终止时出现的日志。

D/EGL_emulation(28572): eglMakeCurrent: 0xeaff8800: ver 2 0 (tinfo 0xdfa52190)
D/eglCodecCommon(28572): setVertexArrayObject: set vao to 0 (0) 1 2
W/TextClassifierService(28572): Package or service not found in package com.google.android.as for user 0
E/InputMethodManager(28572): b/117267690: Failed to get fallback IMM with expected displayId=14 actual IMM#displayId=0 view=io.flutter.plugins.webviewflutter.InputAwareWebView{2e377eb VFEDHVC.. .F...... 0,0-1080,1731}
D/eglCodecCommon(28572): setVertexArrayObject: set vao to 2 (2) 0 0
D/AndroidRuntime(28572): Shutting down VM
E/AndroidRuntime(28572): FATAL EXCEPTION: main
E/AndroidRuntime(28572): Process: kr.noteasy.sheeps_app, PID: 28572
E/AndroidRuntime(28572): java.lang.NullPointerException: Attempt to read from field 'android.view.WindowManager$LayoutParams android.view.ViewRootImpl.mWindowAttributes' on a null object reference
E/AndroidRuntime(28572):    at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:1625)
E/AndroidRuntime(28572):    at android.view.inputmethod.InputMethodManager.checkFocus(InputMethodManager.java:1864)
E/AndroidRuntime(28572):    at android.view.inputmethod.InputMethodManager.isActive(InputMethodManager.java:1183)
E/AndroidRuntime(28572):    at io.flutter.plugins.webviewflutter.InputAwareWebView$1.run(InputAwareWebView.java:188)
E/AndroidRuntime(28572):    at android.os.Handler.handleCallback(Handler.java:883)
E/AndroidRuntime(28572):    at android.os.Handler.dispatchMessage(Handler.java:100)
E/AndroidRuntime(28572):    at android.os.Looper.loop(Looper.java:214)
E/AndroidRuntime(28572):    at android.app.ActivityThread.main(ActivityThread.java:7356)
E/AndroidRuntime(28572):    at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(28572):    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
E/AndroidRuntime(28572):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
I/Process (28572): Sending signal. PID: 28572 SIG: 9

【问题讨论】:

  • 尝试从 body@Daniel Park 中移除 SafeArea
  • 您可以发布日志吗?我的意思是当您单击超链接时,运行部分中会出现什么日志?
  • @FaiiziiAwan 我发布了一个日志。感谢您的检查!
  • @Assassin 不行……
  • 你在模拟器上运行它吗?并检查其他链接。我在notion.so/noteasy/915417f1fd964d1f92ad3bb6429b908a 网页中没有找到任何 hpyerlink。

标签: android flutter dart webview


【解决方案1】:

为您的 Android 平台添加 SurfaceAndroidWebview。

 @override
  void initState() {
    super.initState();
    if (Platform.isAndroid) WebView.platform = SurfaceAndroidWebView();
  }

【讨论】:

    【解决方案2】:

    升级到最新的稳定版并使用最新的webview_flutter 0.3.22+1 重试。它解决了我的问题。

    【讨论】:

    • 你是说通过'flutter upgrade'运行最新版本?
    • 是的,也尝试在 Gradle 文件中更改 WebView 库版本。
    猜你喜欢
    • 2021-08-08
    • 1970-01-01
    • 2021-12-16
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    相关资源
    最近更新 更多