Flutter 响应式布局

1,516 阅读2分钟

响应式应用指的是应用的 UI 会随着屏幕或窗口的改变而改变,当同一个应用需要运行在不同种类的设备的时候(比如手表、手机、平板、笔记本或台式机电脑),当用户在笔记本或台式机上调整窗口大小,或者改变了手机或者平板的方向时,你的应用都需要相应的重新调整界面来做出响应。

方式:

1. 使用 LayoutBuilder 类

通过它的 builder 属性你能得到一个 BoxConstraints对象,通过检查 constraints 的属性来确定要显示的内容。

  • 如果你的 maxWidth(最大宽度)大于你的宽度断点,它会返回一个包含居左的列表的 Scaffold 对象。
  • 如果它更窄,则会通过返回包含一个抽屉(drawer)的Scaffold 对象。
  • 同时你可以根据设备的高度、宽高比或者其他属性调整 UI 显示,当 constraints 发生变化时候,比如用户旋转手机或者应用分屏时, build 函数都会执行。

2. 在 build 函数里使用 MediaQuery.of() 方法

 MediaQuery.of(context).size.width/MediaQuery.of(context).size.height

3. Expanded and Flexible

在Row或Column中特别有用的小部件是 Expanded 和 Flexible。当Expanded 使用在一个Row、Column或Flex中,Expanded 可以使它的子Widget自动填充可用空间,与之相反,Flexible 的子widget不会填满整个可用空间。

4.FractionallySizedBox

FractionallySizedBox widget将其子元素的大小调整为可用空间的一小部分。当你想让你的widget,占据当前屏幕宽度和高度的百分之多少时,使用这个组件,想在Row和Column组件中使用百分比布局时,需要在FractionallySizedBox外包裹一个expanded或flexible

5,AspectRatio

可以使用AspectRatio小部件将子元素的大小调整为特定的长宽比。首先,它尝试布局约束允许的最大宽度,并通过将给定的高宽比应用于宽度来决定高度。