17

たとえば、現在のウィジェット ツリーに 1 つの RichText があるとします。

RichText(
 text: TextSpan(
   text: 'Hello ',
   style: DefaultTextStyle.of(context).style,
   children: <TextSpan>[
     TextSpan(text: 'bold', style: TextStyle(fontWeight: FontWeight.bold)),
     TextSpan(text: ' world!'),
   ],
 ),
)

使用しようとしましfind.text('Hello bold world!')たが、テキストではないため機能しません。

4

4 に答える 4

11

これが find.byWidgetPredicate 呼び出しです。

find.byWidgetPredicate((widget) => fromRichTextToPlainText(widget) == 'Hello bold world!')

fromRichTextToPlainText ヘルパー関数を次に示します。RichText ウィジェットに渡すと、プレーン テキストが返されます。

String fromRichTextToPlainText(final Widget widget) {
  if (widget is RichText) {
    if (widget.text is TextSpan) {
      final buffer = StringBuffer();
      (widget.text as TextSpan).computeToPlainText(buffer);
      return buffer.toString();
    }
  }
  return null;
}
于 2020-03-21T17:31:36.523 に答える