【问题标题】:How to show a spinner in flutter WebView while the content is been loaded加载内容时如何在颤动的WebView中显示微调器
【发布时间】:2021-01-21 16:45:31
【问题描述】:

我正在尝试在我的应用中使用 Flutter Web 视图。它正在工作,但是,我尝试启动的页面需要一些时间才能加载。因此,用户在显示内容之前会看到一个空白页面

我想一直显示微调器,直到显示页面内容

这是我尝试过的代码sn-p

 body: Stack(
        children: <Widget>[
          WebView(
            key: _key,
            initialUrl: widget.selectedUrl,
            javascriptMode: JavascriptMode.unrestricted,
            onPageFinished: (finish) {
              setState(() {
                isLoading = false;
              });
            },
          ),
          isLoading
              ? Center(
                  child: CircularProgressIndicator(),
                )
              : Stack(),
        ],
      ),

我看到了微调器,但它在显示内容之前就消失了。因此,大约有 5-8 秒的时间,用户会看到一个空的画布并且没有微调器

如何在屏幕上显示所有内容之前保持微调器?

谢谢

医生总结(要查看所有详细信息,请运行 flutter doctor -v): [✓] Flutter (Channel stable, 1.22.0, on Mac OS X 10.15.6 19G2021, locale en-US)

[✓] Android 工具链 - 为 Android 设备开发(Android SDK 版本 28.0.3) [✓] Xcode - 为 iOS 和 macOS 开发 (Xcode 12.0) [✓] Android Studio(3.6版) [✓] VS 代码(版本 1.49.2) [✓] 已连接设备(1 个可用)

• 未发现任何问题!

  • 更新。

我调用的 URL 在显示页面之前会进行一些额外的验证。我在代码中添加了一个计时器。

不确定这是否是正确的方法

 Future.delayed(const Duration(milliseconds: 9000), () {
                  setState(() {
                    isLoading = false;
                  });
                });

【问题讨论】:

    标签: flutter flutterwebviewplugin


    【解决方案1】:
    // before build method
    bool isLoading = true;
    
    // somewhere in stateful calss
     Stack(
                children: [
                  WebView(
                    navigationDelegate: (NavigationRequest request) {
                      if (request.url
                          .startsWith('https://books-by-weight.herokuapp.com')) {
                        Navigator.pop(context);
                        // print('blocking navigation to $request}');
                        return NavigationDecision.prevent;
                      }
                      // print('allowing navigation to $request');
                      return NavigationDecision.navigate;
                    },
                    initialUrl: url
                    javascriptMode: JavascriptMode.unrestricted,
                    onWebViewCreated: (WebViewController webViewController) {
                      _controller.complete(webViewController);
                    },
                    onPageFinished: (finish) {
                      setState(() {
                        isLoading = false;
                      });
                    },
                  ),
                  isLoading
                      ? Center(
                          child: Container(
                            height: 30,
                            width: 30,
                            child: CircularProgressIndicator(
                              backgroundColor: Colors.primaries[0],
                              strokeWidth: 3,
                            ),
                          ),
                        )
                      : Stack(),
                ],
              ),
    

    【讨论】:

    • 谢谢,我看到了微调器,但它会在显示内容前 4-5 秒停止。所以在用户看到内容之前你是一个空白屏幕
    猜你喜欢
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 2010-09-09
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多