【问题标题】:Flutter - how to populate GridView items in columns, not in rowsFlutter - 如何在列中填充 GridView 项目,而不是在行中
【发布时间】:2020-05-23 01:46:51
【问题描述】:

目前这是将项目添加到GridView.builder的顺序:

我的问题是——如何让它们按这个顺序添加?

GridView 的滚动方向必须保持垂直。

这是我正在使用的GridView 的示例:

Widget gridViewBuilder () {
  return GridView.builder(
     gridDelegate: 
        new SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 2,
          mainAxisSpacing: 1,
        ),
       itemCount: 3,
       itemBuilder: (BuildContext context, int i) {
          itemForGridview(i, context);
  );
}

【问题讨论】:

  • 你能分享你的代码吗?
  • @ChristopherMoore 在描述中添加
  • 这有点违反gridview的逻辑,如果你检查它的文档,它会说“网格的主轴方向是它滚动的方向(scrollDirection)。”
  • @Lunedor 我明白了。我想要的是按 mainAxis 填充 gridview 项目,而不是按交叉轴(标准行为)。如果无法以任何方式分类项目,也许有一些技巧?
  • 对不起,我尝试了一些我想到的技巧,但还没有弄清楚。但我相信在颤振中一切皆有可能,但我更喜欢干净的,所以我会做更多的研究。

标签: flutter flutter-layout


【解决方案1】:

我认为GridView.builder 不可能有这种行为。这是一个简单的解决方法。

您可以将Row 与n Column 一起使用,其中n 是GridView 中的CrossAxisCount。 然后我们简单地划分数据并将第一半分配给第一个Column,将剩余的分配给第二个Column

final List<int> numbers = List.generate(10, (index) => index);

Row(
  children: [
    Column(
      children: List.generate(numbers.length ~/ 2,
          (index) => getContainer(numbers[index].toString())).toList(),
    ),
    Column(
      children: List.generate(
          numbers.length ~/ 2,
          (index) => getContainer(
              numbers[numbers.length ~/ 2 + index].toString())).toList(),
    ),
  ],
);

getContainer 可以是任何想要的小部件。为简单起见,我们采用一个 Container。

Widget getContainer(String number) {
  return Padding(
    padding: EdgeInsets.all(8),
    child: Container(
      color: Colors.green,
      width: 100,
      height: 100,
      alignment: Alignment.center,
      child: Text(
        number,
      ),
    ),
  );
}

【讨论】:

  • 这个决定的缺陷是不能动态填充行列的数据——例如,你不能像GridView那样动态改变列的数量.此外,布局应该是硬编码的,而不是自动布局GridView
  • 您可以即时更改列,无需对布局进行硬编码。由于我们生成列数据的方式与生成行数据的方式相同。我为它制作了一个简单的原型,它在column-count5 之前都可以正常工作。您可以尝试相同的here。如您所见,布局不是硬编码的,它按预期工作。正在改进当前算法以生成列,因为如果我超过 5 列,则会得到错误的布局。
  • 我刚刚尝试了您的解决方案,实际上它适用于我的情况,方法是将行和列包装在 ListView.builder 中。但是,这不是完美的解决方案,所以我给了你+但还不接受
猜你喜欢
  • 2019-07-21
  • 2020-01-17
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多