You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何让Expanded内ListView的ListTile居中对齐?

解决Flutter ListTile居中问题

你的问题核心在于:ListView默认会占满父容器的宽度,ListTile也会自动拉伸填充ListView的宽度,导致列表项内容左对齐,外层的Center无法生效。

解决步骤

修改GeneratorPage中ListView.builder的itemBuilder,用Align组件包裹每个ListTile,设置水平居中:

// class GeneratorPage
return Center(
  child: Column(
    mainAxisAlignment: MainAxisAlignment.center,
    children: [
      Expanded(
        child: ListView.builder(
          itemCount: appState.allPair.length,
          shrinkWrap: true,
          itemBuilder: (context, index) {
            // 用Align包裹ListTile,实现水平居中
            return Align(
              alignment: Alignment.center,
              child: ListTile(
                leading: appState.isFavorite(index)
                    ? const Icon(Icons.favorite)
                    : null,
                title: Text(appState.allPair[index].asPascalCase),
              ),
            );
          },
        ),
      ),
      BigCard(pair: pair),
      const SizedBox(height: 10),
      Row(
        mainAxisSize: MainAxisSize.min,
        children: [
          ElevatedButton.icon(
            onPressed: () {
              appState.toggleFavorite();
            },
            icon: Icon(icon),
            label: const Text('Like'),
          ),
          const SizedBox(width: 10),
          ElevatedButton(
            onPressed: () {
              appState.next();
            },
            child: const Text('Next'),
          ),
        ],
      ),
      const Spacer(),
    ],
  ),
);

原理说明

Align组件会约束其子组件(这里是ListTile)不拉伸填充父容器,而是按照指定的alignment属性对齐,从而让整个列表项(包括爱心图标和文字)水平居中,和你想要的参考效果一致。

内容的提问来源于stack exchange,提问作者Sarzn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 02:58:09