我在Flutter中很难将图标与两行富文本对齐。如下图所示,我想将一个富文本小工具与一个图标对齐。示例:包含"修订注解"和"自由注解"的富文本应该与绿色图标勾号在同一行。如果我尝试只使用一行文本,勾号将与其对齐,但现在如果我有两行富文本,它将不会对齐。
感谢您的帮助!
图片:
代码:
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
RichText(
text: TextSpan(
style: DefaultTextStyle.of(context).style,
children: const <TextSpan>[
TextSpan(
text: 'Revision notes\n',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold)),
TextSpan(text: 'Free notes.'),
],
),
),
RichText(
text: TextSpan(
style: DefaultTextStyle.of(context).style,
children: const <TextSpan>[
TextSpan(
text: 'Quizzes\n',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold)),
TextSpan(text: 'Free quizzes.'),
],
),
),
RichText(
text: TextSpan(
style: DefaultTextStyle.of(context).style,
children: const <TextSpan>[
TextSpan(
text: 'No Ads\n',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold)),
TextSpan(text: 'All annoying ads gone.'),
],
),
),
RichText(
text: TextSpan(
style: DefaultTextStyle.of(context).style,
children: const <TextSpan>[
TextSpan(
text: '10 Flashcards\n',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold)),
TextSpan(text: 'Create your own 10 flashcards.'),
],
),
),
RichText(
text: TextSpan(
style: DefaultTextStyle.of(context).style,
children: const <TextSpan>[
TextSpan(
text: 'Textbooks\n',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold)),
TextSpan(text: 'Download all textbooks in PDF.'),
],
),
),
RichText(
text: TextSpan(
style: DefaultTextStyle.of(context).style,
children: const <TextSpan>[
TextSpan(
text: 'State Trial Papers\n',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold)),
TextSpan(text: 'Download all trial papers in PDF.'),
],
),
),
],
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Icon(
Icons.done_rounded,
color: Colors.green,
size: 24.0,
),
Icon(
Icons.done_rounded,
color: Colors.green,
size: 24.0,
),
Icon(
Icons.done_rounded,
color: Colors.green,
size: 24.0,
),
Icon(
Icons.done_rounded,
color: Colors.green,
size: 24.0,
),
Icon(
Icons.close,
color: Colors.red,
size: 24.0,
),
Icon(
Icons.close,
color: Colors.red,
size: 24.0,
),
],
),
]),
3条答案
按热度按时间jgzswidk1#
溶液1
我会首先尝试把富文本小部件和相应的图标放在一行中,垂直居中元素,而不是两个单独的列,这使得它有点复杂。像这样(只有1行的例子):
mainAxisAlignment
属性将对齐元素,将它们一个推到屏幕的左边,一个推到屏幕的右边。crossAxisAlignment
属性将通过垂直居中对齐元素。溶液2
如果你仍然需要两列,那么你可以用LayoutBuilder读取左边单行的高度,然后用这个大小作为图标的高度。另一种方法是给所有行固定高度,因为你总是有相同大小的标题和副标题(最好测试这个小屏幕),所以你完全解决了这个问题。我会把这个作为最后一个解决方案。
s5a0g9ez2#
使用一行并在它们之间放置一个空格(我在这里使用了一个空格,你可以使用一个SizedBox或类似的东西):
m3eecexj3#
我建议你创建一个小部件来创建每一行,这样你的代码会更易读。看看我的例子:
这是我的输出: