Flutter Text только разрывает строки на пробелах
Моя проблема в том, что флаттер разбивает текст на непробельные символы:
Как я могу сказать флаттеру, что он не сгибает текст в "/", а только тогда, когда он встречает пробел?
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: Scaffold(
body: Center(
child: Container(
width: 220.0,
child: Text(
'This should not break here x/y/z',
style: TextStyle(fontSize: 30.0),
),
),
),
),
);
}
}
Я искал такие пакеты, как auto_size_text, но ничего не нашел, решающего эту проблему.
Редактировать:
Работа с '\n' не является вариантом, поскольку длина текста варьируется, но он всегда включает три символа x/y/z, разделенных косой чертой в конце.
Я бы предпочел не рассчитывать размер визуализированного текста заранее, чтобы определить, следует ли включать новую строку перед x/y/z. Это может показаться немного тяжелым, поскольку это названия карточек, содержащиеся в ListView.
В сети нет проблем, там текст разбивается только на пробелы:
<!DOCTYPE html>
<html>
<body>
<div style="background-color: grey; height: 200px; width: 400px;">
<p style="font-size: 24.0pt;">
This should not break here x/y/z
</p>
</div>
</body>
</html>
2 ответа
https://github.com/flutter/flutter/issues/61081#issuecomment-1103330522
- Замените пробел на NO-BREAK SPACE
'\u00a0'
где не хочется ломаться. Это заставляет двух персонажей вокруг него оставаться вместе в одной строке.- Вставьте НУЛЕВУЮ ШИРИНУ НЕРАЗРЫВНЫЙ ПРОБЕЛ
'\ufeff'
между символами, которые вы не хотите ломать. То же, что и выше, но не занимает места.- Опционально вставьте ZERO WIDTH SPACE
'\u200b'
где вы хотите сломаться. Это позволяет двум персонажам вокруг него свободно ломаться.
Чтобы разбить только вокруг пробелов, замените
Text(string)
с
Text(string.split('').join('\ufeff').replaceAll('\ufeff \ufeff', ' '))
Я обычно использую TextAlign.justify
по размеру текста, и как мне нравится, вы можете попробовать:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: Scaffold(
body: Center(
child: Container(
width: 220.0,
child: Text(
'This should not break here x/y/z',
textAlign: TextAlign.justify,
style: TextStyle(fontSize: 30.0),
),
),
),
),
);
}
}
Также TextAlign.center
неплохо.