Flutter包络构件对齐:ExpansionPanel内部左侧

uqxowvwt  于 2023-03-31  发布在  Flutter
关注(0)|答案(4)|浏览(159)

这很奇怪,包含FilterChips的Wrap小部件在它的父组件ExpansionPanel中居中。我尝试将Wrap小部件 Package 在Flexible小部件中,没有React,我尝试将Wrap小部件 Package 在Expanded小部件中,没有React。
“扩展”面板上似乎没有向左对齐正文的属性:小部件。这很重要,因为当Wrap小部件被强制为全宽时,一些ExpansionPanel向左对齐,但其他的,如图所示,居中。最终我将在Padding小部件中 Package ExpansionPanel中的所有子部件,但我需要子Wrap小部件首先向左对齐。

bool travelSack;
ExpansionPanelRadio backpackingPanel = ExpansionPanelRadio(
            value: "Backpacking",
            headerBuilder: (BuildContext context, bool isExpanded) {
              return ListTile(
                leading: FaIcon(
                  FontAwesomeIcons.globeEurope,
                  size: 19,
                ),
                title: Text("Backpacking"),
              );
            },
            body: Expanded(child:
            Wrap(spacing: 4, children: [
              FilterChip(
                showCheckmark: false,
                label: Text('Travel rucksack'),
                labelStyle: TextStyle(
                  color: travelSack ? Colors.black : Colors.white,
                ),
                selected: travelSack,
                onSelected: (bool selected) {
                  setState(() {
                    travelSack = !travelSack;
                  });
                },
                selectedColor: Colors.green.shade500,
                backgroundColor: Colors.grey.shade500,
              ),
        ])
    );

我是史酷比多谢帮忙

juzqafwq

juzqafwq1#

我通过将Wrap小部件嵌套在Align小部件中解决了这个问题:

Align(
            alignment: Alignment.topLeft, 
child: Wrap(....

我不喜欢我的解决方案,我担心嵌套对性能的影响,以及代码的蔓延会损害可读性,所以如果你有更好的解决方案,我会全力以赴。

zte4gxcn

zte4gxcn2#

Wrap有一个alignment属性,您可以使用它来对齐子项。https://api.flutter.dev/flutter/widgets/Wrap/Wrap.html

Wrap(
  ...
  alignment: WrapAlignment.center,
  children: [],
),
jw5wzhpr

jw5wzhpr3#

我遇到了同样的问题,并解决了SizedBox:

ExpansionPanelRadio backpackingPanel = ExpansionPanelRadio(
  value: "Backpacking",
  headerBuilder: (BuildContext context, bool isExpanded) {},
  body: SizedBox(
    width: double.infinity, // Use when direction: Axis.horizontal
    height: double.infinity, // Use when direction: Axis.vertical
    child: Wrap(
      spacing: 4,
      children: [
        FilterChip(
          showCheckmark: false,
          label: Text('Travel rucksack'),
          labelStyle: TextStyle(
            color: travelSack ? Colors.black : Colors.white,
          ),
          selected: travelSack,
          onSelected: (bool selected) {
            setState(() {
              travelSack = !travelSack;
            });
          },
          selectedColor: Colors.green.shade500,
          backgroundColor: Colors.grey.shade500,
        ),
      ],
    ),
  ),
);

记住不要同时使用width和height SizedBox属性,每个Wrap.direction只能使用一个。
参考文献

svgewumm

svgewumm4#

您可以使用.start属性将小部件向左对齐,如下所示。

Wrap(alignment: WrapAlignment.start,)

//你也可以使用direction:Axis.horizontal属性来根据你的需要对齐。

相关问题