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

Flutter中如何实现点击帖子「X人点赞」查看点赞用户列表并跳转用户页

Flutter 实现点赞用户列表交互方案

以下是可直接复用的实现逻辑:

第一步:定义基础数据结构

首先定义用户、帖子数据模型,方便数据传递:

class UserModel {
  final String userId;
  final String userName;
  final String avatarUrl;
  UserModel({
    required this.userId,
    required this.userName,
    required this.avatarUrl,
  });
}

class PostModel {
  final String postId;
  final int likeCount;
  final List<UserModel> likedUsers;
  PostModel({
    required this.postId,
    required this.likeCount,
    required this.likedUsers,
  });
}

第二步:实现帖子点赞区域点击交互

用GestureDetector包裹「X人点赞」显示区域,点击后弹出底部模态列表:

// 帖子组件内的点赞数显示部分
GestureDetector(
  onTap: () {
    // 弹出底部点赞用户列表
    showModalBottomSheet(
      context: context,
      shape: const RoundedRectangleBorder(
        borderRadius: BorderRadius.vertical(top: Radius.circular(16)),
      ),
      builder: (context) => LikedUsersList(users: post.likedUsers),
    );
  },
  child: Text(
    '${post.likeCount}人点赞',
    style: const TextStyle(color: Colors.blue, fontSize: 14),
  ),
)

第三步:实现点赞用户列表组件

列表用ListView.builder做懒加载,每个用户项支持点击跳转:

class LikedUsersList extends StatelessWidget {
  final List<UserModel> users;
  const LikedUsersList({super.key, required this.users});

  @override
  Widget build(BuildContext context) {
    return Container(
      padding: const EdgeInsets.all(16),
      height: MediaQuery.of(context).size.height * 0.6,
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          const Text('全部点赞用户', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)),
          const SizedBox(height: 12),
          Expanded(
            child: ListView.builder(
              itemCount: users.length,
              itemBuilder: (context, index) {
                final user = users[index];
                return InkWell(
                  onTap: () {
                    // 关闭弹窗再跳转到用户详情页
                    Navigator.pop(context);
                    Navigator.push(
                      context,
                      MaterialPageRoute(
                        builder: (context) => UserDetailPage(userId: user.userId),
                      ),
                    );
                  },
                  child: Padding(
                    padding: const EdgeInsets.symmetric(vertical: 8),
                    child: Row(
                      children: [
                        CircleAvatar(
                          backgroundImage: NetworkImage(user.avatarUrl),
                          radius: 20,
                        ),
                        const SizedBox(width: 12),
                        Text(user.userName, style: const TextStyle(fontSize: 14)),
                      ],
                    ),
                  ),
                );
              },
            ),
          ),
        ],
      ),
    );
  }
}

可选优化点

  • 如果点赞用户数量过万,不需要一次性返回全量用户,可做分页加载,在列表滚动到底部时请求下一页数据
  • 头像添加缓存逻辑,避免重复加载
  • 可给点击操作加防抖,避免重复触发跳转

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:27:02