flutter 如何尽可能缩小内置ListTile沿着水平轴的尺寸?

pb3skfrl  于 2023-04-07  发布在  Flutter
关注(0)|答案(2)|浏览(161)

我可以从头开始创建一个ListTile,使用一个Row,里面有3个children,我们将这些children命名为leadingtitletrailing,然后我可以设置mainAxisSize为最小大小,完成;你现在有一个ListTile,它在水平轴上没有尽可能地增长。
考虑以下示例:

class ListTileShort extends StatelessWidget {
  const ListTileShort({
    super.key,
    required this.title,
    required this.leading,
    required this.trailing,
  });

  final Widget title;
  final Widget leading;
  final Widget trailing;

  @override
  Widget build(BuildContext context) {
    return Row(
      mainAxisSize: MainAxisSize.min,
      children: [leading, title, trailing],
    );
  }
}

如您所见,ListTileShort正在尝试像内置的ListTile一样运行,但作为首选项尽可能缩小。
但是我不喜欢用Row来模拟ListTile,所以我想,是否可以将内置的ListTile在横轴上强制收缩?

2g32fytz

2g32fytz1#

你可以用IntrinsicWidth Package 你的ListTile,这会使你的ListTile成为显示其子节点所需的最小值:

class ListTileShort extends StatelessWidget {
  const ListTileShort({
    Key? key,
    required this.title,
    required this.leading,
    required this.trailing,
  }) : super(key: key);

  final Widget title;
  final Widget leading;
  final Widget trailing;

  @override
  Widget build(BuildContext context) {
    return IntrinsicWidth(
      child: ListTile(
        leading: leading,
        title: title,
        trailing: trailing,
      ),
    );
  }
}

快乐编码...

ycggw6v2

ycggw6v22#

使用ListTile删除所有空格的最简单方法之一是使用dense属性,如下所示

ListTile(
  dense:true,
  contentPadding: EdgeInsets.only(left: 0.0, right: 0.0),
  ....
),

另一种方法是使用visualDensity属性

ListTile(
      visualDensity: VisualDensity(horizontal: 0, vertical: -4),
      ....
    ),

还有一个属性叫做minLeadingWidth。所以,你可以把它变小

minLeadingWidth : 10, //Default is 40

相关问题