From 13fc79fb7b730f05bd15a846260574690231e64a Mon Sep 17 00:00:00 2001 From: Furkan Date: Mon, 2 Jan 2023 13:18:23 +0300 Subject: [PATCH] multiple hero with same id issue handled --- .flutter-plugins-dependencies | 2 +- CHANGELOG.md | 4 +++ example/pubspec.lock | 2 +- lib/views/album_view/album_medias_view.dart | 3 +++ lib/views/album_view/album_page.dart | 3 +++ lib/views/album_view/date_category_view.dart | 11 ++++---- lib/views/album_view/media_view.dart | 14 +++++++---- .../gallery_picker_view.dart | 4 +++ lib/views/thumbnail_media_file.dart | 25 +++++++++++++------ pubspec.yaml | 2 +- 10 files changed, 50 insertions(+), 20 deletions(-) diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies index 27a0042..bc94516 100644 --- a/.flutter-plugins-dependencies +++ b/.flutter-plugins-dependencies @@ -1 +1 @@ -{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"permission_handler_apple","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler_apple-9.0.7\\\\","native_build":true,"dependencies":[]},{"name":"photo_gallery","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\photo_gallery-1.1.1\\\\","native_build":true,"dependencies":[]},{"name":"video_player_avfoundation","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_player_avfoundation-2.3.8\\\\","native_build":true,"dependencies":[]},{"name":"video_thumbnail","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_thumbnail-0.5.3\\\\","native_build":true,"dependencies":[]}],"android":[{"name":"permission_handler_android","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler_android-10.2.0\\\\","native_build":true,"dependencies":[]},{"name":"photo_gallery","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\photo_gallery-1.1.1\\\\","native_build":true,"dependencies":[]},{"name":"video_player_android","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_player_android-2.3.10\\\\","native_build":true,"dependencies":[]},{"name":"video_thumbnail","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_thumbnail-0.5.3\\\\","native_build":true,"dependencies":[]}],"macos":[],"linux":[],"windows":[{"name":"permission_handler_windows","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler_windows-0.1.2\\\\","native_build":true,"dependencies":[]}],"web":[{"name":"video_player_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_player_web-2.0.13\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"permission_handler","dependencies":["permission_handler_android","permission_handler_apple","permission_handler_windows"]},{"name":"permission_handler_android","dependencies":[]},{"name":"permission_handler_apple","dependencies":[]},{"name":"permission_handler_windows","dependencies":[]},{"name":"photo_gallery","dependencies":[]},{"name":"video_player","dependencies":["video_player_android","video_player_avfoundation","video_player_web"]},{"name":"video_player_android","dependencies":[]},{"name":"video_player_avfoundation","dependencies":[]},{"name":"video_player_web","dependencies":[]},{"name":"video_thumbnail","dependencies":[]}],"date_created":"2023-01-01 20:36:53.862529","version":"3.3.10"} \ No newline at end of file +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"permission_handler_apple","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler_apple-9.0.7\\\\","native_build":true,"dependencies":[]},{"name":"photo_gallery","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\photo_gallery-1.1.1\\\\","native_build":true,"dependencies":[]},{"name":"video_player_avfoundation","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_player_avfoundation-2.3.8\\\\","native_build":true,"dependencies":[]},{"name":"video_thumbnail","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_thumbnail-0.5.3\\\\","native_build":true,"dependencies":[]}],"android":[{"name":"permission_handler_android","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler_android-10.2.0\\\\","native_build":true,"dependencies":[]},{"name":"photo_gallery","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\photo_gallery-1.1.1\\\\","native_build":true,"dependencies":[]},{"name":"video_player_android","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_player_android-2.3.10\\\\","native_build":true,"dependencies":[]},{"name":"video_thumbnail","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_thumbnail-0.5.3\\\\","native_build":true,"dependencies":[]}],"macos":[],"linux":[],"windows":[{"name":"permission_handler_windows","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\permission_handler_windows-0.1.2\\\\","native_build":true,"dependencies":[]}],"web":[{"name":"video_player_web","path":"C:\\\\src\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\video_player_web-2.0.13\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"permission_handler","dependencies":["permission_handler_android","permission_handler_apple","permission_handler_windows"]},{"name":"permission_handler_android","dependencies":[]},{"name":"permission_handler_apple","dependencies":[]},{"name":"permission_handler_windows","dependencies":[]},{"name":"photo_gallery","dependencies":[]},{"name":"video_player","dependencies":["video_player_android","video_player_avfoundation","video_player_web"]},{"name":"video_player_android","dependencies":[]},{"name":"video_player_avfoundation","dependencies":[]},{"name":"video_player_web","dependencies":[]},{"name":"video_thumbnail","dependencies":[]}],"date_created":"2023-01-02 13:18:01.553448","version":"3.3.10"} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ee170e..a326d5d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -62,3 +62,7 @@ ## 0.1.5 * changes made + +## 0.1.6 + +* multiple hero with same id issue handled \ No newline at end of file diff --git a/example/pubspec.lock b/example/pubspec.lock index 464eb3d..83648bc 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -141,7 +141,7 @@ packages: path: ".." relative: true source: path - version: "0.1.5" + version: "0.1.6" get: dependency: transitive description: diff --git a/lib/views/album_view/album_medias_view.dart b/lib/views/album_view/album_medias_view.dart index 7de4713..e3d9d76 100644 --- a/lib/views/album_view/album_medias_view.dart +++ b/lib/views/album_view/album_medias_view.dart @@ -7,10 +7,12 @@ import 'selected_medias_view.dart'; class AlbumMediasView extends StatelessWidget { final PhoneGalleryController controller; final bool singleMedia; + final bool isCollapsedSheet; const AlbumMediasView( {super.key, required this.galleryAlbum, required this.controller, + required this.isCollapsedSheet, required this.singleMedia}); final GalleryAlbum galleryAlbum; @override @@ -24,6 +26,7 @@ class AlbumMediasView extends StatelessWidget { category: category, controller: controller, singleMedia: singleMedia, + isCollapsedSheet: isCollapsedSheet, ), ], ), diff --git a/lib/views/album_view/album_page.dart b/lib/views/album_view/album_page.dart index 62946b2..3bee5cd 100644 --- a/lib/views/album_view/album_page.dart +++ b/lib/views/album_view/album_page.dart @@ -11,11 +11,13 @@ class AlbumPage extends StatelessWidget { final PhoneGalleryController controller; final BottomSheetController? bottomSheetController; final GalleryAlbum album; + final bool isCollapsedSheet; const AlbumPage( {super.key, required this.album, required this.controller, required this.singleMedia, + required this.isCollapsedSheet, required this.bottomSheetController}); @override Widget build(BuildContext context) { @@ -29,6 +31,7 @@ class AlbumPage extends StatelessWidget { body: AlbumMediasView( galleryAlbum: album, controller: controller, + isCollapsedSheet: isCollapsedSheet, singleMedia: singleMedia, ), ); diff --git a/lib/views/album_view/date_category_view.dart b/lib/views/album_view/date_category_view.dart index b2f6b4f..8f8190b 100644 --- a/lib/views/album_view/date_category_view.dart +++ b/lib/views/album_view/date_category_view.dart @@ -8,11 +8,13 @@ class DateCategoryWiew extends StatelessWidget { final PhoneGalleryController controller; final bool singleMedia; final DateCategory category; + final bool isCollapsedSheet; const DateCategoryWiew( {super.key, required this.category, required this.controller, + required this.isCollapsedSheet, required this.singleMedia}); int getRowCount() { @@ -47,11 +49,10 @@ class DateCategoryWiew extends StatelessWidget { crossAxisSpacing: 1.0, children: [ ...category.files.map( - (medium) => MediaView( - medium, - controller: controller, - singleMedia: singleMedia, - ), + (medium) => MediaView(medium, + controller: controller, + singleMedia: singleMedia, + isCollapsedSheet: isCollapsedSheet), ), ], ), diff --git a/lib/views/album_view/media_view.dart b/lib/views/album_view/media_view.dart index 59b923e..30b25a3 100644 --- a/lib/views/album_view/media_view.dart +++ b/lib/views/album_view/media_view.dart @@ -9,8 +9,12 @@ class MediaView extends StatelessWidget { final MediaFile file; final PhoneGalleryController controller; final bool singleMedia; + final bool isCollapsedSheet; const MediaView(this.file, - {super.key, required this.controller, required this.singleMedia}); + {super.key, + required this.controller, + required this.singleMedia, + required this.isCollapsedSheet}); @override Widget build(BuildContext context) { return Stack( @@ -64,10 +68,10 @@ class MediaView extends StatelessWidget { } }, child: ThumbnailMediaFile( - file: file, - failIconColor: controller.config.appbarIconColor, - config: controller.config, - ), + file: file, + failIconColor: controller.config.appbarIconColor, + controller: controller, + isCollapsedSheet: isCollapsedSheet), ), if (file.isSelected(controller: controller)!) GestureDetector( diff --git a/lib/views/gallery_picker_view/gallery_picker_view.dart b/lib/views/gallery_picker_view/gallery_picker_view.dart index fbdd025..275435c 100644 --- a/lib/views/gallery_picker_view/gallery_picker_view.dart +++ b/lib/views/gallery_picker_view/gallery_picker_view.dart @@ -24,6 +24,7 @@ class GalleryPickerView extends StatefulWidget { final List? initSelectedMedia; final List? extraRecentMedia; final bool singleMedia; + final bool isCollapsedSheet; const GalleryPickerView( {super.key, this.config, @@ -31,6 +32,7 @@ class GalleryPickerView extends StatefulWidget { this.initSelectedMedia, this.extraRecentMedia, this.singleMedia = false, + this.isCollapsedSheet = false, this.sheetController, this.heroBuilder, this.multipleMediaBuilder, @@ -190,6 +192,7 @@ class _GalleryPickerState extends State { ? AlbumMediasView( galleryAlbum: controller.recent!, controller: controller, + isCollapsedSheet: widget.isCollapsedSheet, singleMedia: widget.singleMedia) : const Center( child: CircularProgressIndicator( @@ -205,6 +208,7 @@ class _GalleryPickerState extends State { controller: controller, album: controller.selectedAlbum!, singleMedia: widget.singleMedia, + isCollapsedSheet: widget.isCollapsedSheet, bottomSheetController: bottomSheetController, ) : ReloadGallery( diff --git a/lib/views/thumbnail_media_file.dart b/lib/views/thumbnail_media_file.dart index 9600b9c..557707a 100644 --- a/lib/views/thumbnail_media_file.dart +++ b/lib/views/thumbnail_media_file.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import '../models/config.dart'; +import '../controller/gallery_controller.dart'; import '../models/mode.dart'; import '/models/media_file.dart'; import 'package:transparent_image/transparent_image.dart'; @@ -7,20 +7,22 @@ import 'package:transparent_image/transparent_image.dart'; class ThumbnailMediaFile extends StatelessWidget { final MediaFile file; final Color failIconColor; - final Config config; + final PhoneGalleryController controller; + final bool isCollapsedSheet; const ThumbnailMediaFile( {super.key, required this.file, required this.failIconColor, - required this.config}); + required this.isCollapsedSheet, + required this.controller}); Color adjustFailedBgColor() { - if (config.mode == Mode.dark) { + if (controller.config.mode == Mode.dark) { return lighten( - config.backgroundColor, + controller.config.backgroundColor, ); } else { - return darken(config.backgroundColor); + return darken(controller.config.backgroundColor); } } @@ -57,7 +59,9 @@ class ThumbnailMediaFile extends StatelessWidget { size: 50, color: failIconColor, )) - else if (file.thumbnail != null) + else if (file.thumbnail != null && + !isCollapsedSheet && + controller.heroBuilder != null) Hero( tag: file.medium.id, child: FadeInImage( @@ -67,6 +71,13 @@ class ThumbnailMediaFile extends StatelessWidget { image: MemoryImage(file.thumbnail!), ), ) + else if (file.thumbnail != null && controller.heroBuilder == null) + FadeInImage( + fadeInDuration: const Duration(milliseconds: 200), + fit: BoxFit.cover, + placeholder: MemoryImage(kTransparentImage), + image: MemoryImage(file.thumbnail!), + ) else const SizedBox(), if (file.thumbnail != null && !file.thumbnailFailed) diff --git a/pubspec.yaml b/pubspec.yaml index eb7fd08..be239bf 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: gallery_picker description: Gallery Picker is a flutter package that will allow you to pick media file(s), manage and navigate inside your gallery with modern tools and views. -version: 0.1.5 +version: 0.1.6 homepage: https://github.com/FlutterWay/gallery_picker environment: