代码之家  ›  专栏  ›  技术社区  ›  Jordan Davies

如何在不同的屏幕大小上测试颤振小部件?

  •  3
  • Jordan Davies  · 技术社区  · 7 年前

    我有一个flatter小部件,它根据屏幕大小显示额外的数据。有人知道在多个不同的屏幕大小上测试这个小部件的方法吗?

    widget_tester 源代码,但找不到任何内容。

    2 回复  |  直到 7 年前
        1
  •  35
  •   Rémi Rousselet    6 年前

    可以使用指定自定义曲面大小 WidgetTester

    import 'package:flutter/widgets.dart';
    import 'package:flutter_test/flutter_test.dart';
    
    void main() {
      testWidgets("foo", (tester) async {
        tester.binding.window.physicalSizeTestValue = Size(42, 42);
    
        // resets the screen to its orinal size after the test end
        addTearDown(tester.binding.window.clearPhysicalSizeTestValue);
    
        // TODO: do something
      });
    }
    
        2
  •  24
  •   VizGhar    7 年前

    不知道为什么,但@rmi rousselet的解决方案对我不起作用。我必须使用 binding.window.physicalSizeTestValue binding.window.devicePixelRatioTestValue 所以输出是完全确定的

    void main() {
    
      final TestWidgetsFlutterBinding binding =
        TestWidgetsFlutterBinding.ensureInitialized();
    
      testWidgets("Basic layout test (mobile device)", (tester) async {
        binding.window.physicalSizeTestValue = Size(400, 200);
        binding.window.devicePixelRatioTestValue = 1.0;
    
        await tester.pumpWidget(new MyApp());
    
        expect(find.byType(MyHomePage), findsOneWidget);
        // etc.
      });
    }
    
        3
  •  8
  •   Pegasis    6 年前

    有一个叫做 device_preview 可以模拟在不同设备上运行的颤振应用程序。

        4
  •  5
  •   Mark    7 年前

    此外,如果要测试方向更改,请尝试以下操作:

    const double PORTRAIT_WIDTH = 400.0;
    const double PORTRAIT_HEIGHT = 800.0;
    const double LANDSCAPE_WIDTH = PORTRAIT_HEIGHT;
    const double LANDSCAPE_HEIGHT = PORTRAIT_WIDTH;
    
    final TestWidgetsFlutterBinding binding = TestWidgetsFlutterBinding.ensureInitialized();
    
    await binding.setSurfaceSize(Size(PORTRAIT_WIDTH, PORTRAIT_HEIGHT));
    await tester.pumpWidget(MyWidget());
    
    // test in portrait
    
    await binding.setSurfaceSize(Size(LANDSCAPE_WIDTH, LANDSCAPE_HEIGHT));
    await tester.pumpAndSettle();
    
    // OrientationBuilder gets triggered
    
    // test in landscape
    
        5
  •  2
  •   Jorge Wander Santana Ureña    5 年前

    您可以尝试此小部件来测试您的小部件实时更改屏幕大小

    https://pub.dev/packages/screen_size_test

    预览

    enter image description here

    演示 https://dartpad.dartlang.org/43d9c47a8bf031ce3ef2f6314c9dbd52

    代码示例

    import 'package:screen_size_test/screen_size_test.dart';
    ...
    MaterialApp(
      title: 'Demo',
      builder: (context, child) => ScreenSizeTest(
        child: child,
      ),
      home: Scaffold(
        body: ListView(
          children: List.generate(
              20,
              (index) => Container(
                    padding: EdgeInsets.all(10),
                    child: Placeholder(),
                  )),
        ),
      ),
    )
    
        6
  •  0
  •   Jordan Davies    7 年前

    MediaQuery 控件并设置大小。

    import 'package:flutter/material.dart';
    import 'package:flutter_test/flutter_test.dart';
    
    void main() {
      Widget makeTestableWidget({Widget child, Size size}) {
        return MaterialApp(
          home: MediaQuery(
            data: MediaQueryData(size: size),
            child: child,
          ),
        );
      }
    
      testWidgets("tablet", (tester) async {
        final testableWidget = makeTestableWidget(
          child: WidgetUnderTest(),
          size: Size(1024, 768),
        );
    
        ...
      });
    
      testWidgets("phone", (tester) async {
        final testableWidget = makeTestableWidget(
          child: WidgetUnderTest(),
          size: Size(375, 812),
        );
    
        ...
      });
    }