【问题标题】:Flutter RefreshIndicator 'No data' WidgetFlutter RefreshIndicator“无数据”小部件
【发布时间】:2019-07-13 09:18:23
【问题描述】:

我有一个 RefreshIndicator,它在功能完成时加载一个 ListView,但是,我想这样做,以便如果该功能返回一个空的数据集 - 显示另一个小部件 - “无数据”而不是 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'))))
          ]));

在我的例子中,“无数据”小部件是 Stack。

【问题讨论】:

    标签: flutter pull-to-refresh


    【解决方案1】:

    也许这样的解决方案会起作用:

     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: Container(
        child: loading ?
           null :
           tasksList.length > 0
              ? ListView.builder(..........
    

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 2021-08-04
      • 1970-01-01
      • 2020-07-29
      • 2018-12-21
      • 1970-01-01
      • 2020-05-06
      • 2021-02-10
      • 2019-04-22
      相关资源
      最近更新 更多