如何用卡片包裹行中的行项目

问题描述 投票:0回答:1

我有一张包含一行项目的卡片(文本和复选框小部件)。问题是该卡只能填满每行有限的空间,但它不会进入该行的下一行。我尝试使用wrap小部件,但它没有任何效果。我一直这样:

enter image description here

正如你所看到的那样,它并没有包装到下一个但是试图将所有东西都装在那一行中。这是我的代码:

Widget _buildCategories() {
return Card(
    margin: const EdgeInsets.only(top: 20.0),
    child: Padding(
      padding: const EdgeInsets.all(20.0),
      child: Column(
        children: <Widget>[
          Text(
            'Categories',
            style: TextStyle(fontFamily: 'MonteSerrat', fontSize: 16.0),
          ),
          Wrap(
            children: <Widget>[
              Row(
            children: <Widget>[
              _checkBox('Gaming'),
              _checkBox('Sports'),
              _checkBox('Casual'),
              _checkBox('21 +'),
              _checkBox('Adult'),
              _checkBox('Food'),
              _checkBox('Club'),
              _checkBox('Activities'),
              _checkBox('Shopping'),
            ],
          )
            ],
          )

        ],
      ),
    ));
 }


Widget _checkBox(String category) {
return Expanded(
    child: Column(
  children: <Widget>[
    Text(
      '$category',
      textAlign: TextAlign.center,
      style: TextStyle(fontFamily: 'MonteSerrat'),
    ),
    Checkbox(
      value: false,
      onChanged: (value) {
        // We will update the value to the firebase data here
        print('updated value to: $value');
      },
    )
  ],
));
 }
dart flutter row wrapping
1个回答
1
投票

我通过以下更改修复了您的代码:

  • 删除了Row中的Wrap小部件。
  • 删除了Expanded小部件。
  • 将属性maxLines添加到Text小部件中。 Widget _buildCategories() { return Card( margin: const EdgeInsets.only(top: 20.0), child: Padding( padding: const EdgeInsets.all(20.0), child: Column( children: <Widget>[ Text( 'Categories', style: TextStyle(fontFamily: 'MonteSerrat', fontSize: 16.0), ), Wrap( children: <Widget>[ _checkBox('Gaming'), _checkBox('Sports'), _checkBox('Casual'), _checkBox('21 +'), _checkBox('Adult'), _checkBox('Food'), _checkBox('Club'), _checkBox('Activities'), _checkBox('Shopping') ], ) ], ), )); } Widget _checkBox(String category) { return Column( children: <Widget>[ Text( '$category', maxLines: 1, textAlign: TextAlign.center, style: TextStyle(fontFamily: 'MonteSerrat'), ), Checkbox( value: false, onChanged: (value) { // We will update the value to the firebase data here print('updated value to: $value'); }, ) ], ); } }

您还可以将属性runSpacingspacing添加到Wrap小部件中,以便在水平和垂直项目之间提供更多空间。

     Wrap(
            runSpacing: 5.0,
            spacing: 5.0,

更多信息:https://docs.flutter.io/flutter/widgets/Wrap-class.html

© www.soinside.com 2019 - 2024. All rights reserved.