Refactor gallery

This commit is contained in:
Vishnu Mohandas 2020-06-16 18:26:23 +05:30
parent 46654b767e
commit efde1b6fe3
4 changed files with 29 additions and 25 deletions

View file

@ -49,7 +49,7 @@ class _DeviceFolderPageState extends State<DeviceFolderPage> {
body: Gallery(
() => Future.value(_getFilteredPhotos(PhotoRepository.instance.photos)),
selectedPhotos: _selectedPhotos,
photoSelectionChangeCallback: (Set<Photo> selectedPhotos) {
onPhotoSelectionChange: (Set<Photo> selectedPhotos) {
setState(() {
_selectedPhotos = selectedPhotos;
});

View file

@ -16,18 +16,20 @@ import 'package:photos/utils/date_time_util.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
class Gallery extends StatefulWidget {
final Future<List<Photo>> Function() loadFunction;
final Future<List<Photo>> Function() loader;
// TODO: Verify why the event is necessary when calling loader post onRefresh
// should have done the job.
final Stream<Event> reloadEvent;
final Future<void> Function() onRefresh;
final Set<Photo> selectedPhotos;
final Function(Set<Photo>) photoSelectionChangeCallback;
final Future<void> Function() syncFunction;
final Stream<Event> reloadTrigger;
final Function(Set<Photo>) onPhotoSelectionChange;
Gallery(
this.loadFunction, {
this.loader, {
this.reloadEvent,
this.onRefresh,
this.selectedPhotos,
this.photoSelectionChangeCallback,
this.syncFunction,
this.reloadTrigger,
this.onPhotoSelectionChange,
});
@override
@ -57,11 +59,13 @@ class _GalleryState extends State<Gallery> {
_openedPhoto = event.photo;
});
});
widget.reloadTrigger.listen((event) {
setState(() {
_requiresLoad = true;
if (widget.reloadEvent != null) {
widget.reloadEvent.listen((event) {
setState(() {
_requiresLoad = true;
});
});
});
}
super.initState();
}
@ -77,7 +81,7 @@ class _GalleryState extends State<Gallery> {
return _onSnapshotAvailable(_lastSnapshot);
}
return FutureBuilder<List<Photo>>(
future: widget.loadFunction(),
future: widget.loader(),
builder: (context, snapshot) {
_requiresLoad = false;
_lastSnapshot = snapshot;
@ -109,15 +113,15 @@ class _GalleryState extends State<Gallery> {
controller: _scrollController,
cacheExtent: 1000,
);
if (widget.syncFunction != null) {
if (widget.onRefresh != null) {
return SmartRefresher(
controller: _refreshController,
child: list,
header: SyncIndicator(_refreshController),
onRefresh: () {
widget.syncFunction().then((_) {
widget.onRefresh().then((_) {
_refreshController.refreshCompleted();
widget.loadFunction().then((_) => setState(() {
widget.loader().then((_) => setState(() {
_requiresLoad = true;
}));
}).catchError((e) {
@ -208,7 +212,7 @@ class _GalleryState extends State<Gallery> {
} else {
_selectedPhotos.add(photo);
}
widget.photoSelectionChangeCallback(_selectedPhotos);
widget.onPhotoSelectionChange(_selectedPhotos);
});
}

View file

@ -116,16 +116,16 @@ class _HomeWidgetState extends State<HomeWidget> {
return Gallery(
() => Future.value(
_getFilteredPhotos(PhotoRepository.instance.photos)),
reloadEvent: Bus.instance.on<LocalPhotosUpdatedEvent>(),
onRefresh: () {
return PhotoSyncManager.instance.sync();
},
selectedPhotos: _selectedPhotos,
photoSelectionChangeCallback: (Set<Photo> selectedPhotos) {
onPhotoSelectionChange: (Set<Photo> selectedPhotos) {
setState(() {
_selectedPhotos = selectedPhotos;
});
},
syncFunction: () {
return PhotoSyncManager.instance.sync();
},
reloadTrigger: Bus.instance.on<LocalPhotosUpdatedEvent>(),
);
} else if (snapshot.hasError) {
return Center(child: Text(snapshot.error.toString()));

View file

@ -34,10 +34,10 @@ class _RemoteFolderPageState extends State<RemoteFolderPage> {
),
body: Gallery(
() => PhotoDB.instance.getAllPhotosInFolder(widget.folder.id),
syncFunction: () =>
onRefresh: () =>
FolderSharingService.instance.syncDiff(widget.folder),
selectedPhotos: _selectedPhotos,
photoSelectionChangeCallback: (Set<Photo> selectedPhotos) {
onPhotoSelectionChange: (Set<Photo> selectedPhotos) {
setState(
() {
_selectedPhotos = selectedPhotos;