是否有一种简单的(非layoutbuilder)方法来相对于屏幕大小(宽/高)来调整元素的大小?例如:我如何设置CardView的宽度为屏幕宽度的65%。

它不能在构建方法内部完成(显然),所以它必须推迟到构建后。是否有一个更好的地方来放置这样的逻辑?


当前回答

有很多方法可以做到这一点。

1. 使用MediaQuery:返回设备全屏,包括应用程序栏,工具栏

 Container(
        width: MediaQuery.of(context).size.width * 0.50,
        height: MediaQuery.of(context).size.height*0.50, 
        color: Colors.blueAccent[400],
 )




2. 使用扩展:您可以按比例设置宽度/高度

 Container(
        height: MediaQuery.of(context).size.height * 0.50,
        child: Row(
          children: <Widget>[
            Expanded(
              flex: 70,
              child: Container(
                color: Colors.lightBlue[400],
              ),
            ),
            Expanded(
              flex: 30,
              child: Container(
                color: Colors.deepPurple[800],
              ),
            )
          ],
        ),
    )

3.其他人喜欢灵活和AspectRatio和分数大小的盒子

其他回答

这可能更清楚一点:

double width = MediaQuery.of(context).size.width;

double yourWidth = width * 0.65;

希望这能解决你的问题。

FractionallySizedBox也可能有用。 你也可以直接从MediaQuery.of(context)中读取屏幕宽度。大小,并在此基础上创建一个大小框

MediaQuery.of(context).size.width * 0.65

如果你真的想把屏幕的大小设置成一小部分不管布局是什么。

有几种可能性:

1-第一个是使用MediaQuery:

代码:

MediaQuery.of(context).size.width //to get the width of screen
MediaQuery.of(context).size.height //to get height of screen

使用示例:

Container(
        color: Colors.yellow,
        height: MediaQuery.of(context).size.height * 0.65,
        width: MediaQuery.of(context).size.width,
      )

输出:

2-使用FractionallySizedBox

创建一个小部件,将其子部件的大小设置为总可用空间的一小部分。

例子:

FractionallySizedBox(
           widthFactor: 0.65, // between 0 and 1 
           heightFactor: 1.0,
           child:Container(color: Colors.red
           ,),
         )

输出:

3-使用其他小部件,如Expanded, Flexible和AspectRatio等。

您可以使用Align小部件。hightfactor和widthFactor参数乘以子部件的大小。下面是一个示例,它将创建一个具有%比例固定高度的小部件

         Align(
            alignment: Alignment.topCenter,
            heightFactor: 0.63,
            widthFactor: ,
            child: Container(
              width: double.infinity,
            ),

代码:

MediaQuery.of(context).size.width //to get the width of screen
MediaQuery.of(context).size.height //to get height of screen