繁体   English   中英

Flutter 小部件测试:未应用 MediaQuery 设置填充

[英]Flutter widget test: setting padding with MediaQuery not applied

由于 Flutter 的测试环境不包含像模拟器这样的系统状态栏,我想使用MediaQuery在顶部添加填充。

这是我的测试代码:

void main() {
  testWidgets('MediaQuery padding test', (WidgetTester tester) async {
    const double statusBarHeight = 24.0;

    await tester.pumpWidget(
      MaterialApp(
        home: MediaQuery(
          data: const MediaQueryData(
            viewInsets: EdgeInsets.only(top: statusBarHeight),
          ),
          child: Scaffold(
            appBar: AppBar(
              title: const Text('PopupMenu Test'),
            ),
              
          ),
        ),
      ),
    );

    expect(find.byType(AppBar), findsOneWidget);
    expect(tester.getTopLeft(find.byType(AppBar)).dy, windowPaddingTop);
  });
}

由于我使用MediaQueryData.viewInsets添加了24.0的顶部填充,我预计 AppBar 左上 y 轴为24.0 ,但结果为零。
我也尝试使用viewPadding而不是viewInsets进行测试,但它产生了相同的结果。

我想知道我的测试中没有应用顶部填充的原因,以及如何解决这个问题。 我将不胜感激任何帮助。 谢谢。

老答案:
[您不应该以这种方式使用 MediaQuery 和 Scaffold。 MediaQuery 不应位于小部件树内,并使用它来检索媒体数据。 脚手架应覆盖整个屏幕]

更新(基于评论中的答案):

他们正在使用MediaQuery来模拟非安全区域,例如某些移动设备中的缺口。 这仅用于测试脚手架小部件以防止入侵安全区域(如缺口)。

如果你只是想测试,错误在这里:

viewInsets: EdgeInsets.only(top: statusBarHeight),

它应该是 viewPadding 而不是 viewInsets:

viewPadding: EdgeInsets.only(bottom: viewPadding),

现在,如果您尝试构建屏幕而不是测试屏幕,则不需要(也不应该)使用 MediaQuery。 只需使用您的 Scaffold 作为根小部件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM