У меня есть RefreshIndicator, который загружает ListView после завершения Feature, однако я хотел сделать так, чтобы если функция возвращала пустой набор данных - показывать другой виджет - «Нет данных» вместо ListView.
Мне удалось сделать это с помощью троичного оператора, однако виджет «Нет данных» отображается во время обновления, пока не будет заменен на ListView.
Как отобразить виджет «Нет данных»ТОЛЬКО ПОСЛЕ того, как обновление завершилось?
Вот мой код:
return RefreshIndicator(
key: _refreshIndicatorKey,
onRefresh: AppConfig.of(context).flavorName != FLAVOR_NAME.DEV
? () {
bloc.page = 1;
return bloc.getTasks(status, context).then((list) {
setState(() {
tasksList = list;
});
});
}
: () => Future.delayed(Duration(seconds: 2)),
child: tasksList.length > 0
? ListView.builder(
physics: const AlwaysScrollableScrollPhysics(),
controller: _scrollController,
itemCount: tasksList.length + 1,
itemBuilder: (context, index) {
if (index == tasksList.length) {
return _buildProgressIndicator();
} else {
Task item = tasksList != null ? tasksList[index] : null;
return GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return TaskDetailsScreen(index, item);
},
settings: RouteSettings(
name: ScreenName.taskDetails)));
},
child: MyTasksListItem(taskData: item));
}
},
)
: Stack(children: [
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Image.asset(
'assets/tumbleweed.gif',
),
]),
Positioned(
bottom: 50,
left: 0.0,
right: 0.0,
child: Align(child: Text(allTranslations.text('no_tasks'))))
]));
Виджет «Нет данных» - это стек в моем случае.