在 Flutter 中根据屏幕大小重新排列 UI 元素

Posted

技术标签:

【中文标题】在 Flutter 中根据屏幕大小重新排列 UI 元素【英文标题】:Rearranging UI elements according to screen size in Flutter 【发布时间】:2020-06-27 14:41:12 【问题描述】:

我查看了 Flutter Interactive 19 主题演讲视频,其中提到了一项即将推出的功能,可根据屏幕大小调整和重新排列 UI。在这个视频中,17:30 分钟。

https://youtu.be/NfNdXgJZfFo

6 个月前它还处于“非常早期的阶段”。有人知道它是否已经发布了吗?我相信不是 LayoutBuilder 或 MediaQuery.of(),因为它们在视频主题演讲之前可用。

我知道还有其他开发人员提供的其他软件包,但我对来自 Google 的软件包感兴趣。

【问题讨论】:

【参考方案1】:

我在稳定通道的项目中使用MediaQuery.of(context).size; 来根据宽度更改布局。它对我有用,没有问题。我写了一个区分大屏幕(平板电脑)和小屏幕(智能手机)的小部件。

class ScreenWidthBuilder extends StatelessWidget 
  final Widget Function(BuildContext context, bool isAWideScreen)  builder;
  final int bigScreenUpFrom;

  const ScreenWidthBuilder(Key key, @required this.builder, this.bigScreenUpFrom = 600) : super(key: key);

  @override
  Widget build(BuildContext context) 
    Size screenSize = MediaQuery.of(context).size;
    // screenSize.width changes depending on screen orientation
    bool isAWideScreen = screenSize.width >= this.bigScreenUpFrom;
    return this.builder(context, isAWideScreen);
  

首先我尝试使用LayoutBuilder 小部件,但我能够使用MediaQuery.of(context).size; 获得更好的结果。使用 MediaQuery,您可以请求有关设备屏幕的许多数据(大小、textScaleFactor、方向等)。

欲了解更多信息,请查看:

LayoutBuilder 的文档 从MediaQuery.of(context) 返回的MediaQuery 和MediaQueryData 的文档。

【讨论】:

以上是关于在 Flutter 中根据屏幕大小重新排列 UI 元素的主要内容,如果未能解决你的问题,请参考以下文章

flutter 屏幕尺寸适配字体大小适配

聊聊flutter的UI布局

Flutter中的响应式UI

如何在 Flutter 中根据屏幕大小对长文本进行分页

Flutter Web:创建具有移动应用大小的 UI

Flutter web 获取屏幕大小