Виджеты для тестирования флаттера в зависимости от констант размера
Я пытаюсь протестировать виджет кнопки во флаттере, который объявлен следующим образом:
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
и инициализируйте свои зависимости