Flutter 测试小部件 find.byType(TextField) 有效,find.byWidget(TextField()) 无效。为什么?
Flutter Test Widgets find.byType(TextField) Works, find.byWidget(TextField()) Doesn't work. Why?
我刚刚开始进行 flutter 小部件测试并遇到了这个问题。我想知道这是否是预期的行为。
当尝试使用 find.byType 找到我的 TextField 时,它成功了,但使用 find.byWidget 却没有。这是正常的还是我做错了什么?目标是稍后在文本字段中输入文本,然后点击按钮。
我的文本框和按钮:
Column(
children: [
TextField(
style: TextStyle(
color: Colors.black,
),
autofocus: true,
autocorrect: false,
enableSuggestions: false,
controller: _controller,
cursorColor: Colors.black,
decoration: InputDecoration(
hintText: 'Fill in.....',
hintStyle: TextStyle(fontSize: 18),
),
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
ElevatedButton(
onPressed: () {
onSubmit(_controller.text);
},
child: Text('Press me!',
style: TextStyle(
fontSize: 18,
color: Theme.of(context).primaryColorBrightness ==
Brightness.dark
? Colors.white
: Colors.black,
))),
],),
],
),
这是我的测试:
tester.ensureVisible(find.byType(TextInputWidget));
expect(find.byType(TextInputWidget), findsOneWidget);
final a = TextField(
style: TextStyle(
color: Colors.black,
),
autofocus: true,
autocorrect: false,
enableSuggestions: false,
controller: TextEditingController(),
cursorColor: Colors.black,
decoration: InputDecoration(
hintText: 'Fill in.....',
hintStyle: TextStyle(fontSize: 18),
),
);
//expect(find.byWidget(a), findsOneWidget); // Fails
expect(find.byType(TextField), findsOneWidget); //Succeeds
您的部分测试丢失了,但您似乎正试图在您的测试仪中查找未知的小部件 a
。
如果你想通过它的变量引用找到一个小部件,你必须在定义小部件时使用相同的引用,然后传递给 pumpWidget()
方法,如下所示:
final a = TextField(...);
tester.pumpWidget(Container(
child: a,
));
expect(find.byWidget(a), findsOneWidget);
我刚刚开始进行 flutter 小部件测试并遇到了这个问题。我想知道这是否是预期的行为。 当尝试使用 find.byType 找到我的 TextField 时,它成功了,但使用 find.byWidget 却没有。这是正常的还是我做错了什么?目标是稍后在文本字段中输入文本,然后点击按钮。
我的文本框和按钮:
Column(
children: [
TextField(
style: TextStyle(
color: Colors.black,
),
autofocus: true,
autocorrect: false,
enableSuggestions: false,
controller: _controller,
cursorColor: Colors.black,
decoration: InputDecoration(
hintText: 'Fill in.....',
hintStyle: TextStyle(fontSize: 18),
),
),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
ElevatedButton(
onPressed: () {
onSubmit(_controller.text);
},
child: Text('Press me!',
style: TextStyle(
fontSize: 18,
color: Theme.of(context).primaryColorBrightness ==
Brightness.dark
? Colors.white
: Colors.black,
))),
],),
],
),
这是我的测试:
tester.ensureVisible(find.byType(TextInputWidget));
expect(find.byType(TextInputWidget), findsOneWidget);
final a = TextField(
style: TextStyle(
color: Colors.black,
),
autofocus: true,
autocorrect: false,
enableSuggestions: false,
controller: TextEditingController(),
cursorColor: Colors.black,
decoration: InputDecoration(
hintText: 'Fill in.....',
hintStyle: TextStyle(fontSize: 18),
),
);
//expect(find.byWidget(a), findsOneWidget); // Fails
expect(find.byType(TextField), findsOneWidget); //Succeeds
您的部分测试丢失了,但您似乎正试图在您的测试仪中查找未知的小部件 a
。
如果你想通过它的变量引用找到一个小部件,你必须在定义小部件时使用相同的引用,然后传递给 pumpWidget()
方法,如下所示:
final a = TextField(...);
tester.pumpWidget(Container(
child: a,
));
expect(find.byWidget(a), findsOneWidget);