如何测试Flutter小部件的内在大小

5
我有一个自定义文本小部件,我想测试该小部件对于某些文本字符串具有特定的固有大小。
void main() {
  testWidgets('MongolRichText has correct size for string', (WidgetTester tester) async {
    await tester.pumpWidget(MongolRichText(text: TextSpan(text: 'hello'),));

    final finder = find.byType(MongolRichText);
    expect(finder, findsOneWidget);

    // How do I check the size?
  });
}

我该如何检查小部件的固有大小?

我不是在试图限制屏幕大小,就像这个问题中所述。

我在Flutter源代码中找到了答案,因此我将其发布为问答对。我的答案如下。

1个回答

17

WidgetTester有一个getSize方法,您可以使用它来获取小部件的渲染大小。

void main() {
  testWidgets('MongolRichText has correct size for string', (WidgetTester tester) async {
    await tester.pumpWidget(Center(child: MongolText('Hello')));

    MongolRichText text = tester.firstWidget(find.byType(MongolRichText));
    expect(text, isNotNull);

    final Size baseSize = tester.getSize(find.byType(MongolRichText));
    expect(baseSize.width, equals(30.0));
    expect(baseSize.height, equals(150.0));
  });
}

备注:

  • 将自定义小部件放入Center小部件中可使其包装内容。否则,getSize将获取屏幕大小。
  • 我通过运行测试并查看实际值来获得实际数字。它们似乎合理(MongolRichText是垂直文本),因此我使用预期数字更新了测试以使测试通过。
  • 此解决方案改编自Flutter文本小部件测试源代码

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接