import 'package:cached_network_image/cached_network_image.dart'; import 'package:comunic/lists/users_list.dart'; import 'package:comunic/models/conversation.dart'; import 'package:comunic/models/user.dart'; import 'package:comunic/ui/widgets/account_image_widget.dart'; import 'package:flutter/material.dart'; /// Conversation image widget /// /// @author Pierre Hubert class ConversationImageWidget extends StatelessWidget { final Conversation conversation; final UsersList users; final double size; const ConversationImageWidget( {Key key, @required this.conversation, @required this.users, this.size = 30}) : assert(conversation != null), assert(users != null), assert(size > 0), super(key: key); @override Widget build(BuildContext context) => Material( child: _buildIcon(), borderRadius: BorderRadius.all( Radius.circular(18.0), ), clipBehavior: Clip.hardEdge, ); Widget _buildIcon() { if (conversation.logoURL != null) return CachedNetworkImage( imageUrl: conversation.logoURL, width: size, ); if (conversation.members.length < 2) return Icon( Icons.lock, size: size, ); if (conversation.members.length == 2) return AccountImageWidget( width: size, user: users.getUser(conversation.otherMembersID.first), ); return MultipleAccountImagesWidget( users: conversation.otherMembersID.map((id) => users.getUser(id)).toList(), size: size, ); } } class MultipleAccountImagesWidget extends StatelessWidget { final List users; final double size; const MultipleAccountImagesWidget({ Key key, @required this.users, @required this.size, }) : assert(users != null), assert(size != null), assert(size > 0), super(key: key); @override Widget build(BuildContext context) => Container( width: size, height: size, child: _buildContent(), ); Widget _buildContent() { if (users.length == 2) return _buildFirstRow(); return Column( children: [_buildFirstRow(), _buildSecondRow()], ); } Widget _buildFirstRow() => Row( children: [ AccountImageWidget( user: users[0], width: size / 2, ), AccountImageWidget( user: users[1], width: size / 2, ) ], ); Widget _buildSecondRow() => Row( children: [ AccountImageWidget( user: users[2], width: size / 2, ), users.length > 3 ? AccountImageWidget( user: users[3], width: size / 2, ) : Container() ], ); }