flutter - 在 SafeArea 中获取小部件高度的正确方法

我正在尝试获取小部件的高度,但它打印的值相同

I/flutter (19253): full height: 976.0
I/flutter (19253): safe height: 976.0

我猜第二个值应该更小,因为 Container 放置在状态栏下方。我做错了什么? 我需要高度,因为在这个容器中将是 Wrap 小部件(实际上是 ReorderableWrap https://pub.dartlang.org/packages/reorderables#-readme-tab-),有 36 张卡片,3 行 x 12 张卡片,卡片高度必须是其容器的 1/3。

我没有找到好的可重排网格。但无论如何,我的问题是为什么安全区域中的 Container 与填满整个屏幕的 Container 具有相同的高度?

import 'package:flutter/material.dart';

void main() {
  runApp(_MyApp());
}

class _MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(body: _Body()),
    );
  }
}

class _Body extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    print('full height: ${MediaQuery.of(context).size.height}');
    return Container(
      constraints: BoxConstraints.expand(),
      decoration: BoxDecoration(color: Colors.red),
      child: SafeArea(
        child: _SafeHeightWidget(),
      ),
    );
  }
}

class _SafeHeightWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    print('safe height: ${MediaQuery.of(context).size.height}');
    return Container(
      color: Colors.lightBlue,
    );
  }
}

最佳答案

我知道有正确答案,但也许有人在寻找安全区域高度,而不是安全区域小部件子项的高度,而只是安全区域顶部填充:

var safePadding = MediaQuery.of(context).padding.top;

https://stackoverflow.com/questions/55610742/

相关文章:

generics - 如何从 Dart/Flutter 中的泛型函数调用命名构造函数

dart - Flutter如何将容器背景设置为透明色

android - Flutter:使用 Sliver 小部件时如何在滚动时隐藏 BottomApp

dart - 在 SnackBarAction onPressed 上 flutter 小吃吧

dart - 我们可以使用 Flutter 或 Dart 制作 Web 应用程序或网站吗

dart - Column 内展开的小部件未展开,而是不可见

dart - 如何在 Dart 中将 Class 对象转换为数据结构 `Map` 或 `List o

dart - Flutter,如何让我的原 Material 纽扣更大更紧密地组合在一起。

dart - 如何在 Dart 中通过 async* 传输错误?

dart - 向 Flutter 中的计算函数发送多个参数