Bläddra i källkod

Give up on the idea of providing smooth-scrolling because Flutter sucks.

Vishnu Mohandas 5 år sedan
förälder
incheckning
6e7b03a048
4 ändrade filer med 62 tillägg och 68 borttagningar
  1. 5 1
      lib/photo_sync_manager.dart
  2. 16 63
      lib/ui/gallery.dart
  3. 5 4
      lib/ui/image_widget.dart
  4. 36 0
      lib/utils/date_time_util.dart

+ 5 - 1
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);

+ 16 - 63
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<Gallery> {
-  Map<int, String> _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<int, String> _days = {
-    1: "Monday",
-    2: "Tuesday",
-    3: "Wednesday",
-    4: "Thursday",
-    5: "Friday",
-    6: "Saturday",
-    7: "Sunday",
-  };
-
   PhotoLoader get photoLoader => Provider.of<PhotoLoader>(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: <Widget>[_getDay(photos), _getGallery(photos)],
+      children: <Widget>[
+        _getDay(photos[0].createTimestamp),
+        _getGallery(photos)
+      ],
     );
   }
 
-  Widget _getDay(List<Photo> 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),
+      ),
     );
   }
 

+ 5 - 4
lib/ui/image_widget.dart

@@ -18,6 +18,10 @@ class ImageWidget extends StatefulWidget {
 }
 
 class _ImageWidgetState extends State<ImageWidget> {
+  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<ImageWidget> {
               ImageLruCache.setData(path, size, image);
               return image;
             } else {
-              return Container(
-                alignment: Alignment.center,
-                color: Colors.grey[500],
-              );
+              return loadingWidget;
             }
           },
         );

+ 36 - 0
lib/utils/date_time_util.dart

@@ -0,0 +1,36 @@
+Map<int, String> _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<int, String> _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();
+}