在 Android 和 ios 上从后台恢复应用程序后,inappwebview 上出现白屏?

问题描述 投票:0回答:1

当我关闭应用程序大约一分钟,然后在恢复之前将其移至后台时,InAppWebView 小部件被白色覆盖层覆盖,或者只是不在屏幕上显示 Web 内容。我仍然可以与应用程序暂停之前加载的页面进行交互,并且我可以听到网站上播放的声音效果,因此它在某种程度上肯定仍然处于活动状态。我只是对如何在恢复应用程序时让它实际显示页面感到困惑。当我重新打开暂停的应用程序时,调试控制台没有显示任何异常;它与 InAppWebView 实际可见时的输出完全相同。

我尝试在我的应用程序中实现 InAppWebView 的基本实现,使用不同的 URL,运行 flutter clean,运行 flutter pub Upgrade,运行 flutter pub downgrade,但我仍然遇到问题。这是该页面的代码。

class CustomWebView extends StatefulWidget {
  final String url;

  CustomWebView({required this.url});

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

class _CustomWebViewState extends State<CustomWebView>
    with SingleTickerProviderStateMixin, WidgetsBindingObserver {
  bool _isLoading = true; // Initially, webview is loading
  late InAppWebViewController webcontroller;

  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return InAppWebView(
      key: Key('webview'),
      initialOptions: InAppWebViewGroupOptions(
        crossPlatform: InAppWebViewOptions(
          transparentBackground: true,
          useShouldOverrideUrlLoading: true,
          supportZoom: true,
        ),
        android: AndroidInAppWebViewOptions(
          builtInZoomControls: true,
          loadWithOverviewMode: true,
          useWideViewPort: true,
        ),
        ios: IOSInAppWebViewOptions(
          disableInputAccessoryView: true,
          allowsInlineMediaPlayback: true,
        ),
      ),
      initialUrlRequest: URLRequest(url: Uri.parse(widget.url)),
      shouldOverrideUrlLoading: (controller, navigationAction) async {
        var uri = navigationAction.request.url!;
        if (uri.toString().contains('logout')) {
          logOut(context);
          return NavigationActionPolicy.CANCEL;
        }
        if (uri.toString().contains('whatsapp')) {
          var shareText = await getTextParam(uri.toString());
          Share.share(shareText!);
          return NavigationActionPolicy.CANCEL;
        }
        if (uri.toString().contains('?process_s=3')) {
          var status = await Permission.storage.status;
          if (!status.isGranted) {
            status = await Permission.storage.request();
          }
          if (status.isGranted) {
            Navigator.push(
                context,
                MaterialPageRoute(
                    builder: (context) => GenerateQRPage(
                          url: '',
                        )));
          }
          return NavigationActionPolicy.CANCEL;
        }

        return NavigationActionPolicy.ALLOW;
      },
      onWebViewCreated: (InAppWebViewController controller) {
        webcontroller = controller;
      },
      onLoadStop: (controller, url) async {},
    );
  }
}
android ios flutter dart webview
1个回答
0
投票

  1. 您是否尝试禁用硬件加速?
    这就是你可以做到的:
    android:hardwareAccelerated = false
  2. 你检查过 webview 生命周期吗?
  3. 我还看到你一直在使用很多已弃用的函数。
© www.soinside.com 2019 - 2024. All rights reserved.