AlbumRowItem: Add support for showing incoming collections

Signed-off-by: Neeraj Gupta <254676+ua741@users.noreply.github.com>
This commit is contained in:
Neeraj Gupta 2023-06-23 15:41:40 +05:30
parent 271ee3628e
commit 52a89a0a12
2 changed files with 56 additions and 24 deletions

View file

@ -7,6 +7,7 @@ import "package:photos/models/file.dart";
import 'package:photos/models/gallery_type.dart';
import "package:photos/services/collections_service.dart";
import 'package:photos/theme/ente_theme.dart';
import "package:photos/ui/sharing/user_avator_widget.dart";
import 'package:photos/ui/viewer/file/no_thumbnail_widget.dart';
import 'package:photos/ui/viewer/file/thumbnail_widget.dart';
import 'package:photos/ui/viewer/gallery/collection_page.dart';
@ -18,13 +19,18 @@ class AlbumRowItemWidget extends StatelessWidget {
final bool showFileCount;
final String tagPrefix;
AlbumRowItemWidget(
// Set it to true if the album is shared with user.
// Based on this, we will show the shared album owner's avatar.
final bool isIncomingAlbum;
const AlbumRowItemWidget(
this.c,
this.sideOfThumbnail, {
super.key,
this.showFileCount = true,
this.tagPrefix = "collection",
Key? key,
}) : super(key: Key(c.id.toString()));
this.isIncomingAlbum = false,
});
@override
Widget build(BuildContext context) {
@ -40,7 +46,9 @@ class AlbumRowItemWidget extends StatelessWidget {
child: SizedBox(
height: sideOfThumbnail,
width: sideOfThumbnail,
child: FutureBuilder<File?>(
child: Stack(
children: [
FutureBuilder<File?>(
future: CollectionsService.instance.getCover(c),
builder: (context, snapshot) {
if (snapshot.hasData) {
@ -50,7 +58,9 @@ class AlbumRowItemWidget extends StatelessWidget {
tag: heroTag,
child: ThumbnailWidget(
thumbnail,
shouldShowArchiveStatus: c.isArchived(),
shouldShowArchiveStatus: isIncomingAlbum
? c.hasShareeArchived()
: c.isArchived(),
showFavForAlbumOnly: true,
shouldShowSyncStatus: false,
key: Key(heroTag),
@ -61,6 +71,20 @@ class AlbumRowItemWidget extends StatelessWidget {
}
},
),
if (isIncomingAlbum)
Align(
alignment: Alignment.bottomRight,
child: Padding(
padding:
const EdgeInsets.only(right: 8.0, bottom: 8.0),
child: UserAvatarWidget(
c.owner!,
thumbnailView: true,
),
),
),
],
),
),
),
],

View file

@ -12,10 +12,10 @@ import "package:photos/generated/l10n.dart";
import 'package:photos/models/collection.dart';
import 'package:photos/models/collection_items.dart';
import 'package:photos/services/collections_service.dart';
import "package:photos/ui/collections/album/row_item.dart";
import 'package:photos/ui/common/loading_widget.dart';
import 'package:photos/ui/tabs/section_title.dart';
import "package:photos/ui/tabs/shared/empty_state.dart";
import "package:photos/ui/tabs/shared/incoming_album_item.dart";
import "package:photos/ui/tabs/shared/outgoing_album_item.dart";
class SharedCollectionsTab extends StatefulWidget {
@ -78,6 +78,7 @@ class _SharedCollectionsTabState extends State<SharedCollectionsTab>
}
Widget _getSharedCollectionsGallery(SharedCollections collections) {
const maxThumbnailWidth = 160.0;
const double horizontalPaddingOfGridRow = 16;
const double crossAxisSpacingOfGrid = 9;
final Size size = MediaQuery.of(context).size;
@ -102,9 +103,16 @@ class _SharedCollectionsTabState extends State<SharedCollectionsTab>
scrollDirection: Axis.vertical,
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (context, index) {
return IncomingAlbumItem(
return AlbumRowItemWidget(
collections.incoming[index],
maxThumbnailWidth,
tagPrefix: ""
"shared_collection",
isIncomingAlbum: true,
);
// return IncomingAlbumItem(
// collections.incoming[index],
// );
},
itemCount: collections.incoming.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(