簡體   English   中英

如何在flutter中添加CircularProgressIndicator?

[英]How to add CircularProgressIndicator in flutter?

我現在在一頁中調用了三個 Web 服務,因為我只想顯示一個 CircularProgressIndicator。如何在 CircularProgressIndicator 顯示所有 UI 后打開屏幕時首先顯示 CircularProgressIndicator。

使用Future.wait合並三個期貨(Web 服務調用),然后在等待合並的Future完成時使用FutureBuilder顯示CircularProgressIndicator

像這樣試試,

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  String _data1;
  String _data2;
  String _data3;

  Future<void> _webCall;

  @override
  void initState() {
    _webCall = _callWebServices();
    super.initState();
  }

  Future<bool> _callWebServices() async {
    await Future.wait([_webService1(), _webService2(), _webService3()]);
    return true;
  }

  Future<void> _webService1() async {
    await Future.delayed(const Duration(seconds: 1)); //TODO: do webservice call `get` or `post`
    _data1 = "This is data1"; //TODO: save the data
  }

  Future<void> _webService2() async {
    await Future.delayed(const Duration(seconds: 5)); //TODO: do webservice call `get` or `post`
    _data2 = "This is data2"; //TODO: save the data
  }

  Future<void> _webService3() async {
    await Future.delayed(const Duration(seconds: 3)); //TODO: do webservice call `get` or `post`
    _data3 = "This is data3"; //TODO: save the data
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Demo"),
      ),
      body: FutureBuilder(
        future: _webCall,
        builder: (context, snapshot) {
          print(snapshot);
          if (snapshot.connectionState == ConnectionState.waiting)
            return _buildProgressIndicator();
          else if (snapshot.hasError)
            return _buildError();
          else
            return _buildBody();
        },
      ),
    );
  }

  Widget _buildProgressIndicator() {
    return Center(
      child: CircularProgressIndicator(),
    );
  }

  Widget _buildBody() {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text(_data1),
          Text(_data2),
          Text(_data3),
        ],
      ),
    );
  }

  Widget _buildError() {
    return Center(
      child: Text("Error while loading Web Services"),
    );
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM