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

如何在Flutter的ListView中展示多属性Model类列表?

Flutter 用 ListView 展示多属性 Model 列表的实现方法

1. 定义多属性模型类

和C#的实体类逻辑一致,用Dart类封装你的Product多属性:

class Product {
  final int id;
  final String name;
  final double price;
  final String description;

  // 构造函数
  Product({
    required this.id,
    required this.name,
    required this.price,
    required this.description,
  });
}

2. 准备模型列表数据源

模拟初始化一组Product数据,和C#里初始化List<Product>逻辑一致:

final List<Product> productList = [
  Product(
    id: 1,
    name: "无线耳机",
    price: 299.99,
    description: "降噪蓝牙5.3,续航24小时",
  ),
  Product(
    id: 2,
    name: "智能手表",
    price: 899.00,
    description: "心率监测,防水50米",
  ),
  Product(
    id: 3,
    name: "平板电脑",
    price: 2499.00,
    description: "10.9英寸屏幕,8G+256G",
  ),
];

3. 用 ListView.builder 展示(推荐大量数据场景)

这是性能最优的方式,支持懒加载渲染:

ListView.builder(
  padding: const EdgeInsets.all(16),
  itemCount: productList.length,
  itemBuilder: (context, index) {
    // 取出当前索引的Product对象
    final product = productList[index];
    // 自定义列表项UI,展示多属性
    return Card(
      margin: const EdgeInsets.only(bottom: 12),
      child: Padding(
        padding: const EdgeInsets.all(12),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Text(
                  "商品ID: ${product.id}",
                  style: const TextStyle(color: Colors.grey, fontSize: 12),
                ),
                Text(
                  product.name,
                  style: const TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
                ),
              ],
            ),
            const SizedBox(height: 8),
            Text(
              "价格: ¥${product.price.toStringAsFixed(2)}",
              style: const TextStyle(color: Colors.red, fontSize: 14),
            ),
            const SizedBox(height: 4),
            Text(
              product.description,
              style: const TextStyle(fontSize: 13, color: Colors.black54),
            ),
          ],
        ),
      ),
    );
  },
)

4. 用普通 ListView 展示(适合少量数据)

如果数据量很小,也可以直接遍历模型列表生成子元素:

ListView(
  padding: const EdgeInsets.all(16),
  children: productList.map((product) {
    return Card(
      margin: const EdgeInsets.only(bottom: 12),
      child: Padding(
        padding: const EdgeInsets.all(12),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text("ID: ${product.id}"),
            Text("名称: ${product.name}", style: const TextStyle(fontWeight: FontWeight.bold)),
            Text("价格: ¥${product.price}"),
            Text("描述: ${product.description}"),
          ],
        ),
      ),
    );
  }).toList(),
)

核心逻辑就是:先通过类封装多属性模型,再将模型列表作为数据源,在ListView的构建逻辑中取出单个模型对象,按需展示它的各个属性,UI部分可根据业务需求自由调整布局。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:35:19