如何在flutter中显示3秒钟的CircularProgressIndicator

时间:2020-04-25 08:06:57

标签: flutter dart load

是否可以使用Timer包装我的CircularProgressIndicator ...我想让我的CircularProgressIndicator显示3秒钟,但我不知道该怎么做...我已阅读的大部分资源都在包装一个由Timer内的CircularProgressIndicator组成..这是我的代码

Future getData() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    String dataIn = prefs.getString("clockin");
    return dataIn;
  }

Widget defaultClock() {
    return FutureBuilder(
      future: getData(),
      builder: (context, snap) {
        if (snap.hasData) {
          return Text(snap.data);
        } else {
          return CircularProgressIndicator();
        }
      },
    );
  }

3 个答案:

答案 0 :(得分:2)

您可以使用Future.delayed来做到这一点。

下面的代码解释得更清楚。

 String data;
  Future getData() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    String dataIn = prefs.getString("clockin") ?? 'default';
    return dataIn;
  }

  callme() async {
    await Future.delayed(Duration(seconds: 3));
    getData().then((value) => {
          setState(() {
            data = value;
          })
        });
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: data == null ? CircularProgressIndicator() : Text(data),
      ),
    );
  }

答案 1 :(得分:0)

  Timer _timer;
  int _start = 3;
  bool loading = true;

  void startTimer() {
    const oneSec = const Duration(seconds: 1);
    _timer = new Timer.periodic(
      oneSec,
      (Timer timer) => setState(
        () {
          if (_start < 1) {
            setState(() {
              loading = false;
            });
            timer.cancel();
          } else {
            _start = _start - 1;
          }
        },
      ),
    );
  }


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


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


Future getData() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    String dataIn = prefs.getString("clockin");
    return dataIn;
  }

Widget defaultClock() {
    return FutureBuilder(
      future: getData(),
      builder: (context, snap) {
        if (snap.hasData && loading == false ) {
          return Text(snap.data);
        } else {
          return CircularProgressIndicator();
        }
      },
    );
  }

答案 2 :(得分:0)

如果有帮助,

您可以使用“计时器”小部件。

在加载时显示CircularProgessIndicator,最后您可以在10秒钟后调用所需的函数。

Timer(Duration(seconds: 10, callback));