如何禁用 Container childs 扩展?
How do i disable Container childs to expand?
所以我在脚手架中得到了一个容器 (Material)。但是,如果我添加一个 ElevatedButton 作为此容器的子项,ElevatedButton 按钮将扩展到父容器的完整大小。我怎样才能避免它?
不知道是flutter安装的问题还是我的问题
这是代码。
class Login extends StatefulWidget {
const Login({Key? key}) : super(key: key);
@override
_LoginState createState() => _LoginState();
}
class _LoginState extends State<Login> {
String status = "Status: OK";
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.teal,
appBar: AppBar(
backgroundColor: Colors.teal,
elevation: 0,
centerTitle: true,
automaticallyImplyLeading: false,
title: Text(status),
),
body: Center(
child: Column(
children: [
SubmitContainer(),
],
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
),
),
);
}
}
class InputContainer extends StatelessWidget {
const InputContainer({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
child: TextField(),
width: 200,
height: 200,
color: Colors.yellow,
);
}
}
class SubmitContainer extends StatelessWidget {
const SubmitContainer({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
child: SizedBox(
child: ElevatedButton(
child: Text("GO"),
onPressed: () {},
),
width: 300,
height: 50,
),
width: MediaQuery.of(context).size.width,
);
}
}
最终结果如下所示:
你做错了。在 SubmitContainer 中的容器小部件内,您定义了 width: MediaQuery.of(context).size.width,
,这就是提升按钮拉伸以匹配全屏宽度的原因。只需执行以下操作:
SizedBox(
child: ElevatedButton(
child: Text("GO"),
onPressed: () {},
),
width: 150,
height: 50,
);
尝试用 Center
小部件包装 Container
小部件的子项
这样即使Container本身很宽,内容也会有自动宽度
Container(
child: Center(
child: //...
),
)
从文档中查看此页面以获取更多信息
https://docs.flutter.dev/development/ui/layout/constraints#example-3
当我们使用FittedBox
时它占据了内容的宽度。将 FittedBox 用于 Button。
Container(
child: SizedBox(
child: FittedBox(
child: ElevatedButton(
child: Text("GO"),
onPressed: () {},
),
),
width: 300,
height: 50,
),
width: MediaQuery.of(context).size.width,
);
所以我在脚手架中得到了一个容器 (Material)。但是,如果我添加一个 ElevatedButton 作为此容器的子项,ElevatedButton 按钮将扩展到父容器的完整大小。我怎样才能避免它?
不知道是flutter安装的问题还是我的问题
这是代码。
class Login extends StatefulWidget {
const Login({Key? key}) : super(key: key);
@override
_LoginState createState() => _LoginState();
}
class _LoginState extends State<Login> {
String status = "Status: OK";
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.teal,
appBar: AppBar(
backgroundColor: Colors.teal,
elevation: 0,
centerTitle: true,
automaticallyImplyLeading: false,
title: Text(status),
),
body: Center(
child: Column(
children: [
SubmitContainer(),
],
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
),
),
);
}
}
class InputContainer extends StatelessWidget {
const InputContainer({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
child: TextField(),
width: 200,
height: 200,
color: Colors.yellow,
);
}
}
class SubmitContainer extends StatelessWidget {
const SubmitContainer({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
child: SizedBox(
child: ElevatedButton(
child: Text("GO"),
onPressed: () {},
),
width: 300,
height: 50,
),
width: MediaQuery.of(context).size.width,
);
}
}
最终结果如下所示:
你做错了。在 SubmitContainer 中的容器小部件内,您定义了 width: MediaQuery.of(context).size.width,
,这就是提升按钮拉伸以匹配全屏宽度的原因。只需执行以下操作:
SizedBox(
child: ElevatedButton(
child: Text("GO"),
onPressed: () {},
),
width: 150,
height: 50,
);
尝试用 Center
小部件包装 Container
小部件的子项
这样即使Container本身很宽,内容也会有自动宽度
Container(
child: Center(
child: //...
),
)
从文档中查看此页面以获取更多信息 https://docs.flutter.dev/development/ui/layout/constraints#example-3
当我们使用FittedBox
时它占据了内容的宽度。将 FittedBox 用于 Button。
Container(
child: SizedBox(
child: FittedBox(
child: ElevatedButton(
child: Text("GO"),
onPressed: () {},
),
),
width: 300,
height: 50,
),
width: MediaQuery.of(context).size.width,
);