diff --git a/lib/photo_sync_manager.dart b/lib/photo_sync_manager.dart index aba9ff3e4..da3fc02e8 100644 --- a/lib/photo_sync_manager.dart +++ b/lib/photo_sync_manager.dart @@ -47,7 +47,11 @@ class PhotoSyncManager { final maxBufferLimit = 1000; for (AssetEntity asset in _assets) { if (asset.createDateTime.microsecondsSinceEpoch > lastDBUpdateTimestamp) { - photos.add(await Photo.fromAsset(asset)); + try { + photos.add(await Photo.fromAsset(asset)); + } catch (e) { + _logger.e(e); + } if (photos.length > bufferLimit) { await _insertPhotosToDB( photos, prefs, asset.createDateTime.microsecondsSinceEpoch); diff --git a/lib/ui/gallery.dart b/lib/ui/gallery.dart index f25f35468..6b25cbea9 100644 --- a/lib/ui/gallery.dart +++ b/lib/ui/gallery.dart @@ -1,14 +1,12 @@ import 'dart:io'; -import 'dart:math'; -import 'package:draggable_scrollbar/draggable_scrollbar.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:logger/logger.dart'; import 'package:myapp/db/db_helper.dart'; import 'package:myapp/models/photo.dart'; import 'package:myapp/photo_loader.dart'; import 'package:myapp/ui/image_widget.dart'; +import 'package:myapp/utils/date_time_util.dart'; import 'package:provider/provider.dart'; import 'package:share_extend/share_extend.dart'; @@ -23,85 +21,40 @@ class Gallery extends StatefulWidget { } class _GalleryState extends State { - Map _months = { - 1: "January", - 2: "February", - 3: "March", - 4: "April", - 5: "May", - 6: "June", - 7: "July", - 8: "August", - 9: "September", - 10: "October", - 11: "November", - 12: "December", - }; - - Map _days = { - 1: "Monday", - 2: "Tuesday", - 3: "Wednesday", - 4: "Thursday", - 5: "Friday", - 6: "Saturday", - 7: "Sunday", - }; - PhotoLoader get photoLoader => Provider.of(context); final ScrollController _scrollController = ScrollController(); @override Widget build(BuildContext context) { return ChangeNotifierBuilder( - value: photoLoader, - builder: (_, __) { - return DraggableScrollbar.semicircle( - labelTextBuilder: (double offset) { - int itemIndex = _scrollController.hasClients - ? (_scrollController.offset / - _scrollController.position.maxScrollExtent * - photoLoader.collatedPhotos.length) - .floor() - : 0; - itemIndex = min(itemIndex, photoLoader.collatedPhotos.length); - var photos = photoLoader.collatedPhotos[itemIndex]; - var date = - DateTime.fromMicrosecondsSinceEpoch(photos[0].createTimestamp); - return Text( - _months[date.month], - style: TextStyle(color: Colors.black), - ); - }, - labelConstraints: BoxConstraints.tightFor(width: 80.0, height: 30.0), - controller: _scrollController, - child: ListView.builder( + value: photoLoader, + builder: (_, __) { + return ListView.builder( itemCount: photoLoader.collatedPhotos.length, itemBuilder: _buildListItem, controller: _scrollController, - ), - ); - }, - ); + ); + }); } Widget _buildListItem(BuildContext context, int index) { var photos = photoLoader.collatedPhotos[index]; return Column( - children: [_getDay(photos), _getGallery(photos)], + children: [ + _getDay(photos[0].createTimestamp), + _getGallery(photos) + ], ); } - Widget _getDay(List photos) { - var date = DateTime.fromMicrosecondsSinceEpoch(photos[0].createTimestamp); + Widget _getDay(int timestamp) { return Container( - padding: const EdgeInsets.all(4.0), + padding: const EdgeInsets.all(8.0), alignment: Alignment.centerLeft, - child: Text(_days[date.weekday] + - ", " + - _months[date.month] + - " " + - date.day.toString()), + child: Text( + getDayAndMonth(DateTime.fromMicrosecondsSinceEpoch(timestamp)), + style: TextStyle(fontSize: 16), + ), ); } diff --git a/lib/ui/image_widget.dart b/lib/ui/image_widget.dart index 77212617f..ee45474f1 100644 --- a/lib/ui/image_widget.dart +++ b/lib/ui/image_widget.dart @@ -18,6 +18,10 @@ class ImageWidget extends StatefulWidget { } class _ImageWidgetState extends State { + static final Widget loadingWidget = Container( + alignment: Alignment.center, + color: Colors.grey[500], + ); @override Widget build(BuildContext context) { final path = widget.photo.localPath; @@ -42,10 +46,7 @@ class _ImageWidgetState extends State { ImageLruCache.setData(path, size, image); return image; } else { - return Container( - alignment: Alignment.center, - color: Colors.grey[500], - ); + return loadingWidget; } }, ); diff --git a/lib/utils/date_time_util.dart b/lib/utils/date_time_util.dart new file mode 100644 index 000000000..e5bbcfc23 --- /dev/null +++ b/lib/utils/date_time_util.dart @@ -0,0 +1,36 @@ +Map _months = { + 1: "Jan", + 2: "Feb", + 3: "March", + 4: "April", + 5: "May", + 6: "Jun", + 7: "July", + 8: "Aug", + 9: "Sep", + 10: "Oct", + 11: "Nov", + 12: "Dec", +}; + +Map _days = { + 1: "Mon", + 2: "Tue", + 3: "Wed", + 4: "Thu", + 5: "Fri", + 6: "Sat", + 7: "Sun", +}; + +String getMonthAndYear(DateTime dateTime) { + return _months[dateTime.month] + " " + dateTime.year.toString(); +} + +String getDayAndMonth(DateTime dateTime) { + return _days[dateTime.weekday] + + ", " + + _months[dateTime.month] + + " " + + dateTime.day.toString(); +}