【发布时间】:2019-10-03 20:43:01
【问题描述】:
我正在尝试为我的 Flutter 应用创建类似的东西:
现在我已经成功地获得了一行文字、一条虚线和更大的文字。我似乎无法解决的最后一个问题是消除不同大小文本中的可变大小差距。
[编辑] 我的具体意思是让所有东西都在同一条红线上对齐:
看着this answer,我想我可以做同样的事情并将所有文本放置在定位堆栈中。然而,这打破了我的布局,给了我这个错误:
I/flutter (26439): The following assertion was thrown during performLayout():
I/flutter (26439): RenderFlex children have non-zero flex but incoming height constraints are unbounded.
I/flutter (26439): When a column is in a parent that does not provide a finite height constraint, for example if it is
I/flutter (26439): in a vertical scrollable, it will try to shrink-wrap its children along the vertical axis. Setting a
I/flutter (26439): flex on a child (e.g. using Expanded) indicates that the child is to expand to fill the remaining
I/flutter (26439): space in the vertical direction.
I/flutter (26439): These two directives are mutually exclusive. If a parent is to shrink-wrap its child, the child
I/flutter (26439): cannot simultaneously expand to fit its parent.
I/flutter (26439): Consider setting mainAxisSize to MainAxisSize.min and using FlexFit.loose fits for the flexible
I/flutter (26439): children (using Flexible rather than Expanded). This will allow the flexible children to size
I/flutter (26439): themselves to less than the infinite remaining space they would otherwise be forced to take, and
I/flutter (26439): then will cause the RenderFlex to shrink-wrap the children rather than expanding to fit the maximum
I/flutter (26439): constraints provided by the parent.
I/flutter (26439): The affected RenderFlex is:
I/flutter (26439): RenderFlex#c7fb1 relayoutBoundary=up8 NEEDS-LAYOUT NEEDS-PAINT
I/flutter (26439): The creator information is set to:
I/flutter (26439): Column ← Expanded ← Row ← Column ← Padding ← RepaintBoundary-[<0>] ← IndexedSemantics ←
I/flutter (26439): NotificationListener<KeepAliveNotification> ← KeepAlive ← AutomaticKeepAlive ← SliverList ←
I/flutter (26439): MediaQuery ← ⋯
I/flutter (26439): See also: https://flutter.dev/layout/
这是我的相关代码:
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
Text('Salary Cap'),
// Stack( // Will cause error
// fit: StackFit.expand,
// children: <Widget>[
// Positioned(
// top: 0,
// left: 0,
// width: 200,
// child: Text('Salary Cap'),
// ),
// ],
// ),
Expanded(
child: Container(
width: double.infinity,
child: CustomPaint(painter: LineDashedPainter()),
),
),
RichText(
text: TextSpan(
children: <TextSpan>[
TextSpan(text: '\$'),
TextSpan(
text:
'${oCcy.format(salaryLimit)}',
style: Theme.of(context).textTheme.display1,
),
],
),
),
],
),
有什么建议吗?
【问题讨论】:
-
尝试将您的
Row放入具有固定宽度的Container -
你想用堆栈实现什么? “摆脱不同大小文本中的可变大小差距”是什么意思?如果您的意思是基线未对齐,请查看
CrossAxisAlignment.baseline显示例如here. -
只是调整大文本的位置,也许可以尝试使用
Transform.translate,这里是一个示例docs.flutter.io/flutter/widgets/Transform/… -
@Edman 我从你的建议中得到了它。我只需要在行中添加一个intrinsicHeight 并将
Container包装在Align小部件(Alignment.bottomCenter)中。从那里开始,虚线与文本基线有点偏离,所以我只是在Container的十个中添加了一个底部边距,现在看起来不错。如果您发布一个,我可以标记您的答案。这是gist of my of my code