Как показать CircularProgressIndicator в течение 3 секунд в флаттере - PullRequest
0 голосов
/ 25 апреля 2020

возможно ли обернуть мой CircularProgressIndicator с помощью таймера ... Я хочу показать свой CircularProgressIndicator в течение 3 секунд, но я не знаю, как это сделать ... большая часть ресурсов, которые я прочитал, заключает в себе функцию, которая состоят из 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 ]

2 голосов
/ 25 апреля 2020

Вы можете сделать это, используя 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 голосов
/ 25 апреля 2020

Если это поможет,

Вы можете использовать виджет Таймер.

При загрузке покажите CircularProgessIndicator, и в конце вы сможете вызвать нужную функцию через 10 секунд.

Timer(Duration(seconds: 10, callback));
0 голосов
/ 25 апреля 2020
  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();
        }
      },
    );
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...