Flutter - Вставить эллипсис переполнения в текст
Я пытаюсь создать строку, в которой центральный текст имеет максимальный размер, а если текстовое содержимое слишком велико, оно подходит по размеру.
Я вставляю свойство TextOverflow.ellipsis
чтобы сократить текст и вставить тройные точки ...
но это не работает.
main.dart
import 'package:flutter/material.dart';
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new HomePage(),
);
}
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) => new Scaffold(
appBar: new AppBar(
backgroundColor: new Color(0xFF26C6DA),
),
body: new ListView (
children: <Widget>[
new Card(
child: new Container(
padding: new EdgeInsets.symmetric(horizontal: 16.0, vertical: 18.0),
child: new Row(
children: <Widget>[
new Container(
padding: new EdgeInsets.only(right: 24.0),
child: new CircleAvatar(
backgroundColor: new Color(0xFFF5F5F5),
radius: 16.0,
)
),
new Container(
padding: new EdgeInsets.only(right: 13.0),
child: new Text(
'Text lar...',
overflow: TextOverflow.ellipsis,
style: new TextStyle(
fontSize: 13.0,
fontFamily: 'Roboto',
color: new Color(0xFF212121),
fontWeight: FontWeight.bold,
),
),
),
new Container(
child: new Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
new Row(
children: <Widget>[
new Text(
'Bill ',
style: new TextStyle(
fontSize: 12.0,
fontFamily: 'Roboto',
color: new Color(0xFF9E9E9E)
),
),
new Text(
'\$ -999.999.999,95',
style: new TextStyle(
fontSize: 14.0,
fontFamily: 'Roboto',
color: new Color(0xFF212121)
),
),
],
),
new Row(
children: <Widget>[
new Text(
'Limit ',
style: new TextStyle(
fontSize: 12.0,
fontFamily: 'Roboto',
color: new Color(0xFF9E9E9E)
),
),
new Text(
'R\$ 900.000.000,95',
style: new TextStyle(
fontSize: 14.0,
fontFamily: 'Roboto',
color: new Color(0xFF9E9E9E)
),
),
],
),
]
)
)
],
),
)
),
]
)
);
}
результат:
![enter image description here]()
Ожидаемый результат :
![enter image description here]()
Ответы
Ответ 1
Вы должны обернуть Container
в Flexible
, чтобы ваш Row
знал, что для Container
быть более узкой, чем ее внутренняя ширина. Expanded
также будет работать.
![screenshot]()
new Flexible(
child: new Container(
padding: new EdgeInsets.only(right: 13.0),
child: new Text(
'Text largeeeeeeeeeeeeeeeeeeeeeee',
overflow: TextOverflow.ellipsis,
style: new TextStyle(
fontSize: 13.0,
fontFamily: 'Roboto',
color: new Color(0xFF212121),
fontWeight: FontWeight.bold,
),
),
),
),
Ответ 2
Использование многоточия
Text(
"This is a long text",
overflow: TextOverflow.ellipsis,
),
![enter image description here]()
Использование Fade
Text(
"This is a long text",
overflow: TextOverflow.fade,
maxLines: 1,
softWrap: false,
),
![enter image description here]()
Использование клипа
Text(
"This is a long text",
overflow: TextOverflow.clip,
maxLines: 1,
softWrap: false,
),
![enter image description here]()
Примечание:
Если вы используете Text
внутри Row
, вы можете поставить над Text
внутри Expanded
, например:
Expanded(
child: AboveText(),
)
Ответ 3
Вы можете использовать этот код для показа текста с многоточием
Text(
"Introduction to Very very very long text",
maxLines: 1,
overflow: TextOverflow.ellipsis,
softWrap: false,
style: TextStyle(color: Colors.black, fontWeight: FontWeight.bold),
),
Ответ 4
Вы можете сделать это так
Expanded(
child: Text(
'Text',
overflow: TextOverflow.ellipsis,
maxLines: 1
)
)
Ответ 5
Я думаю, что родительскому контейнеру должна быть задана максимальная ширина соответствующего размера. Похоже, что поле "Текст" заполнит все пространство, указанное выше.
Ответ 6
SizedBox(
width: 200.0,
child: Text('PRODUCERS CAVITY FIGHTER 50X140g',
overflow: TextOverflow.ellipsis,
style: Theme.of(context).textTheme.body2))
Просто оберните внутри виджет, который может занять определенную ширину, чтобы он работал, или он примет ширину родительского контейнера.
Ответ 7
Обтекание, чьи дочерние элементы находятся в строке или столбце, оберните ваш столбец или строку новым Flexible();
https://github.com/flutter/flutter/issues/4128
Ответ 8
Один из способов исправить переполнение текстового виджета в строке, если, например, сообщение чата может быть одной действительно длинной строкой. Вы можете создать Контейнер и BoxConstraint с maxWidth в нем.
Container(
constraints: BoxConstraints(maxWidth: 200),
child: Text(
(chatName == null) ? " ": chatName,
style: TextStyle(
fontWeight: FontWeight.w400,
color: Colors.black87,
fontSize: 17.0),
)
),