如何拥有一个列表视图,其子视图将在Flutter中换行

watbbzwu  于 2022-11-25  发布在  Flutter
关注(0)|答案(4)|浏览(165)

我需要的

现在的情况如何

基本上,我需要实现这一点。我想使用一个网格视图,但网格视图呈现元素到一个指定的纵横比,这不是我需要在我的情况下。我也尝试了一个列表视图与水平滚动,但当然它会和无限水平滚动。我会感谢任何指针如何实现它。

ListView.builder(
  itemCount: categories.length,
  scrollDirection: Axis.horizontal,
  shrinkWrap: true,
  itemBuilder: (context,index){
      return Container(
           margin: EdgeInsets.all(3),
           padding: EdgeInsets.all(5),
           decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(4),
                border: Border.all(color: AppColors.darkOrange)
                ),
           child: Text(categories[index],style: AppTextStyles.smallTextStyle,)
                 );
           }
      ),
ruarlubt

ruarlubt1#

你可以使用一个 Package 小工具与芯片也似乎这是像过滤菜单,如果你有兴趣检查这个包filter_list

ListView(
       primary: true,
       shrinkWrap: true,
       children: <Widget>[
         Wrap(
           spacing: 4.0,
           runSpacing: 0.0,
           children: List<Widget>.generate(
             categories.length, 
             (int index) {
               return Chip(
                 label: Text(categories[index].name,style: AppTextStyles.smallTextStyle)
               );
             }
           ).toList(),
         ),
       ],
     ),
ou6hu8tu

ou6hu8tu2#

你可以通过Wrap widget来实现。Doc -〉wrap class documentation

Wrap(
  children: categories.map((category) {
     return Container(
        margin: EdgeInsets.all(3),
        padding: EdgeInsets.all(5),
        decoration: BoxDecoration(
          borderRadius: BorderRadius.circular(4),
          border: Border.all(color: AppColors.darkOrange)
        ),
        child: Text(
          category, 
          style: AppTextStyles.smallTextStyle,
        )
     )}.toList(),
  ],
),
xxhby3vn

xxhby3vn3#

您可以尝试使用Wrap而不是ListView.builder

Wrap(
 children:categories.map((c)=>Text(categories[index],style: 
  AppTextStyles.smallTextStyle,).toList())
)
sxpgvts3

sxpgvts34#

Package 是你要找的

Wrap(
          spacing: 8.0, // gap between adjacent chips
          runSpacing: 4.0, // gap between lines
          children: categories
              .map((e) => Container(
                  margin: EdgeInsets.all(3),
                  padding: EdgeInsets.all(5),
                  decoration: BoxDecoration(
                      borderRadius: BorderRadius.circular(4),
                      border: Border.all(color: AppColors.darkOrange)),
                  child: Text(
                    e,
                    style: AppTextStyles.smallTextStyle,
                  )))
              .toList(),
        )

相关问题