Dart 如何创建由群图标照片中的用户组成的群聊天图标(群中用户的拼贴)

Dart 如何创建由群图标照片中的用户组成的群聊天图标(群中用户的拼贴),dart,flutter,Dart,Flutter,在Flatter中,如何通过将群中用户的照片拼接成一个拼贴式图标(类似于facebook或snapchat)来创建群聊图标?例如,与此图像类似,但不是用户的姓名首字母,而是他们的用户照片: ]XMJ)这涉及使用颤振布局。 (注意:提供的图像具有无效链接) 你可以试试这个 return Scaffold( appBar: AppBar(title: Text('Flow Layout Flutter')), body: Center( child: Container(

在Flatter中,如何通过将群中用户的照片拼接成一个拼贴式图标(类似于facebook或snapchat)来创建群聊图标?例如,与此图像类似,但不是用户的姓名首字母,而是他们的用户照片:


]XMJ)

这涉及使用颤振布局。 (注意:提供的图像具有无效链接) 你可以试试这个


return Scaffold(
    appBar: AppBar(title: Text('Flow Layout Flutter')),
    body: Center(
    child: Container(
        color: Colors.teal,
        child: Flow(
        delegate: SampleFlowDelegate(),
        children: <Widget>[
            buildItem(0),
            buildItem(1),
            buildItem(2),
            buildItem(3),
            buildItem(4),
            buildItem(5),
            buildItem(6),
        ],
        ),
     ),
   ),
);

返回脚手架(
appBar:appBar(标题:文本(“流布局颤振”),
正文:中(
子:容器(
颜色:Colors.teal,
孩子:流(
委托:SampleFlowDelegate(),
儿童:[
构建项(0),
第(1)项,
第(2)项,
第(3)项,
第(4)项,
第(5)项,
第(6)项,
],
),
),
),
);

Wrap(
间距:8.0,//相邻芯片之间的间隙
行间距:4.0,//行间距
儿童:[
芯片(
头像:CircleAvatar(背景色:Colors.blue.shade900,child:Text('AH')),
标签:文本('Hamilton'),
),
芯片(
头像:CircleAvatar(背景色:Colors.blue.shade900,child:Text('ML')),
标签:文本('Lafayette'),
),
芯片(
头像:CircleAvatar(背景色:Colors.blue.shade900,child:Text('HM')),
标签:文本('Mulligan'),
),
芯片(
头像:CircleAvatar(背景色:Colors.blue.shade900,child:Text('JL')),
标签:文本('Laurens'),
),
],
)

在您的情况下,您可以通过编程方式添加图像小部件。

我相信您正在寻找类似的东西:

如果是这样的话,你所需要的就是一个装饰着
容器的圆圈,上面有一个
,该列被剪裁到圆圈上,并有两个
扩展的
行和你的头像(我在它的位置使用彩色容器)

您可以定义容器(圆)的半径,化身将相应地调整大小(每个为50%)

但是,请记住,这并不考虑纵横比(您可以查看
AspectRatio
),因为我不知道这是否是您要寻找的<代码>包装
小部件的建议可能也会奏效,但是,我发现使用
Flex
小部件更适合这种情况

class GroupAvatar extends StatelessWidget {
  final double _containerRadius = 300.0;

Widget _buildAvatar(double avatarRadius, Color color) {
    return Expanded(
      child: Container(
        color: color,
        height: avatarRadius,
        width: avatarRadius,
      ),
    );
  }
  @override
  Widget build(BuildContext context) {
    final double avatarRadius = _containerRadius * 0.5;
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Container(
            height: _containerRadius,
            width: _containerRadius,
            decoration: BoxDecoration(
              color: Colors.white,
              shape: BoxShape.circle,
            ),
            child: ClipOval(
              clipBehavior: Clip.antiAlias,
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Row(
                    children: <Widget>[
                      _buildAvatar(avatarRadius, Colors.green),
                      _buildAvatar(avatarRadius, Colors.blue),
                      _buildAvatar(avatarRadius, Colors.black),
                    ],
                  ),
                  Row(
                    children: <Widget>[
                      _buildAvatar(avatarRadius, Colors.yellow),
                      _buildAvatar(avatarRadius, Colors.red),
                      _buildAvatar(avatarRadius, Colors.orange),
                    ],
                  )
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }


}
class-GroupAvatar扩展了无状态小部件{
最终双容器半径=300.0;
小部件_buildAvatar(双化身,彩色){
扩大回报(
子:容器(
颜色:颜色,
身高:阿瓦塔拉迪乌斯,
宽度:阿瓦塔拉迪乌斯,
),
);
}
@凌驾
小部件构建(构建上下文){
最终双阿瓦塔拉迪乌斯=_containerRadius*0.5;
返回材料PP(
家:脚手架(
正文:中(
子:容器(
高度:_containerRadius,
宽度:_containerRadius,
装饰:盒子装饰(
颜色:颜色,白色,
形状:BoxShape.circle,
),
孩子:斜坡(
clipBehavior:Clip.antiAlias,
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
划船(
儿童:[
_构建阿凡达(阿凡达,颜色。绿色),
_构建阿凡达(阿凡达,颜色,蓝色),
_构建阿凡达(阿凡达,彩色,黑色),
],
),
划船(
儿童:[
_构建阿凡达(阿凡达,彩色,黄色),
_构建阿凡达(阿凡达,彩色,红色),
_构建阿凡达(阿凡达,颜色,橙色),
],
)
],
),
),
),
),
),
);
}
}

我已更新了图像,您的代码是否适用于此类内容?
class GroupAvatar extends StatelessWidget {
  final double _containerRadius = 300.0;

Widget _buildAvatar(double avatarRadius, Color color) {
    return Expanded(
      child: Container(
        color: color,
        height: avatarRadius,
        width: avatarRadius,
      ),
    );
  }
  @override
  Widget build(BuildContext context) {
    final double avatarRadius = _containerRadius * 0.5;
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Container(
            height: _containerRadius,
            width: _containerRadius,
            decoration: BoxDecoration(
              color: Colors.white,
              shape: BoxShape.circle,
            ),
            child: ClipOval(
              clipBehavior: Clip.antiAlias,
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Row(
                    children: <Widget>[
                      _buildAvatar(avatarRadius, Colors.green),
                      _buildAvatar(avatarRadius, Colors.blue),
                      _buildAvatar(avatarRadius, Colors.black),
                    ],
                  ),
                  Row(
                    children: <Widget>[
                      _buildAvatar(avatarRadius, Colors.yellow),
                      _buildAvatar(avatarRadius, Colors.red),
                      _buildAvatar(avatarRadius, Colors.orange),
                    ],
                  )
                ],
              ),
            ),
          ),
        ),
      ),
    );
  }


}