Документы TextDirection говорят:
Flutter разработан для удовлетворения потребностей приложений, написанных на любом из используемых в настоящее время языков мира, независимо от того, используют ли они право налевое или левое правое направление письма. Flutter не поддерживает другие режимы письма, такие как вертикальный текст или текст бустрофедона, поскольку они редко используются в компьютерных программах. (выделение добавлено)
Flutter не только не поддерживает вертикальный текст, но и не будет официально поддерживаться в будущем.Это было раннее проектное решение (см. здесь и здесь ).
Несмотря на это, сегодня существует реальная поддержка вертикальных сценариев.В дополнение к определенным китайским и японским используется, традиционный монгольский сценарий требует этого.Этот сценарий очень часто используется в компьютерных программах во Внутренней Монголии ( пример , пример , пример , пример , пример , пример ).
Это написано сверху вниз, а строки переносятся слева направо:
Кроме того, символы эмодзи и CJK сохраняют своиориентация при вертикальном отображении (не обязательно, но желательно).На изображении ниже в верхнем абзаце показана текущая реализация, а в нижнем абзаце показана правильная вертикальная визуализация:
// sample text
ᠨᠢᠭᠡ ᠬᠣᠶᠠᠷ ᠭᠣᠷᠪᠠ ᠳᠥᠷᠪᠡ ᠲᠠᠪᠤ ᠵᠢᠷᠭᠤᠭᠠ ᠳᠣᠯᠣᠭᠠ ᠨᠠᠢᠮᠠ ᠶᠢᠰᠦ ᠠᠷᠪᠠ one two three four five six seven eight nine ten ??汉字 한국어 モンゴル語 English? ᠮᠣᠩᠭᠣᠯ︖
Поскольку Flutter не делает '• Поддерживать вертикальный скрипт, он должен быть реализован с нуля.Все фактическое расположение текста и рисование выполняется в движке Flutter с LibTxt , поэтому я не могу это изменить.
Что потребуется для создания вертикального текстового виджета сверху вниз
Обновление
Я все еще ищу ответ.Ответ Реми хорош для однострочного текста, но не работает для многострочного.
В настоящее время я изучаю три возможных решения:
- Создание подкласса RenderObject (иливозможно RenderParagraph подкласс), который поддерживает пользовательский StatelessWidget, похожий на виджет RichText.
- Использование виджета CustomPaint
- Создание составного виджета из ListView (одна строка на текстline), виджеты Text и WidgetSpans.
Все это будет связано с измерением текста, его разметкой и получением списка строк.
Еще одно обновление
В настоящее время я склоняюсь к созданию пользовательского виджета и объекта визуализации, который будет имитировать RichText и RenderParagraph.Под капотом RenderParagraph использует TextPainter для разметки и рисования текста.Моя проблема сейчас в том, что TextPainter тесно связан с базовой библиотекой Skia LibTxt.Вот где происходит вся фактическая планировка и покраска.Выкладывание текста во что-либо кроме стандартных ltr и rtl оказывается большой проблемой.
Еще одно обновление
Принятый ответ соответствует критериям, которые я выдвинул в этом вопросе.Я думаю, что это будет отвечать краткосрочным потребностям.У меня есть некоторые оговорки для таких вещей, как применение стиля текста, но мне нужно будет сделать больше тестов.В долгосрочной перспективе я все еще могу попытаться сделать нестандартный макет текста и рисование.