Skip to content

Commit

Permalink
Sync preview
Browse files Browse the repository at this point in the history
  • Loading branch information
cp-pratik-k committed Mar 21, 2024
1 parent 2ad7957 commit 709121e
Show file tree
Hide file tree
Showing 17 changed files with 855 additions and 376 deletions.
4 changes: 4 additions & 0 deletions app/lib/domain/extensions/map_extensions.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
extension MapExtension<K,E> on Map<K, List<E>> {
List<E> valuesWhere(bool Function(E element) test) =>
values.expand((element) => element).toList().where(test).toList();
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class NoLocalMediasAccessScreen extends ConsumerWidget {
PrimaryButton(
onPressed: () async {
await openAppSettings();
await notifier.loadMedias();
await notifier.loadLocalMedia();
},
text: context.l10n.load_local_media_button_text,
),
Expand Down
153 changes: 72 additions & 81 deletions app/lib/ui/flow/home/home_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -100,26 +100,21 @@ class _HomeScreenState extends ConsumerState<HomeScreen> {
} else if (medias.isEmpty && !hasLocalMediaAccess) {
return const NoLocalMediasAccessScreen();
}
return RefreshIndicator.adaptive(
onRefresh: () async {
await notifier.loadMedias();
},
child: Stack(
alignment: Alignment.bottomRight,
children: [
_buildMediaList(
context: context,
medias: medias,
uploadingMedias: uploadingMedias,
selectedMedias: selectedMedias,
return Stack(
alignment: Alignment.bottomRight,
children: [
_buildMediaList(
context: context,
medias: medias,
uploadingMedias: uploadingMedias,
selectedMedias: selectedMedias,
),
if (selectedMedias.isNotEmpty)
Padding(
padding: context.systemPadding + const EdgeInsets.all(16),
child: const MultiSelectionDoneButton(),
),
if (selectedMedias.isNotEmpty)
Padding(
padding: context.systemPadding + const EdgeInsets.all(16),
child: const MultiSelectionDoneButton(),
),
],
),
],
);
}

Expand All @@ -135,74 +130,70 @@ class _HomeScreenState extends ConsumerState<HomeScreen> {
const SliverToBoxAdapter(
child: HomeScreenHints(),
),
...medias.entries
.map(
(e) => SliverMainAxisGroup(
slivers: [
SliverPersistentHeader(
delegate: SliverStickyHeaderDelegate(
header: Container(
padding: const EdgeInsets.only(left: 16),
alignment: Alignment.centerLeft,
decoration: BoxDecoration(
color: context.colorScheme.surface,
),
child: Text(
DateFormat("d MMMM, y").format(e.key),
style: AppTextStyles.subtitle1.copyWith(
color: context.colorScheme.textPrimary,
),
),
...medias.entries.map((e) {
return SliverMainAxisGroup(
slivers: [
SliverPersistentHeader(
delegate: SliverStickyHeaderDelegate(
header: Container(
padding: const EdgeInsets.only(left: 16),
alignment: Alignment.centerLeft,
decoration: BoxDecoration(
color: context.colorScheme.surface,
),
child: Text(
DateFormat("d MMMM, y").format(e.key),
style: AppTextStyles.subtitle1.copyWith(
color: context.colorScheme.textPrimary,
),
),
pinned: true,
),
SliverPadding(
padding:
const EdgeInsets.symmetric(horizontal: 4, vertical: 8),
sliver: SliverGrid.builder(
itemBuilder: (context, index) {
final media = e.value[index];
return Hero(
tag: "${AppRoutePath.home}/${media.id}",
child: AppMediaItem(
key: ValueKey(media.id),
onTap: () {
if (selectedMedias.isNotEmpty) {
notifier.toggleMediaSelection(media);
} else {
AppMediaView.showPreview(
context: context,
media: media,
heroTag: "${AppRoutePath.home}/${media.id}",
);
}
},
onLongTap: () {
notifier.toggleMediaSelection(media);
},
isSelected: selectedMedias.contains(media),
status: uploadingMedias
.firstWhereOrNull(
(element) => element.mediaId == media.id)
?.status,
media: media,
),
);
},
itemCount: e.value.length,
gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
crossAxisSpacing: 4,
mainAxisSpacing: 4,
),
pinned: true,
),
SliverPadding(
padding: const EdgeInsets.symmetric(horizontal: 4, vertical: 8),
sliver: SliverGrid.builder(
itemBuilder: (context, index) {
final media = e.value[index];
return Hero(
tag: "${AppRoutePath.home}/${media.id}",
child: AppMediaItem(
key: ValueKey(media.id),
onTap: () {
if (selectedMedias.isNotEmpty) {
notifier.toggleMediaSelection(media);
} else {
AppMediaView.showPreview(
context: context,
media: media,
heroTag: "${AppRoutePath.home}/${media.id}",
);
}
},
onLongTap: () {
notifier.toggleMediaSelection(media);
},
isSelected: selectedMedias.contains(media),
status: uploadingMedias
.firstWhereOrNull(
(element) => element.mediaId == media.id)
?.status,
media: media,
),
),
);
},
itemCount: e.value.length,
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3,
crossAxisSpacing: 4,
mainAxisSpacing: 4,
),
],
),
),
)
.toList(),
],
);
}).toList(),
SliverToBoxAdapter(
child: SizedBox(height: context.systemPadding.bottom),
),
Expand Down
Loading

0 comments on commit 709121e

Please sign in to comment.