diff --git a/lib/ui/thumbnail_widget.dart b/lib/ui/thumbnail_widget.dart index cd6eeb8ba..2246a5c7b 100644 --- a/lib/ui/thumbnail_widget.dart +++ b/lib/ui/thumbnail_widget.dart @@ -1,9 +1,11 @@ +import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:photos/core/cache/thumbnail_cache.dart'; import 'package:photos/models/file.dart'; import 'package:logging/logging.dart'; import 'package:photos/core/constants.dart'; import 'package:photos/models/file_type.dart'; +import 'package:photos/ui/loading_widget.dart'; class ThumbnailWidget extends StatefulWidget { final File photo; @@ -30,11 +32,10 @@ class _ThumbnailWidgetState extends State { @override Widget build(BuildContext context) { if (widget.photo.localId == null) { - _loadNetworkImage(); - } else { - _loadLocalImage(context); + return _getNetworkImage(); } + _loadLocalImage(context); if (_imageProvider != null) { var image = Image( image: _imageProvider, @@ -89,11 +90,16 @@ class _ThumbnailWidgetState extends State { } } - void _loadNetworkImage() { + Widget _getNetworkImage() { final url = widget.photo.previewURL.isNotEmpty ? widget.photo.getThumbnailUrl() : widget.photo.getRemoteUrl(); - _imageProvider = Image.network(url).image; + return CachedNetworkImage( + imageUrl: url, + placeholder: (context, url) => loadWidget, + errorWidget: (context, url, error) => Icon(Icons.error), + fit: BoxFit.cover, + ); } @override diff --git a/pubspec.lock b/pubspec.lock index 16b4e0fa5..73431cae9 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -29,6 +29,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.0" + cached_network_image: + dependency: "direct main" + description: + name: cached_network_image + url: "https://pub.dartlang.org" + source: hosted + version: "2.2.0+1" characters: dependency: transitive description: @@ -162,11 +169,25 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.1.0" + file: + dependency: transitive + description: + name: file + url: "https://pub.dartlang.org" + source: hosted + version: "5.2.0" flutter: dependency: "direct main" description: flutter source: sdk version: "0.0.0" + flutter_cache_manager: + dependency: transitive + description: + name: flutter_cache_manager + url: "https://pub.dartlang.org" + source: hosted + version: "1.4.1" flutter_email_sender: dependency: "direct main" description: @@ -401,6 +422,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.5.8" + rxdart: + dependency: transitive + description: + name: rxdart + url: "https://pub.dartlang.org" + source: hosted + version: "0.24.1" sensors: dependency: transitive description: @@ -546,6 +574,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "3.4.1" + uuid: + dependency: transitive + description: + name: uuid + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.0" vector_math: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 6b95e13d4..349a42cbb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -53,6 +53,7 @@ dependencies: extended_image: ^0.9.0 video_player: ^0.10.11+1 chewie: ^0.9.10 + cached_network_image: ^2.2.0+1 dev_dependencies: flutter_test: