Give up on the idea of providing smooth-scrolling because Flutter sucks.
This commit is contained in:
parent
6a73208b00
commit
6e7b03a048
4 changed files with 62 additions and 68 deletions
|
@ -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);
|
||||
|
|
|
@ -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),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -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
lib/utils/date_time_util.dart
Normal file
36
lib/utils/date_time_util.dart
Normal file
|
@ -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();
|
||||
}
|
Loading…
Add table
Reference in a new issue