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(),
);