文本太长时,卡片元素会缩小高度

时间:2019-03-16 16:15:32

标签: flutter widget word-wrap

我的项目中有一个班级,应该显示一列纸牌。不幸的是,我遇到了一些意外的行为:如果字幕文本太长且被换行,则整个卡的尺寸都会缩小。

const double OUTER_SPACING = 24.0;
const double LINE_SPACING = 16.0;

class TempTypeSelection extends StatelessWidget {

@override
Widget build(BuildContext context) {
    return SafeArea(
        child: Scaffold(
            appBar: AppBar(
                title: Text('Select Type'),
            ),
            body:
            Container(
                margin: EdgeInsets.all(OUTER_SPACING),
                child: Column(
                    crossAxisAlignment: CrossAxisAlignment.stretch,

                    children: <Widget>[
                        createListTile(context, Icons.check_circle_outline, "Title", "helpertext"),
                        createListTile(context, Icons.check_circle_outline, "Title", "helpertext " * 5),
                        createListTile(context, Icons.check_circle_outline, "Title", "helpertext"),
                    ]
                ))

        )
    );
}

Widget createListTile(BuildContext context, IconData icon, String title, String helper) {
    return Card(
        margin: EdgeInsets.only(bottom: LINE_SPACING),
        child: InkWell(
            child: Padding(
                padding: const EdgeInsets.all(0.0),
                child: ListTile(
                    leading: Icon(icon),
                    title: Text(title),
                    subtitle: Text(helper),
                ),
            ),
        )
    );
}
}

查看此处:

Screenshot for above code

这是错误,还是故意的,我不明白为什么?

1 个答案:

答案 0 :(得分:0)

是的,这是预期的行为。如果我们查看ListTile的来源,我们可以看到isTwoLine处理了该行为:

double get _defaultTileHeight {
  final bool hasSubtitle = subtitle != null;
  final bool isTwoLine = !isThreeLine && hasSubtitle;
  final bool isOneLine = !isThreeLine && !hasSubtitle;

  if (isOneLine)
    return isDense ? 48.0 : 56.0;
  if (isTwoLine)
    return isDense ? 64.0 : 72.0;
  return isDense ? 76.0 : 88.0;
}

可悲的是,我无法(仍然)告诉您这种行为的动机是什么。如果我找到更多信息,我将更新此答案。