不需要的 space 出现在列中的 RaisedButton 小部件之间
Unwanted space appearing between RaisedButton widgets in a column
tl;dr 当我没有明确设置任何按钮时,为什么 space 出现在我的两个按钮之间?
我正在尝试制作如下所示的布局:
但是,两个按钮之间出现了 space 大约 16px 的东西,我不知道它是从哪里来的。
我起初以为 Column
可能会添加 space 但我使用的 MainAxisAlignment.center
不应该添加任何内容。我现在认为可能有一些 Material 主题正在自动将填充应用到 RaisedButton
,但是我已经查看了两个 button_theme.dart and raised_button.dart,它似乎只是内部填充(在文本和按钮边缘之间)正在设置。我确信我忽略了一些东西,如果能帮助找出这个 space 存在的原因,我将不胜感激。
auth.dart(屏幕显示如图)
...
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(flex: 2, child: Container()),
Expanded(
flex: 8,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Padding(
padding: EdgeInsets.fromLTRB(0, 0, 0, 32),
child: Image(
fit: BoxFit.contain,
image: AssetImage('lib/res/drawable/logo.webp'))),
PrimaryButton(
onPressed: //...,
child: Text('Log In')),
PrimaryButton(
onPressed: //...,
child: Text('Sign Up')),
])),
Expanded(flex: 2, child: Container()),
]));
}
primary_button.dart(扩展 RaisedButton
的自定义圆形按钮小部件):
...
Widget build(BuildContext context) {
return Theme(
data: Theme.of(context).copyWith(
textTheme: Theme.of(context).textTheme,
buttonTheme: Theme.of(context).buttonTheme.copyWith(
padding: EdgeInsets.all(0),
minWidth: double.infinity,
buttonColor: Theme.of(context).accentColor,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24))),
),
child: Builder(builder: super.build));
}
添加 属性 materialTapTargetSize
并将其设置为 MaterialTapTargetSize.shrinkWrap
。
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
如果您查看 RawMaterialButton
的源代码,它会根据该值添加一个填充:
Size minSize;
switch (widget.materialTapTargetSize) {
case MaterialTapTargetSize.padded:
minSize = const Size(48.0, 48.0);
break;
case MaterialTapTargetSize.shrinkWrap:
minSize = Size.zero;
break;
}
return Semantics(
container: true,
button: true,
enabled: widget.enabled,
child: _InputPadding(
minSize: minSize,
child: result,
),
);
tl;dr 当我没有明确设置任何按钮时,为什么 space 出现在我的两个按钮之间?
我正在尝试制作如下所示的布局:
但是,两个按钮之间出现了 space 大约 16px 的东西,我不知道它是从哪里来的。
我起初以为 Column
可能会添加 space 但我使用的 MainAxisAlignment.center
不应该添加任何内容。我现在认为可能有一些 Material 主题正在自动将填充应用到 RaisedButton
,但是我已经查看了两个 button_theme.dart and raised_button.dart,它似乎只是内部填充(在文本和按钮边缘之间)正在设置。我确信我忽略了一些东西,如果能帮助找出这个 space 存在的原因,我将不胜感激。
auth.dart(屏幕显示如图)
...
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Row(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(flex: 2, child: Container()),
Expanded(
flex: 8,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Padding(
padding: EdgeInsets.fromLTRB(0, 0, 0, 32),
child: Image(
fit: BoxFit.contain,
image: AssetImage('lib/res/drawable/logo.webp'))),
PrimaryButton(
onPressed: //...,
child: Text('Log In')),
PrimaryButton(
onPressed: //...,
child: Text('Sign Up')),
])),
Expanded(flex: 2, child: Container()),
]));
}
primary_button.dart(扩展 RaisedButton
的自定义圆形按钮小部件):
...
Widget build(BuildContext context) {
return Theme(
data: Theme.of(context).copyWith(
textTheme: Theme.of(context).textTheme,
buttonTheme: Theme.of(context).buttonTheme.copyWith(
padding: EdgeInsets.all(0),
minWidth: double.infinity,
buttonColor: Theme.of(context).accentColor,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24))),
),
child: Builder(builder: super.build));
}
添加 属性 materialTapTargetSize
并将其设置为 MaterialTapTargetSize.shrinkWrap
。
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
如果您查看 RawMaterialButton
的源代码,它会根据该值添加一个填充:
Size minSize;
switch (widget.materialTapTargetSize) {
case MaterialTapTargetSize.padded:
minSize = const Size(48.0, 48.0);
break;
case MaterialTapTargetSize.shrinkWrap:
minSize = Size.zero;
break;
}
return Semantics(
container: true,
button: true,
enabled: widget.enabled,
child: _InputPadding(
minSize: minSize,
child: result,
),
);