У меня есть приложение для показа мирового времени. У меня есть страница для изменения разных мест по всему миру. Это ListView.
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: colorOne,
appBar: AppBar(
backgroundColor: Colors.black,
title: Text("Change location"),
centerTitle: true,
elevation: 0.0,
),
body: ListView.builder(
physics: const AlwaysScrollableScrollPhysics(),
padding: EdgeInsets.fromLTRB(5, 10, 5, 0),
itemCount: locations.length,
itemBuilder: (context, index) {
return Card(
child: ListTile(
onTap: () {
updateTime(index);
... rest code
Как видите, когда я нажимаю на ListTIle, он вызывает функцию updateTime
updateTime:
void updateTime(index) async {
WorldTime instance = locations[index];
await instance.getTime();
Navigator.pop(context, {
"location": instance.location,
"flag": instance.flag,
"time": instance.time,
"date": instance.date,
"isDayTime": instance.isDayTime,
});
// obtain shared preferences
final savingLastLocation = await SharedPreferences.getInstance();
// set value
savingLastLocation.setString("location", instance.location);
savingLastLocation.setString("url", instance.url);
savingLastLocation.setString("flag", instance.flag);
}
Если пользователь начинает рассылать спам на плитках в ожидании этой функции, приложение либо покажет полностью пустой серый экран, либо сбросит красный экран смерти с надписью «логическое выражение должно быть нулевым».
Как добавить какой-либо вид загрузки экрана / виджета или запретить повторный вызов функции, если она уже была вызвана один раз?