Тест виджетов не получает касаний

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

testWidgets(
  'Save icon callback',
  (WidgetTester tester) async {
    Completer completer = Completer<void>();

    await tester.pumpWidget(
      _TestingApp(
        child: SaveIcon(
          onTap: (_) => completer.complete(),
          initialSaved: false,
        ),
      ),
    );

    var finder = find.byType(InkWell);
    expect(finder, findsOneWidget);

    await tester.tap(finder);

    expect(completer.isCompleted, true);
  },
);

Код виджета:

class SaveIcon extends StatefulWidget {
  SaveIcon({
    @required this.onTap,
    @required this.initialSaved,
  });
  final Function(bool) onTap;
  final bool initialSaved;

  @override
  _SaveIconState createState() => _SaveIconState();
}

class _SaveIconState extends State<SaveIcon> {
  bool _isSaved;

  @override
  void initState() {
    super.initState();
    _isSaved = widget.initialSaved;
  }

  @override
  Widget build(BuildContext context) {
    return InkWell(
      focusColor: Colors.transparent,
      highlightColor: Colors.transparent,
      splashColor: Colors.transparent,
      onTap: () {
        setState(() {
          _isSaved = !_isSaved;
          widget.onTap(_isSaved);
        });
      },
      child: RotatedBox(
        quarterTurns: 2,
        child: AnimatedSwitcher(
          transitionBuilder: (child, animation) =>
              ScaleTransition(child: child, scale: animation),
          duration: Duration(milliseconds: 250),
          child: _isSaved
              ? Image.asset(
                  'assets/icons/save_filled.png',
                  key: const ValueKey<int>(0),
                  height: 21,
                  color: Colors.white,
                )
              : Image.asset(
                  'assets/icons/save.png',
                  key: const ValueKey<int>(1),
                  height: 21,
                  color: Colors.white,
                ),
        ),
      ),
    );
  }
}

Он просто терпит неудачу, поскольку завершение не завершено. (Сообщение об ошибке: при выполнении теста был брошен следующий объект TestFailure: Ожидаемый: true Фактический: false)

Есть идеи, почему это может быть?

0 ответов

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