[英]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.