创建响应式和自适应应用
Flutter 的主要目标之一是创建一个框架,让你能够从一个代码库开发应用,这些应用在任何平台上看起来都很棒,而且感觉也很好。
这意味着你的应用可能出现在各种尺寸的屏幕上,从手表到带有两个屏幕的可折叠手机,再到高清显示器。
描述此场景概念的两个术语是自适应和响应式。理想情况下,你希望你的应用同时具备这两者,但这到底是什么意思?这些术语很相似,但它们并不相同。
自适应应用和响应式应用的区别
自适应和响应式可以被视为应用的两个独立维度:你可以拥有一个不自适应的响应式应用,反之亦然。当然,一个应用可以同时具备这两个特性,也可以都不具备。
- 响应式
- 通常,响应式应用已针对可用的屏幕尺寸调整了其布局。通常这意味着(例如),如果用户调整窗口大小或更改设备方向,则重新布局 UI。当同一个应用可以在各种设备上运行时,这一点尤其必要,从手表、手机、平板电脑到笔记本电脑或台式电脑。
- 自适应
- 自适应应用以在不同设备类型(例如移动设备和台式机)上运行,需要处理鼠标和键盘输入以及触摸输入。这也意味着对应用的可视密度、组件选择的工作方式(例如级联菜单与底部工作表)、使用特定于平台的功能(例如顶级窗口)等有不同的期望。
在以下 5 分钟视频中了解更多信息
创建响应式 Flutter 应用
Flutter 允许您创建可自动适应设备屏幕大小和方向的应用。
有两种基本方法来创建具有响应式设计的 Flutter 应用
- 使用
LayoutBuilder
类 - 从其
builder
属性中,您将获得一个BoxConstraints
对象。检查约束属性以决定要显示的内容。例如,如果您的maxWidth
大于您的宽度断点,则返回一个Scaffold
对象,其中包含一行,左侧有一个列表。如果它较窄,则返回一个Scaffold
对象,其中包含一个抽屉,其中包含该列表。您还可以根据设备的高度、纵横比或其他属性调整显示。当约束发生变化时(例如,用户旋转手机或将您的应用放入 Android 上的磁贴 UI 中),构建函数将运行。 - 在您的构建函数中使用
MediaQuery.of()
方法 - 这将为您提供当前应用的大小、方向等。如果您想根据完整上下文而不是仅根据特定小组件的大小做出决策,这将更有用。同样,如果您使用此方法,那么当用户以某种方式更改应用的大小时,您的构建函数将自动运行。
用于创建响应式 UI 的其他有用小组件和类
AspectRatio
CustomSingleChildLayout
CustomMultiChildLayout
FittedBox
FractionallySizedBox
LayoutBuilder
MediaQuery
MediaQueryData
OrientationBuilder
其他资源
有关更多信息,这里有一些资源,包括来自 Flutter 社区的贡献
- 在 Flutter 中针对多种屏幕尺寸和方向进行开发,作者:Deven Joshi
- 在 Flutter 中构建响应式 UI,作者:Raouf Rahiche
- 使跨平台 Flutter 着陆页响应,作者:Priyanka Tyagi
- 如何根据不同的屏幕尺寸使 Flutter 应用响应?,StackOverflow 上的一个问题
创建自适应 Flutter 应用
通过 构建自适应应用了解有关创建自适应 Flutter 应用的更多信息,由 gskinner 团队撰写。
您还可以查看以下 The Boring Show 剧集
如需了解自适应应用的出色示例,请查看 Flutter Folio,这是一个与 gskinner 和 Flutter 团队合作创建的剪贴簿应用
Folio 源代码也在 GitHub 上提供。在 gskinner 博客 上了解更多信息。
其他资源
您可以在以下资源中了解有关创建平台自适应应用的更多信息
- 特定于平台的行为和自适应,此网站上的一个页面。
- Flutter 中的极端 UI 自适应性,Google 地球如何使用 Flutter 将自适应性提升到一个新水平的故事。
- 设计真正的自适应用户界面,Aloïs Deniel 在 Flutter Vikings 2020 大会上发表的博客文章和视频。