From 09d43ab5c0f7074aee5aa765c6d32c9c115bc69f Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Sat, 27 Apr 2019 14:19:39 +0200 Subject: [PATCH] Created a tile to quickly show user account image --- lib/ui/tiles/conversation_message_tile.dart | 32 ++++++------- lib/ui/widgets/account_image_widget.dart | 51 +++++++++++++++++++++ 2 files changed, 67 insertions(+), 16 deletions(-) create mode 100644 lib/ui/widgets/account_image_widget.dart diff --git a/lib/ui/tiles/conversation_message_tile.dart b/lib/ui/tiles/conversation_message_tile.dart index 6e4a73f..0f8a0d4 100644 --- a/lib/ui/tiles/conversation_message_tile.dart +++ b/lib/ui/tiles/conversation_message_tile.dart @@ -1,6 +1,7 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:comunic/models/conversation_message.dart'; import 'package:comunic/models/user.dart'; +import 'package:comunic/ui/widgets/account_image_widget.dart'; import 'package:comunic/utils/account_utils.dart'; import 'package:comunic/utils/date_utils.dart'; import 'package:comunic/utils/ui_utils.dart'; @@ -32,17 +33,9 @@ class ConversationMessageTile extends StatelessWidget { Widget _buildAccountImage() { return Container( margin: EdgeInsets.all(10.0), - child: Material( - child: CachedNetworkImage( - imageUrl: userInfo.accountImageURL, - width: 35.0, - height: 35.0, - fit: BoxFit.cover, - ), - borderRadius: BorderRadius.all( - Radius.circular(18.0), - ), - clipBehavior: Clip.hardEdge, + child: AccountImageWidget( + user: userInfo, + width: 35.0, ), ); } @@ -53,7 +46,9 @@ class ConversationMessageTile extends StatelessWidget { margin: EdgeInsets.only(bottom: 2), child: Material( child: InkWell( - onTap: (){showImageFullScreen(context, message.imageURL);}, + onTap: () { + showImageFullScreen(context, message.imageURL); + }, child: CachedNetworkImage( imageUrl: message.imageURL, width: 200.0, @@ -72,8 +67,10 @@ class ConversationMessageTile extends StatelessWidget { height: 200, color: Colors.red, child: Center( - child: Icon(Icons.error, color: Colors.white,) - ), + child: Icon( + Icons.error, + color: Colors.white, + )), ), ), ), @@ -112,7 +109,9 @@ class ConversationMessageTile extends StatelessWidget { children: [ // Text image Container( - child: message.hasImage ? _buildMessageImage(context) : null, + child: message.hasImage + ? _buildMessageImage(context) + : null, ), // Text message @@ -183,7 +182,8 @@ class ConversationMessageTile extends StatelessWidget { children: [ // Text image Container( - child: message.hasImage ? _buildMessageImage(context) : null, + child: + message.hasImage ? _buildMessageImage(context) : null, ), // Text message diff --git a/lib/ui/widgets/account_image_widget.dart b/lib/ui/widgets/account_image_widget.dart new file mode 100644 index 0000000..1331d63 --- /dev/null +++ b/lib/ui/widgets/account_image_widget.dart @@ -0,0 +1,51 @@ +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:comunic/models/user.dart'; +import 'package:flutter/material.dart'; + +/// Account image widget +/// +/// This widget is intended to only show a user account image +/// +/// @author Pierre HUBERT + +class AccountImageWidget extends StatelessWidget { + final User user; + final double width; + + const AccountImageWidget({Key key, this.user, this.width = 35.0}) + : assert(user != null), + super(key: key); + + @override + Widget build(BuildContext context) { + return Material( + child: CachedNetworkImage( + imageUrl: user.accountImageURL, + width: width, + height: width, + fit: BoxFit.cover, + placeholder: (c, s) => Container( + color: Colors.grey, + width: width, + height: width, + child: CircularProgressIndicator( + strokeWidth: 7.0, + ), + ), + errorWidget: (c, s, o) => Container( + color: Colors.red, + width: width, + height: width, + child: Icon( + Icons.error, + color: Colors.white, + ), + ), + ), + borderRadius: BorderRadius.all( + Radius.circular(18.0), + ), + clipBehavior: Clip.hardEdge, + ); + } +}