【问题标题】:Unwanted space appearing between RaisedButton widgets in a column列中 RaisedButton 小部件之间出现不需要的空间
【发布时间】:2019-05-11 21:11:42
【问题描述】:

tl;dr 为什么我没有明确设置两个按钮之间会出现空格?

我正在尝试制作如下布局:

但是,两个按钮之间出现了大约 16 像素的空间,我不知道它是从哪里来的。

我起初认为Column 可能是在添加空间,但我使用的是MainAxisAlignment.center,它不应该添加任何空间。我现在认为可能有一些 Material 主题会自动将填充应用于RaisedButton,但是我查看了button_theme.dartraised_button.dart,它似乎只是内部填充(在文本和按钮边缘之间)正在设置。我确信我忽略了一些东西,如果能帮助我找出这个空间存在的原因,我将不胜感激。

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));
}

【问题讨论】:

    标签: dart widget flutter flutter-layout


    【解决方案1】:

    添加属性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,
              ),
            );
    

    【讨论】:

      猜你喜欢
      • 2017-10-23
      • 1970-01-01
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 1970-01-01
      • 2019-05-09
      • 2019-05-05
      相关资源
      最近更新 更多