You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter开发:SliverList为空时如何展示提示消息?

解决SliverList筛选后无数据显示提示的问题

核心修改点

  • 判断筛选结果是否为空:当allUsers长度为0时,用SliverFillRemaining展示提示文本,否则渲染用户列表
  • 监听搜索输入触发UI刷新:给TextField添加输入回调,确保筛选条件变化后页面能重新构建

修改后的完整代码

Widget build(BuildContext context) {
  return Scaffold(
    body: BlocBuilder<UsersCubit, UsersState>(builder: (context, userState) {
      if (userState is UsersLoaded) {
        List<UserEntity> allUsers = userState.users
            .where((user) => 
                user.name!.toLowerCase().contains(_searchController.text.toLowerCase()))
            .toList();

        return CustomScrollView(
          slivers: <Widget>[
            SliverAppBar(
              floating: true,
              snap: true,
              automaticallyImplyLeading: false,
              elevation: 0,
              title: TextField(
                controller: _searchController,
                onChanged: (value) {
                  // 触发UI重新构建,若需通过Cubit处理搜索逻辑,可替换为对应Cubit方法调用
                  setState(() {});
                },
                style: Theme.of(context).textTheme.bodyText1,
                decoration: InputDecoration(
                  hintText: 'Search ...',
                ),
              ),
            ),
            // 根据筛选结果切换显示内容
            if (allUsers.isEmpty)
              SliverFillRemaining(
                child: Center(
                  child: Text('没有找到匹配的用户'),
                ),
              )
            else
              SliverList(
                delegate: SliverChildBuilderDelegate(
                  (BuildContext context, int index) {
                    return User(
                      otherUser: allUsers[index],
                    );
                  },
                  childCount: allUsers.length,
                ),
              ),
          ],
        );
      } else {
        return const Scaffold(
            body: Center(child: CircularProgressIndicator()));
      }
    }),
  );
}

额外说明

  • 修正了原代码中where条件的语法错误(原代码缺少>符号)
  • 如果业务逻辑需要通过Cubit从服务端获取筛选数据,可将setState替换为Cubit的搜索方法调用,比如context.read<UsersCubit>().searchUsers(value)
  • SliverFillRemaining会自动填充CustomScrollView的剩余空间,确保提示文本居中显示

内容的提问来源于stack exchange,提问作者Mus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:55:27