Как объединить символы юникода во флаттере? - PullRequest
1 голос
/ 06 мая 2019

Мне нужно отобразить объединяющий символ перевода строки (Unicode U + 0305) над некоторыми другими символами, такими как '2' или 'x'.

https://www.fileformat.info/info/unicode/char/0305/index.htm

Есть ли способчтобы сделать это в дартс?

Заранее спасибо.

1 Ответ

1 голос
/ 06 мая 2019

Вы можете объединить, поместив юникод сразу после буквы:

String overlined = 'O\u{0305}V\u{0305}E\u{0305}R\u{0305}';

print(overlined);  // Output: O̅V̅E̅R̅ 

Более динамическая версия (с упрощенной логикой) будет:

void main() {
  String overlined = overline('I AM AN OVERLINED TEXT');

  print(overlined);  // Output: I̅ A̅M̅ A̅N̅ O̅V̅E̅R̅L̅I̅N̅E̅D̅ T̅E̅X̅T̅
}

String overline(String text) {
  return text.split('').map((String char) {
    if (char.trim().isEmpty)
      return char;
    else
      return '$char\u{0305}';
  }).join();
}

Однако, это довольносильно ограничен.Лучшим подходом было бы использовать свойство style Text Флаттера для этого:

const Text(
  'OVER',
  style: TextStyle(decoration: TextDecoration.overline),
);
...