flutter 实现可以上下左右滑动的表格

前言: 好久没写过文章了,最近在使用flutter开发项目,于是乎想简单记录一下开发过程中遇到的一些好玩的东西或者经常会遇到的功能开发。

欢迎关注我的flutter项目,里面会记录控件使用及各种常用功能的开发https://github.com/student9128/FlutterStudy

开发过程中经常遇到需要做可以上下左右滑动的类型的表格的实现,这里提供一种自己实现的方案

鉴于这个功能难度不是很大,仅仅就是布局和联动的实现,所以代码很少

效果

废话不多说,先上效果

Jietu20220531-212500-HD.gif

布局

根据表格滑动的结构,可以看到布局结构如下,分别是横向滑动的标题,横向滑动的内容和上下滑动的标题+内容。

WX20220531-212257@2x.png

联动代码


@override
void initState() {
  super.initState();
  _titleController.addListener(_updateContent);
  _contentController.addListener(_updateTitle);
}

void _updateTitle() {
  if (_titleController.offset != _contentController.offset) {
    _titleController.jumpTo(_contentController.offset);
  }
}

void _updateContent() {
  if (_contentController.offset != _titleController.offset) {
    _contentController.jumpTo(_titleController.offset);
  }
}

源代码查看
https://github.com/student9128/FlutterStudy/blob/main/lib/advanced/vh_scrollable_table_page.dart

本篇文章已同时发布到个人公众号,掘进社区
爱学习的同学欢迎关注我的个人公众号,一起学习

扫码_搜索联合传播样式-白色版.png

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以通过CSS的`position`属性和`z-index`属性来实现表格第一列固定不动。具体实现步骤如下: 1. 在表格的`<thead>`和`<tbody>`标签中分别为第一列添加一个`<th>`和`<td>`标签,并设置相应的样式。 ``` <table> <thead> <tr> <th>固定列</th> <th>列1</th> <th>列2</th> <th>列3</th> </tr> </thead> <tbody> <tr> <td>固定列</td> <td>内容1</td> <td>内容2</td> <td>内容3</td> </tr> <tr> <td>固定列</td> <td>内容4</td> <td>内容5</td> <td>内容6</td> </tr> ... </tbody> </table> ``` 2. 为表格的`<thead>`标签和`<tbody>`标签设置`display: block`属性,并设置表格的宽度和高度。 ``` thead, tbody { display: block; width: 100%; height: 200px; } ``` 3. 为表格的`<tbody>`标签设置`overflow-y: scroll`属性,使其在纵向滚动时出现滚动条。 ``` tbody { overflow-y: scroll; } ``` 4. 为表格的第一列`<th>`和`<td>`标签设置`position: sticky`属性和`left: 0`属性,使其固定在左侧。 ``` th:first-child, td:first-child { position: sticky; left: 0; z-index: 1; background-color: #fff; } ``` 这样就可以实现表格第一列固定不动了。完整的代码如下所示: ``` <style> table { border-collapse: collapse; width: 100%; } th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } th:first-child, td:first-child { position: sticky; left: 0; z-index: 1; background-color: #fff; } thead, tbody { display: block; width: 100%; height: 200px; } tbody { overflow-y: scroll; } </style> <table> <thead> <tr> <th>固定列</th> <th>列1</th> <th>列2</th> <th>列3</th> </tr> </thead> <tbody> <tr> <td>固定列</td> <td>内容1</td> <td>内容2</td> <td>内容3</td> </tr> <tr> <td>固定列</td> <td>内容4</td> <td>内容5</td> <td>内容6</td> </tr> ... </tbody> </table> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值