Flutter 在 SingleChildScrollview 中包裹 Row 破坏了 spaceBetween

exi*_*onX 3 flutter flutter-layout flutter-web

我有一个Rowof 按钮,其父级为SingleChildScrollView, 水平方向。包装行的元素后SingleChildScrollView不尊重mainAxisAlignment,特别是 spaceBetween,它们在一起,中间没有空格......

我怎样才能让 spaceBetween 再次工作?

SingleChildScrollView(
  scrollDirection: Axis.horizontal,
  child: Row(
    mainAxisAlignment: MainAxisAlignment.spaceBetween,
    mainAxisSize: MainAxisSize.max,
    children: const [
      TransportModeButton(
        iconPath: 'images/icons/walking_icon.png',
        text: 'Walking',
      ),
      TransportModeButton(
        iconPath: 'images/icons/bicycle_icon.png',
        text: 'Bike & eScooter',
      ),
      TransportModeButton(
        iconPath: 'images/icons/public_transport_icon.png',
        text: 'Public transport',
      )
    ],
  ),
),
Run Code Online (Sandbox Code Playgroud)

tar*_*esh 6

你可以通过将你的Row内部包裹起来来解决它BoxConstraints,例如:

Container(
        child: SingleChildScrollView(
            scrollDirection: Axis.horizontal,
            child: ConstrainedBox(
              constraints: BoxConstraints(
                maxWidth: MediaQuery.of(context).size.width,
              ),
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                mainAxisSize: MainAxisSize.max,
                children: const [
                  Text("test1"),
                  Text("test2"),
                  Text("test3"),
                ],
              ),
            )),
      ),
Run Code Online (Sandbox Code Playgroud)

编辑:

要从父母那里获取对您的约束,SingleChildsScrollView您可以使用 来执行此操作LayoutBuilder,因此代码如下所示:

LayoutBuilder(
                builder: (BuildContext context, BoxConstraints constraints) {
              return SingleChildScrollView(
                  scrollDirection: Axis.horizontal,
                  child: ConstrainedBox(
                    constraints: BoxConstraints(
                      maxWidth: constraints.maxWidth,
                    ),
                    child: Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      mainAxisSize: MainAxisSize.max,
                      children: const [
                        Text("test1"),
                        Text("test2"),
                        Text("test3"),
                      ],
                    ),
                  ));
            })
Run Code Online (Sandbox Code Playgroud)

  • 你是对的,这只解决了示例中的问题,我认为唯一的解决方案是在构建时生成间距,甚至为子项添加填充或边距。 (2认同)