Как самостоятельно стилизовать тайскую букву, расположенную над другой буквой во Flutter?

Мои настройки: Flutter v1.17.4, Mac OS X 10.15.4, locale en-US, Dart v2.8.4

В тайском языке гласные могут появляться над и под согласными. В моем приложении для изучения тайского языка я хочу оформить согласный звук иначе, чем связанный с ним гласный.

Используя RichText и TextSpan от Flutter, я почти добился этого. Но, как показано на изображении ниже, есть проблема. Гласный думает, что ему не хватает соответствующего согласного. В результате гласная отображается в виде пунктирного круга там, где ожидается согласная. Согласный находится в предыдущем TextSpan.

Как заставить Flutter отображать этот тайский текст с гласными и согласными с другим стилем и без красного кружка?

Код, создавший символы на изображении ниже.

  RichText thaiConsonantAndVowelAbove(){
    return RichText(
        text: TextSpan(
            children: <TextSpan>[
              TextSpan(text: "ง", style: TextStyle(color: Colors.white, fontSize: 100)),
              TextSpan(text: "ู", style: TextStyle(color: Colors.red, fontSize: 100))
            ]
        )
    );
  }

  @override
  Widget build(BuildContext context) {
    return Row(children: <Widget>[Expanded(child: thaiConsonantAndVowelAbove(), flex: 1)]);
  }

Тайский гласный с ненужным пунктирным кружком


person devdanke    schedule 08.07.2020    source источник
comment
вы использовали тайский шрифт?   -  person dev001    schedule 08.07.2020
comment
Спасибо, dev001! Я использовал Robotium, потому что он нормально отображал тайские символы в обычных ситуациях. Но он не мог справиться с разделением связанных гласных и согласных в TextSpans. Использование тайского шрифта работает. Если вы добавите свой комментарий в качестве ответа, я буду рад его принять. Спасибо еще раз.   -  person devdanke    schedule 08.07.2020


Ответы (1)


Спасибо dev001 за помощь в решении проблемы. Я не знал, что тайский шрифт требуется для некоторого низкоуровневого стиля тайских символов. Тайские и другие шрифты могут правильно отображать тайские символы в большинстве ситуаций. Однако кажется, что только тайские шрифты могут быть использованы для правильной визуализации тайской строки, состоящей из нескольких Flutter TextSpans, и когда эта строка разделена между согласной и гласной (или тоновым знаком), которые должны находиться в том же пространстве, что и согласный.

TL; DR: используйте тайский шрифт, если хотите стилизовать каждую часть тайского текста.

Если dev001 отправит свой комментарий в качестве ответа, я отмечу его как правильный.

Google любезно предоставил доступ ко многим тайским шрифтам: https://fonts.google.com/?subset=thai

person devdanke    schedule 15.07.2020