Flutter 为什么集装箱宽度不受尊重?

Flutter 为什么集装箱宽度不受尊重?,flutter,Flutter,我正在尝试创建一个圆形图像。不幸的是,集装箱的宽度没有得到认可,我不明白为什么。我错过了什么 Drawer\u获取Drawer(列表数据){ 回程抽屉( //向抽屉添加列表视图。这确保用户可以滚动 //如果没有足够的垂直线,请通过抽屉中的选项 //空间适合所有东西。 子:ListView( //重要提示:从ListView中删除任何填充。 填充:EdgeInsets.zero, 儿童:[ _getDrawerHeader(), 列表砖( 标题:文本(“项目1”), onTap:(){ //更新

我正在尝试创建一个圆形图像。不幸的是,集装箱的宽度没有得到认可,我不明白为什么。我错过了什么

Drawer\u获取Drawer(列表数据){
回程抽屉(
//向抽屉添加列表视图。这确保用户可以滚动
//如果没有足够的垂直线,请通过抽屉中的选项
//空间适合所有东西。
子:ListView(
//重要提示:从ListView中删除任何填充。
填充:EdgeInsets.zero,
儿童:[
_getDrawerHeader(),
列表砖(
标题:文本(“项目1”),
onTap:(){
//更新应用程序的状态
// ...
},
),
列表砖(
标题:文本(“项目2”),
onTap:(){
//更新应用程序的状态
// ...
},
),
],
),
);
}
抽屉阅读器_get抽屉阅读器(){
回程抽屉式卸料器(
孩子:StreamBuilder(
流:FirebaseAuth.instance.currentUser().asStream(),
生成器:(上下文,异步快照){
if(snapshot.hasData){
返回列表视图(
儿童:[
_getCircleImage(snapshot.data.photoUrl),
文本(“测试”),
文本(“测试”),
],
);
}
返回中心(子项:CircularProgressIndicator());
}),
装饰:盒子装饰(
颜色:颜色,蓝色,
),
);
}
_getCircleImage(字符串url){
返回容器(
宽度:64.0,
身高:64.0,
装饰:新盒子装饰(
图片:新装饰图片(
图像:新网络图像(url),
适合:BoxFit.cover,
),
形状:BoxShape.circle,
),
);
}

这有点棘手,但这是颤振的工作原理,您的
容器不知道父容器的约束,然后它尝试填充所有可用空间

您可以通过添加
Align
小部件来修复它

    _getCircleImage(String url) {
      return Align(
        alignment: Alignment.centerLeft,
        child: Container(
          width: 64.0,
          height: 64.0,
          decoration: new BoxDecoration(
            image: new DecorationImage(
              image: new NetworkImage(url),
              fit: BoxFit.cover,
            ),
            shape: BoxShape.circle,
          ),
        ),
      );
    }
更多信息:

  • 小部件只能在其父部件给定的约束范围内决定其自身的大小。这意味着小部件通常不能有它想要的任何大小

  • 小部件不能知道也不能决定自己在屏幕上的位置,因为决定小部件位置的是小部件的父部件

  • 父窗口小部件占用整个可用空间来绘制窗口小部件,这里容器是父窗口小部件,它占用任何可用空间,因此为容器提供高度/宽度,需要将其放置在任何指定窗口小部件的x,y位置的窗口小部件中以使其绘制

因此,根据上面的描述,
容器
应该有一个与屏幕上的
容器
对齐的父级

例:使用

  Align(
     alignment: Alignment.center,
     child: Container(),
  );


这与tldr无关。“tl;dr:Container尝试,为了:尊重对齐,根据子对象调整自身大小,尊重宽度、高度和约束,扩展以适应父对象,尽可能小。”这里它声明在匹配父容器之前尊重宽度。我认为情况是这样的:如果小部件没有子对象,没有高度,没有宽度,没有约束,也没有对齐,但父对象提供有界约束,然后容器展开以适应父对象提供的约束。您只需使用容器的对齐参数:)图像似乎导致了失真。我不知道为什么。作为一个孩子,将整个容器放在CircleAvatar中奇怪地解决了这个问题。但是直接将该图像作为背景图像应用于圆圈化身也不起作用。
  Align(
     alignment: Alignment.center,
     child: Container(),
  );
 Center(
      child: Container(),
    );