Favourites
This commit is contained in:
parent
6a84a9bef0
commit
1747ab0245
23 changed files with 469 additions and 67 deletions
|
@ -15,30 +15,108 @@ class _DownloadedGalleryView extends StatelessWidget {
|
|||
child: Padding(
|
||||
padding: const EdgeInsets.all(8),
|
||||
// Using Wrap instead of GridView, to make use of different image sizes
|
||||
child: Wrap(
|
||||
runSpacing: 24,
|
||||
spacing: 8,
|
||||
alignment: WrapAlignment.center,
|
||||
runAlignment: WrapAlignment.center,
|
||||
crossAxisAlignment: WrapCrossAlignment.center,
|
||||
children: [
|
||||
for (final imageModel in galleryViewModel.imageModels)
|
||||
GestureDetector(
|
||||
onTap: () => galleryViewModel.pushImageCarouselView(
|
||||
context,
|
||||
imageModel: imageModel,
|
||||
child: ValueListenableBuilder<bool>(
|
||||
valueListenable: galleryViewModel.isViewingFavouriteListenable,
|
||||
builder: (context, final isViewingFavourites, _) => !isViewingFavourites
|
||||
? Wrap(
|
||||
runSpacing: 24,
|
||||
spacing: 8,
|
||||
alignment: WrapAlignment.center,
|
||||
runAlignment: WrapAlignment.center,
|
||||
crossAxisAlignment: WrapCrossAlignment.center,
|
||||
children: [
|
||||
for (final imageModel in galleryViewModel.imageModels)
|
||||
_StarrableImage(
|
||||
key: ValueKey(imageModel.imageIndex),
|
||||
imageModel: imageModel,
|
||||
galleryViewModel: galleryViewModel,
|
||||
),
|
||||
],
|
||||
)
|
||||
: Wrap(
|
||||
runSpacing: 24,
|
||||
spacing: 8,
|
||||
alignment: WrapAlignment.center,
|
||||
runAlignment: WrapAlignment.center,
|
||||
crossAxisAlignment: WrapCrossAlignment.center,
|
||||
children: [
|
||||
for (final favouriteImageModel in galleryViewModel.favouriteImageModels)
|
||||
_StarrableImage(
|
||||
key: ValueKey(favouriteImageModel.imageIndex),
|
||||
imageModel: favouriteImageModel,
|
||||
galleryViewModel: galleryViewModel,
|
||||
),
|
||||
],
|
||||
),
|
||||
child: CachedNetworkImage(
|
||||
imageUrl: imageModel.uri.toString(),
|
||||
cacheKey: imageModel.imageIndex.toString(),
|
||||
progressIndicatorBuilder: (_, __, final progress) => CircularProgressIndicator(
|
||||
value: galleryViewModel.downloadProgressValue(progress: progress),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class _StarrableImage extends StatefulWidget {
|
||||
const _StarrableImage({
|
||||
required this.galleryViewModel,
|
||||
required this.imageModel,
|
||||
super.key,
|
||||
});
|
||||
|
||||
final GalleryViewModel galleryViewModel;
|
||||
final ImageModel imageModel;
|
||||
|
||||
@override
|
||||
State<_StarrableImage> createState() => _StarrableImageState();
|
||||
}
|
||||
|
||||
class _StarrableImageState extends State<_StarrableImage> {
|
||||
late bool isMarkedFavourite;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
isMarkedFavourite = widget.imageModel.isFavourite;
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Stack(
|
||||
alignment: Alignment.topRight.add(const Alignment(0.2, -0.2)),
|
||||
children: [
|
||||
GestureDetector(
|
||||
onTap: () => widget.galleryViewModel.pushImageCarouselView(
|
||||
context,
|
||||
imageModel: widget.imageModel,
|
||||
),
|
||||
child: CachedNetworkImage(
|
||||
imageUrl: widget.imageModel.uri.toString(),
|
||||
cacheKey: widget.imageModel.imageIndex.toString(),
|
||||
progressIndicatorBuilder: (_, __, final progress) => CircularProgressIndicator(
|
||||
value: widget.galleryViewModel.downloadProgressValue(progress: progress),
|
||||
),
|
||||
),
|
||||
),
|
||||
GestureDetector(
|
||||
child: isMarkedFavourite
|
||||
? ConstMedia.buildIcon(
|
||||
ConstMedia.favStarFilled,
|
||||
width: 16,
|
||||
height: 16,
|
||||
)
|
||||
: ConstMedia.buildIcon(
|
||||
ConstMedia.favStarOutline,
|
||||
width: 16,
|
||||
height: 16,
|
||||
),
|
||||
onTap: () {
|
||||
widget.galleryViewModel.updateImageFavouriteStatus(
|
||||
imageModel: widget.imageModel,
|
||||
newFavouriteStatus: !isMarkedFavourite,
|
||||
);
|
||||
setState(() => isMarkedFavourite = !isMarkedFavourite);
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue