是否可以使用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();
}
},
);
}
你可以使用 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),
),
);
}
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();
}
},
);
}
如果这有助于。
你可以使用定时器小部件。
在加载时显示CircularProgessIndicator,在最后你可以在10秒过后调用你需要的函数。
Timer(Duration(seconds: 10, callback));