图标在Container中的具体位置,包括BoxDecoration和子代。行

问题描述 投票:0回答:2

我正试图将红色块移动到右边的位置。Container. 我尝试了很多变化,但无论我把代码移到哪里,那个 "红色容器 "的位子,我都不能把它移到右上角的位置。等我把位置调整好了,我会把它变成一个可点击的图标。

我确实把它和其他文字一起移到了儿童Widget中,调整了 "crossAxisAlignment在该行中拉伸,mainAxisAlignment调整为spaceBetween"。

最接近的是第2张图,就是下面添加的代码。

我缺少什么?

enter image description here

enter image description here

items.add(
        Container(
          decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.all(Radius.circular(10.0)),
              boxShadow: [BoxShadow(color: Colors.black12,spreadRadius: 2.0,blurRadius: 5.0),]),
          margin: EdgeInsets.all(5.0),
          child: Row(
            mainAxisSize: MainAxisSize.max,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              ClipRRect(
                borderRadius: BorderRadius.only(
                    topLeft: Radius.circular(10.0),
                    bottomLeft: Radius.circular(10.0)),
                child: Image.asset(object["personImage"],
                  width: 80,height: 80,fit: BoxFit.cover,
                ),
              ),
              Container(
                color: Colors.blue[900],
                child: Padding(
                  padding: const EdgeInsets.fromLTRB(8, 8, 0, 0),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: <Widget>[
                      Text(object["personName"]),
                      Text(object["personPlace"]),
                      Text(object["personDate"]),
                      Text(object["personCircle"]),
                    ],
                  ),
                ),
              ),
              Container(
                alignment: Alignment.topRight,
                height: 42.0,
                width: 42.0,
                color: Colors.red,
              )
            ],
          ),
        ),
      );
    },
  );

  return items;

编辑:所以 两种 的解决方案,效果很好。在蓝色和红色容器之间添加一个小部件。谢谢你们俩::)

T.T Sage " Spacer(),

Viren V Varasadiya " Expanded(child: Container()),

flutter flutter-layout flutter-positioned
2个回答
1
投票

您可以使用一个叫做 Spacer() 为此。

Spacer 小部件占用了您的小部件其他部分没有使用的空间。检查下面的代码,它工作正常。

items.add(
        Container(
          decoration: BoxDecoration(
              color: Colors.white,
              borderRadius: BorderRadius.all(Radius.circular(10.0)),
              boxShadow: [BoxShadow(color: Colors.black12,spreadRadius: 2.0,blurRadius: 5.0),]),
          margin: EdgeInsets.all(5.0),
          child: Row(
            mainAxisSize: MainAxisSize.max,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              ClipRRect(
                borderRadius: BorderRadius.only(
                    topLeft: Radius.circular(10.0),
                    bottomLeft: Radius.circular(10.0)),
                child: Image.asset(object["personImage"],
                  width: 80,height: 80,fit: BoxFit.cover,
                ),
              ),
              Container(
                color: Colors.blue[900],
                child: Padding(
                  padding: const EdgeInsets.fromLTRB(8, 8, 0, 0),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: <Widget>[
                      Text(object["personName"]),
                      Text(object["personPlace"]),
                      Text(object["personDate"]),
                      Text(object["personCircle"]),
                    ],
                  ),
                ),
              ),
              // add your spacer widget here
              Spacer(),
              Container(
                alignment: Alignment.topRight,
                height: 42.0,
                width: 42.0,
                color: Colors.red,
              )
            ],
          ),
        ),
      );
    },
  );

  return items;

我希望这能回答你的问题


1
投票

你需要使用Expanded widget才能做到这一点。

在下面的代码中,我展示了如何添加Expanded widget以及在哪里添加。

Container(
            color: Colors.blue[900],
            child: Padding(
              padding: const EdgeInsets.fromLTRB(8, 8, 0, 0),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: <Widget>[
                  Text(object["personName"]),
                  Text(object["personPlace"]),
                  Text(object["personDate"]),
                  Text(object["personCircle"]),
                ],
              ),
            ),
          ),
          Expanded(child: Container()),  // added widget
          Container(
            alignment: Alignment.topRight,
            height: 42.0,
            width: 42.0,
            color: Colors.red,
          )
© www.soinside.com 2019 - 2024. All rights reserved.