Виджет флаттера вызывает юнитесты Нет виджета направленности не найдено - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь протестировать маленький собственный виджет:

testWidgets('MyWidget has a title and message', (WidgetTester tester) async {
  var text = "abc";
  var label = "def";

  await tester.pumpWidget(LabeledTextWidget(
    text,
    label: label,
  ));

  final textFinder = find.text(text);
  final labelFinder = find.text(label);

  expect(textFinder , findsOneWidget);
  expect(labelFinder, findsOneWidget);
});

Вот код виджета:

class LabeledTextWidget extends StatelessWidget {
  final String text;
  final String label;
  LabeledTextWidget(this.text, {this.label});

  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.stretch,
        children: <Widget>[
         Text(label,style: Theme.of(context).textTheme.caption,),
         Text(text),
         ],
    );
  }

Тест всегда выдает исключение:

...
No Directionality widget found.
RichText widgets require a Directionality widget ancestor.
The specific widget that could not find a Directionality ancestor was:
RichText
...

Я могу избежать этой ошибки, добавив направление текста ко всем текстовым виджетам. (textDirection: TextDirection.ltr,), но это плохое решение, и оно не работает со строками.

1 Ответ

0 голосов
/ 28 января 2020

Хорошо, вот решение.

Вы должны обернуть виджет следующим образом:

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