Виджеты для тестирования флаттера в зависимости от констант размера

Я пытаюсь протестировать виджет кнопки во флаттере, который объявлен следующим образом:

Widget build(BuildContext context) {
    return Container(
    height: (4.39 * SizeConfig.heightMultiplier), //30
    width: (7.29 * SizeConfig.widthMultiplier), //30
    decoration: BoxDecoration(
      borderRadius: BorderRadius.all(Radius.circular((1.7 * SizeConfig.imageSizeMultiplier))), // 7
      border: Border.all(
          color: Colors.black,
          width: (0.24 * SizeConfig.widthMultiplier)
      ),
      color: kPrimaryLightColor,
    ),
    child: Icon(
        iconData,
        size: (5.83 * SizeConfig.imageSizeMultiplier), //24
        color: Colors.black),
    ),
  );
}

Класс SizeConfig, содержащий разные значения высоты и ширины, выглядит примерно так:

 void init(BoxConstraints constraints, Orientation orientation) {
    if (orientation == Orientation.portrait) {
      _screenWidth = constraints.maxWidth;
      _screenHeight = constraints.maxHeight;
      isPortrait = true;
      if (_screenWidth < 450) {
        isMobilePortrait = true;
      }
    } else {
      _screenWidth = constraints.maxHeight;
      _screenHeight = constraints.maxWidth;
      isPortrait = false;
      isMobilePortrait = false;
    }

    _blockWidth = _screenWidth / 100;
    _blockHeight = _screenHeight / 100;

    textMultiplier = _blockHeight;
    imageSizeMultiplier = _blockWidth;
    heightMultiplier = _blockHeight;
    widthMultiplier = _blockWidth;
}

И он вызывается в основном файле внутри компоновщика макетов:

 @override
  Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (context, constraints) {
        return OrientationBuilder(
          builder: (context, orientation) {
            SizeConfig().init(constraints, orientation);
            return...
          }
        );
      }
    }
  } 

Теперь при тестировании этого или подобных виджетов, зависящих от размера экрана, как мне создать эти константы. В случае тестирования предыдущего виджета:

testWidgets('MyWidget Test', (WidgetTester tester) async{

  final widget = MyWidget(0);
  await tester.pumpWidget(widget);

  
  expect(find.byType(MyWidget), findsOneWidget);
  
});

Тест не проходит и показывает следующую ошибку:

The method 'toDouble' was called on null.
Receiver: null
Tried calling: toDouble()

Это вызвано нулевыми константами SizeConfig. Как мне проверить это или работать с такими зависимостями?

1 ответ

Оберните свой тестовый виджет OrientationBuilder и инициализируйте свои зависимости

Другие вопросы по тегам