<

BuildContext パラメーターを TextEditingController.buildTextSpan に追加しました

まとめ

BuildContextパラメータが追加されましたTextEditingController.buildTextSpan

拡張または実装するクラスTextEditingControllerそしてオーバーライドbuildTextSpanを追加する必要がありますBuildContextパラメーターを署名に追加して有効なオーバーライドにします。

の発信者TextEditingController.buildTextSpanを渡す必要がありますBuildContext電話に。

コンテクスト

TextEditingController.buildTextSpanによって呼ばれていますEditableTextコントローラー上でTextSpanそれがレンダリングすること。buildTextSpanを拡張するカスタム クラスでオーバーライドできます。TextEditingController。これによりクラスの拡張が可能になりますTextEditingControllerオーバーライドbuildTextSpan変える テキストの一部のスタイル (リッチ テキスト編集など)。

必要な状態buildTextSpan(以外のTextStylewithComposing引数) 拡張するクラスに渡す必要がありましたTextEditingController

変更内容の説明

とともにBuildContext利用可能、ユーザーはアクセスできるInheritedWidgets中身buildTextSpanテキストのスタイルを設定するために必要な状態を取得するには、 または作成されたものを操作するTextSpan

例を考えてみましょう。HighlightTextEditingControllerしたいのは テキストの色を次のように設定して強調表示します。Theme.accentColor

この変更が行われる前は、コントローラーの実装は次のようになります。

class HighlightTextEditingController extends TextEditingController {
  HighlightTextEditingController(this.highlightColor);

  final Color highlightColor;

  @override
  TextSpan buildTextSpan({TextStyle? style, required bool withComposing}) {
    return super.buildTextSpan(style: TextStyle(color: highlightColor), withComposing: withComposing);
  }

そして、コントローラーのユーザーは色を渡す必要があります コントローラーを作成するとき。

とともにBuildContext利用可能なパラメータ、 のHighlightTextEditingController直接アクセスできるTheme.accentColor使用してTheme.of(BuildContext):

class HighlightTextEditingController extends TextEditingController {
  @override
  TextSpan buildTextSpan({required BuildContext context, TextStyle? style, required bool withComposing}) {
    final Color color = Theme.of(context).accentColor;
    return super.buildTextSpan(context: context, style: TextStyle(color: color), withComposing: withComposing);
  }
}

移行ガイド

オーバーライドTextEditingController.buildTextSpan

追加required BuildContext contextパラメータへの の署名buildTextSpanオーバーライド。

移行前のコード:

class MyTextEditingController {
  @override
  TextSpan buildTextSpan({TextStyle? style, required bool withComposing}) {
    /* ... */
  }
}

移行前のエラー メッセージの例:

'MyTextEditingController.buildTextSpan' ('TextSpan Function({TextStyle? style, required bool withComposing})') isn't a valid override of 'TextEditingController.buildTextSpan' ('TextSpan Function({required BuildContext context, TextStyle? style, required bool withComposing})').

移行後のコード:

class MyTextEditingController {
  @override
  TextSpan buildTextSpan({required BuildContext context, TextStyle? style, required bool withComposing}) {
    /* ... */
  }
}

電話をかけるTextEditingController.buildTextSpan

型の名前付きパラメータ「context」を渡しますBuildContext電話に。

移行前のコード:

TextEditingController controller = /* ... */;
TextSpan span = controller.buildTextSpan(withComposing: false);

移行前のエラー メッセージ:

The named parameter 'context' is required, but there's no corresponding argument.
Try adding the required argument.

移行後のコード:

BuildContext context = /* ... */;
TextEditingController controller = /* ... */;
TextSpan span = controller.buildTextSpan(context: context, withComposing: false);

タイムライン

リリースされたバージョン: 1.26.0
安定版リリース: 2.0.0

参考文献

API ドキュメント:

  • TextEditingController.buildTextSpan

関連する問題:

  • 問題 #72343

関連する PR:

  • リランド「BuildContext パラメーターを TextEditingController.buildTextSpan に追加」 #73510
  • 「BuildContext パラメーターを TextEditingController.buildTextSpan に追加」を元に戻す #73503
  • BuildContext パラメーターを TextEditingController.buildTextSpan に追加します #72344