如何在 Flutter 上将宽度设置为 Material 小部件?

Posted

技术标签:

【中文标题】如何在 Flutter 上将宽度设置为 Material 小部件?【英文标题】:How to set width to Material widget on Flutter? 【发布时间】:2019-07-16 22:46:00 【问题描述】:

我有一个Material 小部件来包装一个MaterialButton 来制作边框半径,但我无法为其设置width 属性。我尝试使用 SizedBox 但不起作用,Material 小部件继续使用屏幕的所有空间。

代码:

return new SizedBox(
              width: 40,
              child: Material(
                shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(22.0)),
                elevation: 18.0,
                color: Color(0xFF801E48),
                clipBehavior: Clip.antiAlias, 
                child: MaterialButton(
                  materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
                  height: 30.0,
                  child: new Text('Sair',
                      style:
                          new TextStyle(fontSize: 16.0, color: Colors.white)),
                ),
              ),
            );

结果:

显然它没有 40.0 的宽度尺寸。

【问题讨论】:

【参考方案1】:

更好的方法是使用 Container 小部件。当您需要更改宽度、高度或向任何小部件添加填充/边距时,您应该将目标小部件包装到容器中。容器小部件适用于此类工作。

Container(
  width: myWidthValue, // Container child widget will get this width value
  height: myHeghtValue, // Container child widget will get this height value
  padding: allowPaddingToo, // padding is allowed too
  child: Material(
                shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(22.0)),
                elevation: 18.0,
                color: Color(0xFF801E48),
                clipBehavior: Clip.antiAlias, // Add This
                child: MaterialButton(
                  materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
                  height: 30.0,
                  child: new Text('Sair',
                      style:
                          new TextStyle(fontSize: 16.0, color: Colors.white)),
                  onPressed: () 
                    setState(() 
                      _isNeedHelp = false;
                    );
                  ,
                ),
              ),
);

【讨论】:

【参考方案2】:

使用Padding解决:

return Padding(
              padding: EdgeInsets.fromLTRB(50, 0, 50, 0),
              child: Material(
                shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(22.0)),
                elevation: 18.0,
                color: Color(0xFF801E48),
                clipBehavior: Clip.antiAlias, // Add This
                child: MaterialButton(
                  materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
                  height: 30.0,
                  child: new Text('Sair',
                      style:
                          new TextStyle(fontSize: 16.0, color: Colors.white)),
                  onPressed: () 
                    setState(() 
                      _isNeedHelp = false;
                    );
                  ,
                ),
              ),
            );

结果:

【讨论】:

【参考方案3】:

一般来说,您可以通过这种方式设置小部件的大小、内边距和边距。这是一个按钮的例子:

   Container(
          margin: EdgeInsets.only(top: 10), // Top Margin
          child:
            ElevatedButton(
              style: TextButton.styleFrom(

                // Inside Padding 
                padding: EdgeInsets.symmetric(horizontal: 0, vertical: 20), 

                // Width,Height
                minimumSize: Size(300, 30), 
              ),
              child: Text('Upload Data'),
              onPressed: () submitForm();,
            ),
        ),

【讨论】:

以上是关于如何在 Flutter 上将宽度设置为 Material 小部件?的主要内容,如果未能解决你的问题,请参考以下文章

CSS在移动设备上将父宽度设置为0时,子溢出

Flutter之Container的宽度如何设置为手机屏幕宽度

Flutter之Container的宽度如何设置为手机屏幕宽度

我想在移动设备上将 zuck.js 故事项目的宽度设置为最大 320px

如何在 Flutter 中拉伸图像以适合整个背景(100% 高度 x 100% 宽度)?

无法使用 flutter_screenutil 包设置高度和宽度