TextDirectionのドキュメントには次のように書かれています。
Flutter は、右から左または左から右の書き込み方向を使用するかどうかにかかわらず、現在使用されている世界中の言語で記述されたアプリケーションのニーズに対応するように設計されています。Flutter は、縦書きテキストや犀形テキストなどの他の書字モードをサポートしていません。これらはコンピューター プログラムではめったに使用されないためです。(強調追加)
Flutter は縦書きテキストをサポートしていないだけでなく、将来的には正式にサポートされなくなります。これは初期の設計上の決定でした (こことここを参照)。
それでも、今日、縦書きのサポートは実際に使用されています。中国語と日本語の特定の用途に加えて、伝統的なモンゴル文字ではそれが必要です。このスクリプトは、内モンゴルのコンピューター プログラムで非常に一般的に使用されます (例、例、例、例、例、例)。
上から下に書かれ、行は左から右に折り返されます。
さらに、絵文字と CJK 文字は、縦に表示されたときにその向きを保持します (絶対に必要というわけではありませんが、推奨されます)。以下の画像では、上の段落は現在の実装を示し、下の段落は正しい垂直レンダリングを示しています。
// sample text
ᠨᠢᠭᠡ ᠬᠣᠶᠠᠷ ᠭᠣᠷᠪᠠ ᠳᠥᠷᠪᠡ ᠲᠠᠪᠤ ᠵᠢᠷᠭᠤᠭᠠ ᠳᠣᠯᠣᠭᠠ ᠨᠠᠢᠮᠠ ᠶᠢᠰᠦ ᠠᠷᠪᠠ one two three four five six seven eight nine ten 汉字 한국어 モンゴル語 English? ᠮᠣᠩᠭᠣᠯ︖
Flutter は垂直スクリプトをサポートしていないため、最初から実装する必要があります。実際のテキストのレイアウトと描画はすべてLibTxtを使用して Flutter エンジンで行われるため、それを変更することはできません。
上から下への垂直の Text ウィジェットを作成するには何が必要ですか?
アップデート
私はまだ答えを探しています。レミの答えは、1 行のテキストには適していますが、複数行のテキストには適していません。
私は現在、3つの異なる可能な解決策を研究しています:
- RichText ウィジェットに似たカスタム StatelessWidget をサポートする RenderObject サブクラス (またはおそらくRenderParagraphサブクラス) を作成します。
- CustomPaint ウィジェットを使用する
- ListView (テキスト行ごとに 1 行)、テキスト ウィジェット、および WidgetSpans の複合ウィジェットを作成します。
これらのすべてには、テキストの測定、レイアウト、および行のリストの取得が含まれます。
別のアップデート
私は現在、RichText と RenderParagraph を模倣するカスタム ウィジェットとレンダリング オブジェクトの作成に傾倒しています。内部では、RenderParagraph は TextPainter を使用してテキストのレイアウトとペイントを行います。私の問題は、TextPainter が基礎となる Skia LibTxt ライブラリに密接に結合されていることです。ここで、実際のレイアウトとペイントがすべて行われます。デフォルトの ltr と rtl 以外にテキストを配置することは、大きな問題であることがわかっています。
さらに別のアップデート
受け入れられた回答は、この質問で提示した基準を満たしています。短期的なニーズに対応できると思います。テキスト スタイルの適用などについてはいくつか保留がありますが、さらにテストを行う必要があります。長期的には、カスタムのテキスト レイアウトとペイントを試してみるかもしれません。