Flutter RefreshIndicator 'No data' 小部件

Flutter RefreshIndicator 'No data' Widget

我有一个 RefreshIndicator,它会在功能完成时加载 ListView,但是,我想这样做,如果功能 returns 数据集为空 - 显示另一个小部件 - 'No data'的列表视图。

我能够使用三元运算符完成此操作,但是,'No data' 小部件在刷新期间显示,直到被 ListView 替换。

如何仅在刷新完成后显示 'No data' 小部件?

这是我的代码:

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'))))
          ]));

'No data' 小部件在我的例子中是 Stack。

也许这样的解决方案可行:

 onRefresh: AppConfig.of(context).flavorName != FLAVOR_NAME.DEV
    ? () {
        setState(() {
            loading = true;
        });

        bloc.page = 1;
        return bloc.getTasks(status, context).then((list) {
          setState(() {
            loading = false;
            tasksList = list;
          });
        });
      }

在您的指标中 child:

child: Container(
    child: loading ?
       null :
       tasksList.length > 0
          ? ListView.builder(..........