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

Flutter中如何对齐嵌套列表?让分隔线居中于绿色父容器

解决方案

要让黑色分隔线水平居中于上下绿色盒子,只需在蓝列和红列之间添加一个与绿色盒子同宽(200)的SizedBox,并将分隔线居中放置在这个容器内即可。这种方式既保证了分隔线与绿色盒子中心对齐,又不会修改红列宽度,也不需要额外内边距或定位组件。

修改后的完整代码如下:

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Horizontal List of Vertical Lists')),
        body: ParentLayout(),
      ),
    );
  }
}

class ParentLayout extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        // Header content (Green Box at the top)
        Container(
          height: 100,
          width: 200,
          color: Colors.green[100],
          child: Center(child: Text("Parent ListView Content Above")),
        ),

        // Horizontal layout with dividing line centered to green boxes
        Expanded(
          child: Row(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              // Blue List
              _generateBlueList(),

              // 分隔线:用与绿色盒子同宽的SizedBox包裹,确保居中对齐
              SizedBox(
                width: 200,
                child: Center(
                  child: VerticalDivider(
                    color: Colors.black,
                    thickness: 2,
                  ),
                ),
              ),

              // Red List
              _generateRedList(),
            ],
          ),
        ),

        // Footer content (Green Box at the bottom)
        Container(
          height: 100,
          width: 200,
          color: Colors.green[100],
          child: Center(child: Text("Parent ListView Content Below")),
        ),
      ],
    );
  }

  // Generate blue list with varying sizes
  Widget _generateBlueList() {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: List.generate(
        5,
        (innerIndex) => Container(
          height: 40 + (innerIndex * 25), // Varying height
          width: 80 + (innerIndex * 40), // Varying width
          color: Colors.blue[100 * (innerIndex + 1)],
          child: Center(
            child: Text(
              'Blue $innerIndex',
              style: TextStyle(color: Colors.white),
            ),
          ),
        ),
      ),
    );
  }

  // Generate red list with fixed sizes
  Widget _generateRedList() {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: List.generate(
        5,
        (innerIndex) => Container(
          height: 60, // Fixed height
          width: 100, // Fixed width
          color: Colors.red[100 * (innerIndex + 1)],
          child: Center(
            child: Text(
              'Red $innerIndex',
              style: TextStyle(color: Colors.white),
            ),
          ),
        ),
      ),
    );
  }
}

核心修改点

  • 在蓝列和红列之间新增一个SizedBox,宽度设置为与绿色盒子一致的200
  • 将VerticalDivider放在该SizedBox的Center组件内,确保分隔线处于SizedBox的中心位置
  • 由于绿色盒子本身是水平居中的,这个SizedBox也会随Row的mainAxisAlignment: MainAxisAlignment.center保持水平居中,因此分隔线的位置与绿色盒子的中心完全对齐

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 09:27:02