如何获得GRIDVIEW项目的高度和宽度,以便我可以根据GRIDVIEW的交叉轴计数设计响应项目...

GridView.builder(
                  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(

                    mainAxisSpacing: 16,
                    crossAxisSpacing: 8,
                    childAspectRatio: 0.8,
                    crossAxisCount: 4,//will change its based on requirnment


                  ),
                  itemBuilder: (context,index){
                    return CustomContainer(height:??,width:??);
                  })

推荐答案

GridView的子元素大小取决于childAspectRatio.如果您希望为itemBuilder提供不同的大小,则需要使用另一个小部件进行包装,该小部件将用于处理父约束.

class TestGrid extends StatelessWidget {
  const TestGrid({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: LayoutBuilder(
        builder: (BuildContext context, BoxConstraints constraints) {
          final currentViewWidth = constraints.maxWidth;
          final currentViewHeight = constraints.maxHeight;
          bool isLargeScreen = currentViewWidth > 1200;
          return GridView.builder(
            gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
              mainAxisSpacing: 16,
              crossAxisSpacing: 8,
              childAspectRatio: isLargeScreen ? 1.5 : 1.2, //handle the child size
              crossAxisCount: isLargeScreen ? 4 : 2,
            ),
            itemBuilder: (context, index) {
              return LayoutBuilder(
                builder: (BuildContext context, BoxConstraints constraints) {
                  final width = constraints.maxWidth;
                  final height = constraints.maxHeight;
                  return Center(
                    //this will take the constraints of GridView.builder, which is comes from `childAspectRatio`
                    child: Container(
                      alignment: Alignment.center,
                      decoration: BoxDecoration(
                        color: Colors.grey,
                        borderRadius: BorderRadius.circular(10),
                      ),
                      child: ColoredBox(color: index.isEven ? Colors.red : Colors.blue, child: Text("$width x $height")),
                    ),
                  );
                },
              );
            },
          );
        },
      ),
    );
  }
}

Flutter相关问答推荐

如何使用底部导航栏修复此导航问题

底部导航栏项目在抖动中不更改 colored颜色

来自FutureProvider的数据只打印两个不同的变量,它们对一个实例只有一次相同的值,为什么?

将Riverpods NotifierProvider与State类一起使用

如何将WebViewWidget和WillPopScope结合起来

如何使 dart 函数变得通用?

如何手动将 FirebaseAuth 用户邮箱验证状态设置为 true

GridView 渲染项目之间有微小的间隙

文本溢出文本框 - Flutter

输入处于活动状态时如何设置文本字段标签的样式?

我想在文本结束后显示分隔线.它会在第一行、第二行或第三行结束

如何制作flutter showDialog、AlertDialog屏障 colored颜色 渐变

如何修复 ICU Lexing 错误:Flutter 中的意外字符

如何从 showModalBottomSheet 中的 topRight 和 topLeft 移除平边

Positioned 的宽度或 SizedBox 的宽度都不适用于堆栈小部件 - Flutter

如何在Flutter 中根据其父小部件高度设置图标按钮飞溅半径

在 Flutter 中单击时切换按钮 colored颜色 没有改变

带图像封面的 ElevatedButton

我已经删除了我的 .android 密钥库,但我没有使用它,如何生成一个新的?

Flutter 小部件中的视图和逻辑分离