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

问题描述 投票:0回答:2

是否可以使用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();
        }
      },
    );
  }
flutter dart load
2个回答
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),
      ),
    );
  }

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();
        }
      },
    );
  }

0
投票

如果这有助于。

你可以使用定时器小部件。

在加载时显示CircularProgessIndicator,在最后你可以在10秒过后调用你需要的函数。

Timer(Duration(seconds: 10, callback));
© www.soinside.com 2019 - 2024. All rights reserved.