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

  1. Замените пробел на NO-BREAK SPACE '\u00a0'где не хочется ломаться. Это заставляет двух персонажей вокруг него оставаться вместе в одной строке.
  2. Вставьте НУЛЕВУЮ ШИРИНУ НЕРАЗРЫВНЫЙ ПРОБЕЛ '\ufeff'между символами, которые вы не хотите ломать. То же, что и выше, но не занимает места.
  3. Опционально вставьте 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 неплохо.

Другие вопросы по тегам