《Flutter入门》Table 横向滚动+固定表头/固定第一列实现

先上实现图:
在这里插入图片描述
代码:

  //创建一个表单
  Widget _buildChart() {
    return Container
      child: Row(
        children: <Widget>[
          Container(
            child: Table(children: _buildTableColumnOne()),
            width: numRowWidth, //固定第一列
          ),
          Expanded(
              child: SingleChildScrollView(
                  scrollDirection: Axis.horizontal,
                  child: Container(
                    child: Table(children: _buildTableRow()),
                    width: numRowWidth * 6,
                  )))
        ],
      ),
    );
  }

  //创建第一列行

  double numRowWidth = 100.0;//单个表宽
  double numRowHeight = 48.0;//表格高
 
 List<TableRow> _buildTableColumnOne() {
    List<TableRow> returnList = new List();
    returnList.add(_buildSingleColumnOne(-1));
    for (int i = 0; i < 5; i++) {
      returnList.add(_buildSingleColumnOne(i));
    }
    return returnList;
  }

  //创建tableRows
  List<TableRow> _buildTableRow() {
    List<TableRow> returnList = new List();
    returnList.add(_buildSingleRow(-1));
    for (int i = 0; i < 5; i++) {
      returnList.add(_buildSingleRow(i));
    }
    return returnList;
  }

  //创建第一列tableRow
  TableRow _buildSingleColumnOne(int index) {
    return TableRow(
        //第一行样式 添加背景色
        children: [
          //增加行高
          _buildSideBox(index == -1 ? '纸品种类' : "黄边纸", index == -1),
        ]);
  }

  //创建一行tableRow
  TableRow _buildSingleRow(int index) {
    return TableRow(
        //第一行样式 添加背景色
        children: [
          _buildSideBox(index == -1 ? '实重' : "2676.30", index == -1),
          _buildSideBox(index == -1 ? '金额' : "100.30", index == -1),
          _buildSideBox(index == -1 ? '扣重' : "100", index == -1),
          _buildSideBox(index == -1 ? '单价(元/kg)' : "11640", index == -1),
          _buildSideBox(index == -1 ? '磅重(kg)' : "45", index == -1),
        ]);
  }

  //创建单个表格
  Widget _buildSideBox(String title, isTitle) {
    return SizedBox(
        height: numRowHeight,
        width: numRowWidth,
        child: Container(
            alignment: Alignment.center,
            decoration: BoxDecoration(
                border: Border(
                    bottom: BorderSide(width: 0.33, color:Colours.cl_D0D0D0))),
            child: Text(
              title,
              maxLines: 1,
              overflow: TextOverflow.ellipsis,
              style: TextStyle(
                  fontSize: isTitle ? 14 : 12, color: Colours.gray_33),
            )));
  }

实现思路:Row内嵌套横向Scrollview,表头单独处理.

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
可以使用 `ListView` 和 `ListView.builder` 来实现一个顶部滚动横向表,并通过设置 `scrollDirection` 为 `Axis.horizontal` 来实现横向滚动功能。 以下是一个简单的示例代码: ```dart import 'package:flutter/material.dart'; class HorizontalList extends StatelessWidget { final List<String> items; HorizontalList({required this.items}); @override Widget build(BuildContext context) { return Container( height: 100, child: ListView.builder( scrollDirection: Axis.horizontal, itemCount: items.length, itemBuilder: (BuildContext context, int index) { return Padding( padding: EdgeInsets.all(8.0), child: Container( width: 100, color: Colors.grey[300], child: Center( child: Text( items[index], ), ), ), ); }, ), ); } } ``` 在这个示例中,我们创建了一个名为 `HorizontalList` 的小部件,该小部件接收一个字符串表 `items` 作为参数,并在顶部创建一个高度为 `100` 的容器。 在 `ListView.builder` 中,我们设置了 `scrollDirection` 为 `Axis.horizontal`,并使用 `itemCount` 和 `itemBuilder` 来构建表项。在每个表项中,我们创建了一个宽度为 `100` 的容器,并将其包装在一个填充边距为 `8` 的 `Padding` 中。在容器中,我们用灰色背景色和居中对齐的文本显示了表项的内容。 你可以在你的页面中调用 `HorizontalList` 小部件,将需要显示的字符串表传递给它,即可实现一个简单的顶部滚动横向表。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值