Flutter 小部件单元测试抛出“找不到方向性小部件”

A.K*_*.K. 7 unit-testing widget dart flutter

我尝试对一个自己的小部件进行单元测试:

\n\n
testWidgets(\'MyWidget has a title and message\', (WidgetTester tester) async {\n  var text = "abc";\n  var label = "def";\n\n  await tester.pumpWidget(LabeledTextWidget(\n    text,\n    label: label,\n  ));\n\n  final textFinder = find.text(text);\n  final labelFinder = find.text(label);\n\n  expect(textFinder , findsOneWidget);\n  expect(labelFinder, findsOneWidget);\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是小部件代码:

\n\n
class LabeledTextWidget extends StatelessWidget {\n  final String text;\n  final String label;\n  LabeledTextWidget(this.text, {this.label});\n\n  @override\n  Widget build(BuildContext context) {\n    return Column(\n      crossAxisAlignment: CrossAxisAlignment.stretch,\n        children: <Widget>[\n         Text(label,style: Theme.of(context).textTheme.caption,),\n         Text(text),\n         ],\n    );\n  }\n
Run Code Online (Sandbox Code Playgroud)\n\n

测试总是抛出异常:

\n\n
...\nNo Directionality widget found.\nRichText widgets require a Directionality widget ancestor.\nThe specific widget that could not find a Directionality ancestor was:\nRichText\n...\n
Run Code Online (Sandbox Code Playgroud)\n\n

我可以通过向所有文本小部件添加文本方向来避免此错误。(textDirection:TextDirection.ltr,),但这是一个糟糕的解决方案,它不适用于行。

\n

A.K*_*.K. 8

好的,这是解决方案。

你必须用这个包装小部件:

Directionality(
  child: MediaQuery(
    data: MediaQueryData(),
    child: LabeledTextWidget(this.text, {this.label}),
  ),
  textDirection: TextDirection.ltr,
);
Run Code Online (Sandbox Code Playgroud)