flutter webview加载时显示进度

最近在学习flutter,在webview加载页面时,如果网速不好的话,就会一直白屏,用户看到这个场景可能会比较迷惑,因此我们得加个进度条:

class _BlogState extends State<Blog> {
  final Completer<WebViewController> _controller =
      Completer<WebViewController>();
  bool isLoading = true;  // 设置状态

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text(homeTitle),
        actions: <Widget>[
          BlogMenu(_controller.future),
        ],
      ),
      body: Stack(
        children: [
          WebView(
            initialUrl: homePage,
            javascriptMode: JavascriptMode.unrestricted,
            onWebViewCreated: (WebViewController webViewController) {
              _controller.complete(webViewController);
            },
            navigationDelegate: (NavigationRequest request) {
              var url = request.url;
              print("visit $url");
              setState(() {
                isLoading = true; // 开始访问页面,更新状态
              });

              return NavigationDecision.navigate;
            },
            onPageFinished: (String url) {
              setState(() {
                isLoading = false; // 页面加载完成,更新状态
              });
            },
          ),
          isLoading
              ? Container(
                  child: Center(
                    child: CircularProgressIndicator(),
                  ),
                )
              : Container(),
        ],
      ),
      floatingActionButton: getFloatingButton(),
    );
  }

我把 WebView 放在一个 StatefulWidget 里,通过一个 bool isLoading 来指示当前是否正在加载页面,当开始访问链接时, 将 isLoading 设置为 true,访问完成时,设置为 false。使用一个 StackWebViewCircularProgressIndicator 放在一起,当 isLoadingtrue 时,显示 CircularProgressIndicator,否则显示一个空的 Container,这样就可以 实现加载时,有一个圈圈在转,而加载完成时,圈圈消失的效果了。


更多文章
  • Golang中的并发控制
  • 善用闭包(closure)让Go代码更优雅
  • Golang的可选参数实践
  • FreeBSD ipfw使用教程
  • Golang expvar库源码阅读
  • Golang SQL生成库 Squirrel 教程及源码阅读
  • Golang validator使用教程
  • 使用Redis的Stream模块实现群聊功能
  • 价值编程与职业发展
  • 解决k8s cron无法读取环境变量的问题
  • 应用内购的坑
  • 两种常见的访问控制模型
  • gunicorn max-requests 选项的作用
  • Redis使用中的几点注意事项
  • 给你的代码跑个分?pylint使用教程