屏幕弹出后弹出Flutter WebviewScaffold

时间:2020-07-09 00:46:59

标签: flutter dart

我正在使用WebviewScaffold软件包中的抖动flutter_webview_plugin的非常简单的实现。

当我弹出嵌入Webview支架的屏幕时,首先弹出屏幕,然后Webview在屏幕上停留1/2秒,然后弹出。我是不是做错什么了?

class _EYWebviewPageState extends State<EYWebviewPage> {
  @override
  void initState() {
    super.initState();
  }

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

  @override
  Widget build(BuildContext context) {
    return WebviewScaffold(
      appBar: CupertinoNavigationBar(
        leading: CupertinoButton(
          padding: EdgeInsets.zero,
          child: Image.asset('assets/img/navigation/common/close-icon.png'),
          onPressed: () => Navigator.of(context).pop(true),
        ),
      ),
      url: widget.url,
      clearCache: true,
      appCacheEnabled: true,
      withJavascript: true,
      withLocalStorage: true,
      hidden: true,
    );
  }
}

2 个答案:

答案 0 :(得分:1)

CupertinoNavigationBar需要CupertinoPageScaffold。但是WebviewScaffold使用Scaffold。这就是为什么您要观察这种行为。

您可以使用AppBar代替CupertinoNavigationBar

答案 1 :(得分:0)

解决方案是合并WillPopScope以便在弹出屏幕时关闭插件。另外,使用maybePop() instead of pop()

这是完整版本:

Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () async {
        await FlutterWebviewPlugin().close(); // Close the plugin so that it doesn't overlay anymore
        return true;
      },
      child: WebviewScaffold(
        appBar: CupertinoNavigationBar(
          leading: CupertinoButton(
            padding: EdgeInsets.zero,
            child: Image.asset('assets/img/navigation/common/close-icon.png'),
            onPressed: () => Navigator.maybePop(context),
          ),
        ),
        url: widget.url,
      ),
    );
  }
}