Fix regression in zaps

This commit is contained in:
franzap
2025-12-25 20:49:37 -03:00
parent e4a2634a44
commit 81e8933686
3 changed files with 71 additions and 26 deletions
+23 -3
View File
@@ -210,17 +210,22 @@ class _UserZapsList extends HookConsumerWidget {
return const SizedBox.shrink();
}
// Collect addressable tags for apps
// Collect addressable tags for apps and metadata IDs
final allAppTags = <String, Set<String>>{};
final metadataIds = <String>{};
for (final app in apps) {
final appTags = app.event.addressableIdTagMap;
for (final entry in appTags.entries) {
allAppTags[entry.key] = {...?allAppTags[entry.key], ...entry.value};
}
final metadata = app.latestFileMetadata;
if (metadata != null) {
metadataIds.add(metadata.id);
}
}
// Query zaps on apps (via #a tag)
final zapsState = ref.watch(
final appZapsState = ref.watch(
query<Zap>(
tags: allAppTags,
source: const LocalAndRemoteSource(relays: 'social'),
@@ -228,7 +233,22 @@ class _UserZapsList extends HookConsumerWidget {
),
);
final allZaps = zapsState.models;
// Query zaps on metadata (via #e tag) - for legacy compatibility
final metadataZapsState = metadataIds.isNotEmpty
? ref.watch(
query<Zap>(
tags: {'#e': metadataIds},
source: const LocalAndRemoteSource(relays: 'social'),
subscriptionPrefix: 'user-metadata-zaps',
),
)
: null;
// Combine zaps from both queries
final allZaps = {
...appZapsState.models,
if (metadataZapsState != null) ...metadataZapsState.models,
};
if (allZaps.isEmpty) {
return const SizedBox.shrink();
+21 -13
View File
@@ -268,24 +268,15 @@ class SocialActionsRow extends HookConsumerWidget {
}
}
class _ZappersListSection extends StatelessWidget {
class _ZappersListSection extends ConsumerWidget {
const _ZappersListSection({required this.app});
final App app;
@override
Widget build(BuildContext context) {
return _ZappersListSectionWithMetadata(app: app);
}
}
class _ZappersListSectionWithMetadata extends ConsumerWidget {
const _ZappersListSectionWithMetadata({required this.app});
final App app;
@override
Widget build(BuildContext context, WidgetRef ref) {
final metadataId = app.latestFileMetadata?.id;
// Query zaps on app (via #a tag)
final zapsState = ref.watch(
query<Zap>(
@@ -295,7 +286,24 @@ class _ZappersListSectionWithMetadata extends ConsumerWidget {
),
);
final allZaps = zapsState.models;
// Query zaps on metadata (via #e tag) - for legacy compatibility
final zapsOnMetadataState = metadataId != null
? ref.watch(
query<Zap>(
tags: {
'#e': {metadataId},
},
source: const LocalAndRemoteSource(relays: 'social'),
subscriptionPrefix: 'metadata-zaps',
),
)
: null;
// Combine zaps from both queries
final allZaps = {
...zapsState.models,
if (zapsOnMetadataState != null) ...zapsOnMetadataState.models,
};
if (allZaps.isEmpty) return const SizedBox.shrink();
+27 -10
View File
@@ -29,23 +29,40 @@ class ProfileAvatar extends StatelessWidget {
height: radius * 2,
fadeInDuration: const Duration(milliseconds: 500),
fadeOutDuration: const Duration(milliseconds: 200),
placeholder: (context, url) => const SizedBox.shrink(),
errorWidget: (context, url, error) => Center(
child: Icon(
Icons.person_outline,
color: AppColors.darkSkeletonHighlight,
size: radius * 1.3,
placeholder: (context, url) => Container(
width: radius * 2,
height: radius * 2,
color: const Color(0xFF1A1A1A),
child: Center(
child: Icon(
Icons.person,
color: const Color(0xFF2C4A6B),
size: radius * 1.2,
),
),
),
errorWidget: (context, url, error) => Container(
width: radius * 2,
height: radius * 2,
color: const Color(0xFF1A1A1A),
child: Center(
child: Icon(
Icons.person,
color: const Color(0xFF2C4A6B),
size: radius * 1.2,
),
),
),
)
: SizedBox(
: Container(
width: radius * 2,
height: radius * 2,
color: const Color(0xFF1A1A1A),
child: Center(
child: Icon(
Icons.person_outline,
color: AppColors.darkSkeletonHighlight,
size: radius * 1.3,
Icons.person,
color: const Color(0xFF0D1B2A),
size: radius * 2,
),
),
),