我的项目中有一个班级,应该显示一列纸牌。不幸的是,我遇到了一些意外的行为:如果字幕文本太长且被换行,则整个卡的尺寸都会缩小。
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),
),
),
)
);
}
}
查看此处:
这是错误,还是故意的,我不明白为什么?
答案 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;
}
可悲的是,我无法(仍然)告诉您这种行为的动机是什么。如果我找到更多信息,我将更新此答案。