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