Flutter - DEBUG 中的 Webview 正在工作,但在 RELEASE apk 上显示为空白,为啥?

Posted

技术标签:

【中文标题】Flutter - DEBUG 中的 Webview 正在工作,但在 RELEASE apk 上显示为空白,为啥?【英文标题】:Flutter - Webview in DEBUG is working but it's displaying blank on RELEASE apk, why?Flutter - DEBUG 中的 Webview 正在工作,但在 RELEASE apk 上显示为空白,为什么? 【发布时间】:2021-11-25 22:57:22 【问题描述】:

我正在使用这个 webviews 包处理颤振 https://pub.dev/packages/webview_flutter.

调试模式下的 webview 运行良好(由于 USB 不兼容,我使用模拟器无法在实际设备上使用调试)但它只显示灰色的空白屏幕。我也尝试过在 androidManifest.xml 中插入权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

代码如下:

class _WebViewHereClass extends State<WebViewHereClassState> 
  final String _url;
  bool isLoading=true;
  final _key = UniqueKey();
  _WebViewHereClass(this._url);

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      body: Center(
        child: Stack(
          alignment: Alignment.center,
          children: <Widget>[
            Flex(
              direction: Axis.vertical,
              children: [
                Expanded(
                    flex: 1,
                    child: WebView(
                      key: _key,
                      javascriptMode: JavascriptMode.unrestricted,
                      initialUrl: _url,
                      onPageFinished: (finish) 
                        setState(() 
                          isLoading = false;
                        );
                      ,
                    )
                ),
              ],
            ),
            isLoading ? const Center(
              child: CircularProgressIndicator(
                strokeWidth: 1,
              ),
            ) : Stack(),
          ],
        ),
      ),
    );
  

该页面应该在我单击上一页(主页)上的按钮后显示。

为什么不显示?

【问题讨论】:

【参考方案1】:

我认为您没有在 android/app/src/main/AndroidManifest.xml

中授予互联网权限

将此行添加到 android/app/src/main/AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />

关于不安全 http 的更多信息,您可以查看 this

<uses-permission android:name="android.permission.INTERNET" /> //This line add
<application
    android:name="io.demo.app.test"
    android:label="ProjectName"
    android:usesCleartextTraffic="true" //This line add
    android:icon="@mipmap/ic_launcher">

【讨论】:

【参考方案2】:

您在void initState() 期间是否正确设置了WebView.platform = SurfaceAndroidWebView()

【讨论】:

没有,不过现在解决了,我只更新flutter和dependencies(因为这个issue一贴出来就有更新了),一切都很顺利... Geat 可能是之前的设想,因为 Flutter 和 Native 的依赖冲突。

以上是关于Flutter - DEBUG 中的 Webview 正在工作,但在 RELEASE apk 上显示为空白,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 flutter_webview_plugin 播放视频

Flutter给WebView设置Cookie(Session)

Flutter给WebView设置Cookie(Session)

Flutter APP 上架 APP Stroe--- Flutter产物是Debug 版被拒绝上传

Flutter给WebView设置Cookie(Session)

Flutter iOS混编 解决flutter在iOS14+ debug模式上无法运行的问题