在此问题中Whats the difference between double.infinity and MediaQuery?RémiRousselet建议使用IntrinsicHeight Widget而不是MediaQuery。我想了解IntrinsicHeight优于MediaQuery的优势,因为当我阅读文档时,我会发现此问题-
IntrinsicHeight:此类相对昂贵,因为它在最终布局阶段之前添加了一个推测性布局遍历。避免在可能的地方使用它。在最坏的情况下,此小部件可能会导致树的深度为O(N²)的布局。
所以上面说过,后者比较昂贵,应该尽可能避免,那为什么我们要使用IntrinsicHeight而不是简单的MediaQuery?
IntrinsicHeight =>将高度作为子窗口小部件的最大高度(示例行子窗口),它可能不是屏幕的总高度。需要为每个小部件计算。 REad详细信息https://medium.com/flutter-community/flutter-layout-cheat-sheet-5363348d037e
MediaQuery是根据屏幕尺寸而不是小部件计算的。 REad详细信息https://medium.com/flutter-community/a-guide-to-using-screensize-in-flutter-a-more-readable-approach-901e82556195
[IntrinsicHeight和MediaQuery具有两个完全不同的目的。
MediaQuery提供有关屏幕的信息。然后由您决定使用此信息来更改您的UI(尽管我建议使用double.infinity
或LayoutBuilder)。
IntrinsicHeight是布局实用程序。当您希望窗口小部件具有“理想的最小”大小而不是实际的最小大小时,使用它。
IntrinsicHeight的常见用例是当您希望Row内的所有项目的“ height”是最大项目的大小时都具有相同的“ height”。
如果项目大小,则使用IntrinsicHeight是实现这一目标的only解决方案。
这通常看起来像:
IntrinsicHeight(
child: Row(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [ Whatever(), AnotherItem() ],
),
)