我有这样一个自定义复选框:

   FeedbackCheckBox(
      title: 'Test',
      onChanged: (value) {
        setState(
          () {
            isNeedComeBack = value;
          },
        );
      },
    )

以下是实现:

class FeedbackCheckBox extends HookWidget {
  const FeedbackCheckBox({
    Key? key,
    required this.title,
    required this.onChanged,
    this.textStyle,
    this.padding,
  }) : super(key: key);

  final String title;
  final TextStyle? textStyle;
  final ValueChanged<bool> onChanged;
  final EdgeInsets? padding;
  @override
  Widget build(BuildContext context) {
    final isNeedComeBack = useState<bool>(false);

    return Padding(
      padding: padding ?? const EdgeInsets.only(top: 12),
      child: CustomCheckbox(
        value: isNeedComeBack.value,
        label: title,
        onTap: () {
          isNeedComeBack.value = !isNeedComeBack.value;
          onChanged(isNeedComeBack.value);
        },
      ),
    );
  }
}

现在我想为它编写一个小部件测试.我想当onTap在CustomCheckbox点击时,onChanged: (value)收到正确的值.

这是我的测试:

testWidgets("FeedbackCheckBox widget onChanged works",
    (WidgetTester tester) async {
  bool clicked = false;
  _onTap(v) => clicked = v;

  var mockWidget = FeedbackCheckBox(title: "hhh", onChanged: _onTap);
  final mockCustomCheckboxWidget =
      CustomCheckbox(value: false, onTap: () {});
  await tester.pumpWidget(withMaterialApp(child: mockWidget));
  var customCheckBox =
      tester.firstWidget(find.byWidget(mockCustomCheckboxWidget));
  // await tester.tap(inkWellFinder);
  // await tester.pumpAndSettle();
  // expect(clicked, true);
});

我找到了customCheckBox,但如何触发onTap并在FeedbackCheckBox onChanged上接收值?

推荐答案

我解决了这个问题,这是一个新的测试:

    testWidgets("FeedbackCheckBox widget onChanged works",
        (WidgetTester tester) async {
      bool clicked = true;
      _onTap(v) {
        return clicked = v;
      }

      var mockWidget = FeedbackCheckBox(title: "hhh", onChanged: _onTap);
      await tester.pumpWidget(withMaterialApp(child: mockWidget));
      await tester.tap(find.byType(CustomCheckbox));
      await tester.tap(find.byType(CustomCheckbox));
      expect(clicked, false);
    });
  });
}

Flutter相关问答推荐

Flutter:如何从Bottom Navigator中删除此内容

我如何才能收到每天重复的预定通知?

如何在Flutter 中不从getX库中初始化GetxController中的变量

在Flutter TextField中计算子字符串位置

如何在表格日历标题下方添加文本?

在框中保存对象列表时,类型推断无法正常工作

查询满足AND条件的文档的FiRestore

如何使页面浏览量达到活动页面所要求的高度?

为什么我的页面控制器在使用Riverpod时没有更改我的页面视图?

如何确定Flutter 中的文本 colored颜色 ?

在flutter web上渲染多个Youtube视频

抖动问题:检测到0个或2个或更多具有相同值的[DropdownMenuItem]

Ffltter Firebase向用户添加公司

我如何在Android 13中通过Flutter应用程序打开文件(不是图像、视频或音频)?

在 Dart 中按土耳其语字母顺序对字符串进行排序

Flutter应用无法上传到Microsoft Store

如何从 Firebase `get()` 获取 `DocumentReference`

无法在 flutter 中更新 void 方法内的变量值

仅使用 Flutter 在本地环境中托管 Web 服务器

Flutter:如何将 AssetImage 转换为 Unit8List?