flutter_staggered_grid_view中使用MasonryGridView进行瀑布流布局时报错及解决方法

══╡ EXCEPTION CAUGHT BY RENDERING LIBRARY ╞═════════════════════════════════════════════════════════
The following assertion was thrown during performResize():Vertical viewport was given unbounded height.
Viewports expand in the scrolling direction to fill their container. In this case, a vertical
viewport was given an unlimited amount of vertical space in which to expand. This situation
typically happens when a scrollable widget is nested inside another scrollable widget.
If this widget is always nested in a scrollable widget there is no need to use a viewport because
there will always be enough vertical space for the children. In this case, consider using a Column
or Wrap instead. Otherwise, consider using a CustomScrollView to concatenate arbitrary slivers into
a single scrollable.

The relevant error-causing widget was:
 MasonryGridView      

根据上面的报错信息,可以看出是 MasonryGridView组件的问题,原来是忘了配置shrinkWrap: true

解决办法:

必须要在 MasonryGridView.count()中配置shrinkWrap属性,让元素的宽度自适应,就可以解决报错问题了。

示例:

MasonryGridView.count(
            crossAxisCount: 4,
            mainAxisSpacing: 4,
            crossAxisSpacing: 4,
            itemCount: 20,
            shrinkWrap: true,//收缩,让元素宽度自适应
            itemBuilder: (context, index) {
              return Container(
                height: height,
                decoration: BoxDecoration(
                  border: Border.all(color: Colors.black,width: 1),
                  borderRadius: BorderRadius.circular(10),                  
                ),
              );
            },
          )

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Flutter可以使用`StaggeredGridView`来实现瀑布流布局。`StaggeredGridView`是一个可以根据内容动态调整大小的网格布局。下面是一个简单的示例代码: 首先,需要在`pubspec.yaml`文件添加`flutter_staggered_grid_view`依赖: ```yaml dependencies: flutter: sdk: flutter flutter_staggered_grid_view: ^0.4.0 ``` 然后,在Dart文件导入依赖: ```dart import 'package:flutter/material.dart'; import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart'; ``` 接下来,可以使用`StaggeredGridView.countBuilder`构建瀑布流布局: ```dart class MyStaggeredGridView extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Staggered Grid View'), ), body: StaggeredGridView.countBuilder( crossAxisCount: 4, // 列数 itemCount: 20, // 子项数量 itemBuilder: (BuildContext context, int index) => Container( color: Colors.blueGrey, child: Center( child: CircleAvatar( backgroundColor: Colors.white, child: Text('$index'), ), ), ), staggeredTileBuilder: (int index) => StaggeredTile.count(2, index.isEven ? 2 : 1), // 控制子项的大小 mainAxisSpacing: 4.0, // 主轴间距 crossAxisSpacing: 4.0, // 横轴间距 ), ); } } ``` 在上面的示例,`StaggeredTile.count`用于控制子项的大小,通过判断`index`的奇偶性来实现交错布局。`mainAxisSpacing`和`crossAxisSpacing`用于设置主轴和横轴的间距。 这只是一个简单的示例,你可以根据自己的需求进行更多的定制和样式修改。希望对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值