У меня есть следующий виджет:
class PoinstsDisplayState extends State<PoinstsDisplay> {
@override
Widget build(BuildContext context) {
return new Container(
width: MediaQuery.of(context).size.width*0.9,
margin: EdgeInsets.only(top: 20.0),
padding: EdgeInsets.all(10.0),
decoration: BoxDecoration(
color: Color(0xff2b2b2b),
borderRadius: BorderRadius.circular(10.0),
),
child: new Text(
'5000 Pts',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20.0,
fontFamily: 'Karla'
),
)
);
}
}
Это выглядит так:
Это идеальное положение, теперь я хочу стилизовать номер 5000 и текст «Очки» отдельно, но мне не удалось заставить его работать (центрировать два текста, как на изображении), я пытаюсь с строкой, больше контейнеров, Центральный класс и т. д. и т. д.
Вы, вероятно, захотите использовать некоторую комбинацию mainAxisSize: MainAxisSize.min
, mainAxisAlignment: MainAxisAlignment.center
и поместить отступ или пустой Container
с заданной шириной между двумя текстовыми виджетами для пробела.
class PointsDisplay extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Text(
'5000',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 25.0,
fontFamily: 'Karla'
),
),
Container(width: 5.0,height: 0,),
Text(
'Pts',
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20.0,
fontFamily: 'Times'
),
),
],
);
}
}
Это идеальное использование конструктор форматированного текста с парой TextSpan
с.
Взяв из 2-го образца в флаттер документы, попробуйте:
Text.rich(
TextSpan(
children: <TextSpan>[
TextSpan(text: '5000 ', style: TextStyle(color: Colors.white)),
TextSpan(text: 'pts', style: TextStyle(color: Colors.red)),
],
),
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 20.0,
fontFamily: 'Karla'
),
)
Когда у вас есть WidgetSpan
как дети для TextSpan
, вы можете использовать:
WidgetSpan(
child: Icon(Icons.access_time),
alignment: PlaceholderAlignment.middle
)