有很多方法可以制作全宽按钮。但我认为你应该了解在不同场景下制作全宽小部件的概念:
当您使用嵌套小部件时,很难识别父小部件的宽度。只是您不能在嵌套小部件中指定宽度。因此,您应该使用 Expanded 或带有 CrossAxisAlignment 的 Column 作为 Strech。
在其他情况下,您可以使用媒体查询宽度或 double.infinity。
以下是嵌套小部件和单个小部件的一些示例:
第一的:
Expanded( // This will work for nested widgets and will take width of first parent widget.
child: MaterialButton(
onPressed: () {},
child: const Text("Button Text"),
color: Colors.indigo,
textColor: Colors.white,
)
)
第二:
Column( // This will not work if parent widget Row.
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
MaterialButton(
onPressed: () {},
child: const Text("Button Text"),
color: Colors.indigo,
textColor: Colors.white,
)
]
)
第三:
ButtonTheme( // if use media query, then will not work for nested widgets.
minWidth: double.infinity, //Or use 'width: MediaQuery.of(context).size.width'
child: MaterialButton(
onPressed: () {},
child: const Text("Button Text"),
color: Colors.indigo,
textColor: Colors.white,
)
)
向前:
SizedBox( // if use media query, then will not work for nested widgets.
width: double.infinity, //Or use 'width: MediaQuery.of(context).size.width'
child: MaterialButton(
onPressed: () {},
child: const Text("Button Text"),
color: Colors.indigo,
textColor: Colors.white,
)
)
第五:
Container( // if use media query, then will not work for nested widgets.
width: double.infinity, //Or use 'width: MediaQuery.of(context).size.width'
child: MaterialButton(
onPressed: () {},
child: const Text("Button Text"),
color: Colors.indigo,
textColor: Colors.white,
)
)
从我的角度来看,推荐的将是第一个。您也可以更改MaterialButton
为ElevatedButton
或TextButton
或RaisedButton (Depreciated)
或任何其他小部件。
干杯!