From 35e9c30ba2bb187da5e78e4db25ff569801945ba Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Sat, 11 May 2019 09:43:30 +0200 Subject: [PATCH] Create NetworkImage widget --- lib/ui/tiles/conversation_message_tile.dart | 40 ++----------- lib/ui/widgets/network_image_widget.dart | 66 +++++++++++++++++++++ 2 files changed, 72 insertions(+), 34 deletions(-) create mode 100644 lib/ui/widgets/network_image_widget.dart diff --git a/lib/ui/tiles/conversation_message_tile.dart b/lib/ui/tiles/conversation_message_tile.dart index 5fe11dc..8c14d3e 100644 --- a/lib/ui/tiles/conversation_message_tile.dart +++ b/lib/ui/tiles/conversation_message_tile.dart @@ -1,11 +1,10 @@ -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/ui/widgets/network_image_widget.dart'; import 'package:comunic/ui/widgets/text_rich_content_widget.dart'; import 'package:comunic/utils/date_utils.dart'; import 'package:comunic/utils/intl_utils.dart'; -import 'package:comunic/utils/ui_utils.dart'; import 'package:flutter/material.dart'; /// Conversation message tile @@ -74,38 +73,11 @@ class ConversationMessageTile extends StatelessWidget { Widget _buildMessageImage(BuildContext context) { return Container( margin: EdgeInsets.only(bottom: 2), - child: Material( - child: InkWell( - onTap: () { - showImageFullScreen(context, message.imageURL); - }, - child: CachedNetworkImage( - imageUrl: message.imageURL, - width: 200.0, - height: 200.0, - fit: BoxFit.cover, - placeholder: (c, s) => Container( - width: 200, - height: 200, - color: Colors.lightBlueAccent, - child: Center( - child: CircularProgressIndicator(), - ), - ), - errorWidget: (c, s, o) => Container( - width: 200, - height: 200, - color: Colors.red, - child: Center( - child: Icon( - Icons.error, - color: Colors.white, - )), - ), - ), - ), - borderRadius: BorderRadius.all(Radius.circular(8.0)), - clipBehavior: Clip.hardEdge, + child: NetworkImageWidget( + url: message.imageURL, + allowFullScreen: true, + width: 200, + height: 200, ), ); } diff --git a/lib/ui/widgets/network_image_widget.dart b/lib/ui/widgets/network_image_widget.dart new file mode 100644 index 0000000..7de54da --- /dev/null +++ b/lib/ui/widgets/network_image_widget.dart @@ -0,0 +1,66 @@ +import 'package:cached_network_image/cached_network_image.dart'; +import 'package:comunic/utils/ui_utils.dart'; +import 'package:flutter/material.dart'; + +/// Network image widget +/// +/// Widget useful to show remote image +/// +/// @author Pierre HUBERT + +class NetworkImageWidget extends StatelessWidget { + final String url; + final bool allowFullScreen; + final double width; + final double height; + + const NetworkImageWidget({ + Key key, + @required this.url, + this.allowFullScreen = false, + this.width, + this.height, + }) : assert(url != null), + assert(allowFullScreen != null), + super(key: key); + + @override + Widget build(BuildContext context) { + return Material( + child: InkWell( + onTap: allowFullScreen + ? () { + showImageFullScreen(context, url); + } + : null, + child: CachedNetworkImage( + imageUrl: url, + width: width, + height: height, + fit: BoxFit.cover, + placeholder: (c, s) => Container( + width: width, + height: height, + color: Colors.lightBlueAccent, + child: Center( + child: CircularProgressIndicator(), + ), + ), + errorWidget: (c, s, o) => Container( + width: width, + height: height, + color: Colors.red, + child: Center( + child: Icon( + Icons.error, + color: Colors.white, + ), + ), + ), + ), + ), + borderRadius: BorderRadius.all(Radius.circular(8.0)), + clipBehavior: Clip.hardEdge, + ); + } +}