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

在Flutter/Dart中如何合并三个列表并在ListView表格中展示

实现步骤

1. 合并三个Dart列表

因为三个列表长度一致,按索引对应合并为每行的数据集即可:

var px = [0.1, 0.2, 0.3];
var x = [0, 1, 2];
// 注意原变量名mutiply为拼写错误,此处修正为multiply
var multiply = [0, 0.2, 0.6];

// 合并为按行存储的数据集
List<List<num>> mergedList = List.generate(px.length, (index) => [
  px[index],
  x[index],
  multiply[index],
]);

合并前建议加长度校验,避免数组越界:assert(px.length == x.length && x.length == multiply.length);

2. ListView搭载表格展示

提供两种常用实现方案:

方案1:使用DataTable组件

适合需要快速搭建标准表格的场景:

import 'package:flutter/material.dart';

class TableDemoPage extends StatelessWidget {
  TableDemoPage({super.key});

  final List<double> px = [0.1, 0.2, 0.3];
  final List<int> x = [0, 1, 2];
  final List<double> multiply = [0, 0.2, 0.6];

  @override
  Widget build(BuildContext context) {
    // 校验列表长度
    assert(px.length == x.length && x.length == multiply.length);
    // 合并列表
    List<List<num>> mergedList = List.generate(px.length, (index) => [
      px[index],
      x[index],
      multiply[index],
    ]);

    return Scaffold(
      appBar: AppBar(title: const Text('表格展示')),
      body: ListView(
        padding: const EdgeInsets.all(16),
        children: [
          DataTable(
            border: TableBorder.all(color: Colors.grey.shade300),
            headingRowColor: MaterialStateProperty.all(Colors.grey.shade100),
            columns: const [
              DataColumn(label: Text('px')),
              DataColumn(label: Text('x')),
              DataColumn(label: Text('multiply')),
            ],
            rows: mergedList.map((row) => DataRow(cells: [
              DataCell(Text(row[0].toString())),
              DataCell(Text(row[1].toString())),
              DataCell(Text(row[2].toString())),
            ])).toList(),
          )
        ],
      ),
    );
  }
}

方案2:使用ListView.builder自定义表格

适合数据量大、需要自定义行样式的场景,性能更优:

@override
Widget build(BuildContext context) {
  assert(px.length == x.length && x.length == multiply.length);
  List<List<num>> mergedList = List.generate(px.length, (index) => [
    px[index],
    x[index],
    multiply[index],
  ]);

  return Scaffold(
    appBar: AppBar(title: const Text('自定义表格')),
    body: ListView.builder(
      padding: const EdgeInsets.all(16),
      // 总长度=表头+数据行数
      itemCount: mergedList.length + 1,
      itemBuilder: (context, index) {
        // 渲染表头
        if (index == 0) {
          return Container(
            color: Colors.grey.shade100,
            padding: const EdgeInsets.symmetric(vertical: 8),
            child: const Row(
              children: [
                Expanded(child: Text('px', textAlign: TextAlign.center)),
                Expanded(child: Text('x', textAlign: TextAlign.center)),
                Expanded(child: Text('multiply', textAlign: TextAlign.center)),
              ],
            ),
          );
        }
        // 渲染数据行
        final rowData = mergedList[index - 1];
        return Container(
          padding: const EdgeInsets.symmetric(vertical: 8),
          decoration: BoxDecoration(
            border: Border(bottom: BorderSide(color: Colors.grey.shade300))
          ),
          child: Row(
            children: [
              Expanded(child: Text(rowData[0].toString(), textAlign: TextAlign.center)),
              Expanded(child: Text(rowData[1].toString(), textAlign: TextAlign.center)),
              Expanded(child: Text(rowData[2].toString(), textAlign: TextAlign.center)),
            ],
          ),
        );
      },
    ),
  );
}

内容的提问来源于stack exchange,提问作者Muhammad Awais Younas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:54:03