【问题标题】:Flutter - How to create a vertical line between two widgetsFlutter - 如何在两个小部件之间创建一条垂直线
【发布时间】:2022-03-06 04:06:19
【问题描述】:

我需要在两个小部件之间创建一条垂直线,如下所示:https://imgur.com/a/22ybF6o

我可以这样做,但要固定大小。如果这个尺寸发生变化,布局就会变得像这样混乱:https://imgur.com/a/kO9NXlJ

这是我的代码:

Widget listItem(TripsData item) {
    var startDate = DateFormat('dd/MM/yy - HH:mm').format(DateTime.parse(item.start));
    var endDate = DateFormat('dd/MM/yy - HH:mm').format(DateTime.parse(item.end));
    return Card(
      child: Stack(
        children: <Widget>[
          drawDestinationLine(Colors.red),
          Column(
            children: <Widget>[
              ListTile(
                leading: drawDestinationCircle('A', Colors.blue),
                title: Text(startDate),
                subtitle: Text(item.locationStart),
              ),
              const Padding(padding: EdgeInsets.only(bottom: 2.0)),
              ListTile(
                leading: drawDestinationCircle('B', Colors.blue),
                title: Text(endDate),
                subtitle: Text(item.locationEnd),
              ),
            ],
          ),
        ],
      ),
    );
  }

有人可以帮我解决这个问题吗?

如果需要更多代码,请告诉我,但 StackOverflow 没有让我在这里放更多代码..

【问题讨论】:

    标签: flutter flutter-layout


    【解决方案1】:

    我使用了 timelines 0.1.0 包,这使得这很容易实现

    查看pub.dev 和相应的Github repo 以获得很好的示例。

    其中一个示例用例看起来像您要查找的内容:

    【讨论】:

      【解决方案2】:

      在这种情况下,您应该使用 Stack、Positioned 和 ConstrainedBox 小部件来创建所需的排列。

      类似这个伪代码,你需要提供正确的坐标:

      Stack ( children: [
         Positioned ( left: 0.0 , top : 0.0 , child:  
           ListTile (leading: drawDestinationCircle('A', Colors.blue),
                      title: Text(startDate),
                      subtitle: Text(item.locationStart),
                    )),
         Positioned ( left: 0.0 , bottom : 0.0 , child:  
           ListTile (leading: drawDestinationCircle('B', Colors.blue),
                        title: Text(endDate),
                        subtitle: Text(item.locationEnd),
                      )),
         Positioned ( left 20.0 , top : 20.0 
                    , child: ConstrainedBox(
                             constraints: new BoxConstraints(
                                    minHeight: 5.0,
                                    minWidth: 5.0,
                                    maxHeight: 30.0,
                                    maxWidth: 5.0,
                                    ),
                                 child: new DecoratedBox(
                                   decoration: new BoxDecoration(color: Colors.red),
                                 )
                             ),
                    )
                ]);
      

      【讨论】:

      • 我试过了,圆圈还在,但文字没有,文字消失了
      • 如前所述,以上是伪代码。注意到的新小部件将完成您想做的事情。您可能想要远离 ListTile,并可能使用 Row & Text 和 & Image/Icon Widgets 来完成您想要的外观。不过,我通常对 ListTile 有好运。也许您可能想探索更多的文本小部件选项。或者可能暂时将您的文本缩短为一个字符,以查看它是否是某种类型的出血情况。
      猜你喜欢
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多