我想要将我创建的SizedBox居中,所以我用Center小部件将其包装起来,如下所示:

import 'package:flutter/material.dart';

void main() {
  runApp(
    const MaterialApp(
      title: 'My app',
      home: SafeArea(
        child: MyScaffold(),
      ),
    ),
  );
}

class MyScaffold extends StatelessWidget {
  const MyScaffold({super.key});
  @override
  Widget build(BuildContext context) {
    return Material(
      child: Column(
        children: [
          TextInputWidget(),
        ],
      ),
    );
  }
}

class TextInputWidget extends StatelessWidget {
  const TextInputWidget({super.key});
  @override
  Widget build(BuildContext context) {
    return Row(
      children: [
        Center(
          child: SizedBox(
            width: 200.0,
            child: TextField(
              decoration: InputDecoration(
                border: OutlineInputBorder(),
                hintText: 'Enter a search term',
              ),
            ),
          ),
        ),
      ],
    );
  }
}

但不幸的是,它不起作用,正如您在下图中看到的那样,SizedBox仍然位于窗口的左侧:

enter image description here

我一直在寻找答案,但还没有找到.

对此有什么解决方案吗?

谢谢

推荐答案

根据这Center份文件:

如果该小部件的尺寸受到约束,并且widthFactorheightFactor为空,则该小部件将尽可能大.如果维度是不受约束的,并且相应的大小系数为空,则小部件将匹配其在该维度中的子级大小.

Row中,子对象在主轴上不受约束.要使子小部件(如Center)占据所有可用空间,请将其包装在Expanded小部件中.

(The Row API documentation有其布局机制的详细说明.这是一本非常好的书.)

class TextInputWidget extends StatelessWidget {
  const TextInputWidget({super.key});
  @override
  Widget build(BuildContext context) {
    return Row(
      children: [
        Expanded(
          child: Center(
            child: SizedBox(
              width: 200.0,
              child: TextField(
                decoration: InputDecoration(
                  border: OutlineInputBorder(),
                  hintText: 'Enter a search term',
                ),
              ),
            ),
          ),
        ),
      ],
    );
  }
}

或者,您可以改为使用mainAxisAlignment设置Row对齐.

class TextInputWidget extends StatelessWidget {
  const TextInputWidget({super.key});
  @override
  Widget build(BuildContext context) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        SizedBox(
          width: 200.0,
          child: TextField(
            decoration: InputDecoration(
              border: OutlineInputBorder(),
              hintText: 'Enter a search term',
            ),
          ),
        ),
      ],
    );
  }
}

Flutter相关问答推荐

在Flutter 动中绘制ECG图

更改BottomNavigationBar onTap?的大小

在Flutter 中实现中小型应用程序栏标题

Flutter Riverpod,将默认的BTC值改写为我的新状态

与FTPS连接时出现Flutter FTPConnect HandshakeException错误

如何创建这样的按钮

Wired Firebase错误-[CLOUD_FIRESTORE/UNAvailable]该服务当前不可用

播放特定持续时间Flutter 的音频

使用现有Map方法对子类克隆方法的逻辑进行Dart标准化

flatter_localizations错误在Null值上使用了Null判断运算符

Flutter中有没有办法区分鼠标左右平移?

Flutter中如何实现带有变化图标的浮动操作按钮?

reactive_flutter_BLE - 应用找到设备但无法连接(并读取 BLE 数据)

如何更改 DropDownMenu 的显示方向?

Flutter RIverpod 奇怪地改变状态

如何使用 Rrect 或类似工具在 flutter 中绘制梯形线?

单元测试中如何比较NaN和NaN是否相等

Getx Flutter 在更新值时抛出空错误

Flutter 用户过滤器

带图像封面的 ElevatedButton