【问题标题】:Dynamic Row height in GridView.builder (Flutter)GridView.builder (Flutter) 中的动态行高
【发布时间】:2023-02-06 19:10:57
【问题描述】:

我正在尝试使用具有动态高度的 GridView.builder,具体取决于每行中的最大项目。 Wrap 不适用于此,因为它会同时呈现所有项目。构建器只渲染可见的项目。我不会为每一行手动计算 childAspectRatio

有任何想法吗?

【问题讨论】:

    标签: flutter


    【解决方案1】:

    我做了一个 WrapBuilder 有点像 Wrap 但使用了一个生成器。但需要注意的是,您需要事先知道项目的宽度。如果没关系,您可以尝试使用此类:

    import 'dart:math';
    import 'package:flutter/cupertino.dart';
    
    typedef ValueWidgetBuilder<T> = Widget Function(T value);
    
    class WrapBuilder extends StatelessWidget {
      final double itemWidth;
      final List items;
      final ValueWidgetBuilder itemBuilder;
    
      const WrapBuilder(
          {Key? key,
          required this.itemWidth,
          required this.items,
          required this.itemBuilder})
          : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return LayoutBuilder(builder: (context, constraints) {
          var itemsPerRow = max(1, constraints.maxWidth ~/ itemWidth);
          return ListView.builder(
                shrinkWrap: true,
                controller: ScrollController(),
                itemCount: (items.length / itemsPerRow).ceil(),
                itemBuilder: (BuildContext context, int index) {
                  var rowItems = items.sublist(itemsPerRow * index,
                      min(itemsPerRow * (index + 1), items.length));
                  return Row(children: [
                    for (final item in rowItems)
                      SizedBox(
                          width: itemWidth,
                          child: itemBuilder(item))
                  ]);
                },
              );
        });
      }
    }
    
    You might need to tweek it for your use case. In my case I have a list that is some data and the itemBuilder takes one of this data as parameter
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 2021-06-20
      相关资源
      最近更新 更多