是否可以使用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();
}
},
);
}
答案 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));