gpt4 book ai didi

flutter - 小部件测试以断言文本小部件样式

转载 作者:行者123 更新时间:2023-12-05 02:42:18 27 4
gpt4 key购买 nike

我正在构建任务/待办事项小部件。 Task 小部件是使用 ListTileCheckbox 小部件实现的。

class _TaskListItemState extends State<TaskListItem> {
@override
Widget build(BuildContext context) {
return InkWell(
onTap: _goToTaskScreen,
child: ListTile(
leading: Checkbox(
value: widget.task.isComplete, onChanged: _toggleTaskComplete),
title: Text(
widget.task.title,
style: TextStyle(
decoration: widget.task.isComplete
? TextDecoration.lineThrough
: null,
color: widget.task.isComplete ? Colors.grey : null),
),
),
);
}

void _goToTaskScreen() {...}

void _toggleTaskComplete(bool? value) {...});
}
}

我正在尝试测试小部件,如果任务完成,那么小部件的文本样式装饰应该是删除线,否则是正常的。

testWidgets(
'if the isCompleted is true, then title text should be strikethrough',
(WidgetTester tester) async {
// Arrange
const testKey = ValueKey('my-key-1');
const testTitle = 'Demo title';
const testProjectID = 555;
final DateTime testDueDate = DateTime.now();
const testIsComplete = true;

final Task taskComplete = Task(
title: testTitle,
projectID: testProjectID,
dueDate: testDueDate,
isComplete: testIsComplete);

await tester.pumpWidget(MaterialApp(
home: Material(
child: TaskListItem(key: testKey, task: taskComplete),
),
));

final textFinder = find.byType(Text);
final textWidget = tester.firstWidget(textFinder);

expect(textWidget.style.decoration, TextDecoration.lineThrough);
});

应用在运行 nng flutter run 时运行良好。

但这会在运行 flutter test 时引发错误:

est/widgets/task_list_item_test.dart:57:25: Error: The getter 'style'isn't defined for the class 'Widget'.

  • 'Widget' is from 'package:flutter/src/widgets/framework.dart' ('/C:/flutter/packages/flutter/lib/src/widgets/framework.dart'). Trycorrecting the name to the name of an existing getter, or defining agetter or field named 'style'.expect(textWidget.style.decoration, TextDecoration.lineThrough);^^^^^

我知道我遗漏了一些东西,因为我才学习 flutter 一个多星期。你能帮我如何执行小部件测试来断言文本小部件样式吗?谢谢!

最佳答案

在我自己遇到这个问题并研究了在 Text 小部件上测试/断言样式的解决方案后,我发现了 find.byWidgetPredicate实现这一目标的最有效方法。

对于您的情况,您可以像这样使用 byWidgetPredicate:

// Define your finder with specific conditions here:
final textWithStrikeThrough = find.byWidgetPredicate(
(widget) =>
widget is Text &&
widget.style.decoration == TextDecoration.lineThrough,
description: '`Text` widget with strike through',
);

// Now you can use this finder like other finders.
expect(
textWithStrikeThrough,
findsOneWidget,
);

关于flutter - 小部件测试以断言文本小部件样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67688965/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com