簡體   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