Refine backendless share intake
This commit is contained in:
@@ -391,11 +391,11 @@ class _PersonDetail extends ConsumerWidget {
|
||||
]
|
||||
: sharedMessages
|
||||
.take(compact ? 3 : 5)
|
||||
.map(
|
||||
.map<Widget>(
|
||||
(SharedMessageEntry entry) => _PeopleInsightRow(
|
||||
title:
|
||||
entry.sourceDisplayName?.trim().isNotEmpty == true
|
||||
? entry.sourceDisplayName!.trim()
|
||||
? 'Detected in text: ${entry.sourceDisplayName!.trim()}'
|
||||
: 'Shared from ${entry.sourceApp}',
|
||||
subtitle: entry.messageText.trim().isEmpty
|
||||
? 'Imported message content is empty'
|
||||
@@ -404,6 +404,23 @@ class _PersonDetail extends ConsumerWidget {
|
||||
'${entry.resolvedAutomatically ? 'AUTO-LINKED' : 'MANUAL-LINK'} • ${_shortDateTimeLabel(entry.sharedAt)}',
|
||||
),
|
||||
)
|
||||
.followedBy(<Widget>[
|
||||
if (sharedMessages.length > (compact ? 3 : 5))
|
||||
Align(
|
||||
alignment: Alignment.centerLeft,
|
||||
child: TextButton.icon(
|
||||
onPressed: () => _showSharedMessageHistory(
|
||||
context,
|
||||
person: person,
|
||||
sharedMessages: sharedMessages,
|
||||
),
|
||||
icon: const Icon(Icons.list_alt_rounded),
|
||||
label: Text(
|
||||
'View all ${sharedMessages.length} shared texts',
|
||||
),
|
||||
),
|
||||
),
|
||||
])
|
||||
.toList(growable: false),
|
||||
),
|
||||
],
|
||||
@@ -411,6 +428,70 @@ class _PersonDetail extends ConsumerWidget {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _showSharedMessageHistory(
|
||||
BuildContext context, {
|
||||
required PersonProfile person,
|
||||
required List<SharedMessageEntry> sharedMessages,
|
||||
}) {
|
||||
return showModalBottomSheet<void>(
|
||||
context: context,
|
||||
useSafeArea: true,
|
||||
isScrollControlled: true,
|
||||
showDragHandle: true,
|
||||
builder: (BuildContext context) {
|
||||
return DraggableScrollableSheet(
|
||||
expand: false,
|
||||
initialChildSize: 0.82,
|
||||
minChildSize: 0.45,
|
||||
maxChildSize: 0.95,
|
||||
builder: (BuildContext context, ScrollController scrollController) {
|
||||
return Padding(
|
||||
padding: const EdgeInsets.fromLTRB(16, 8, 16, 20),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: <Widget>[
|
||||
Text(
|
||||
'Shared texts',
|
||||
style: Theme.of(context).textTheme.titleLarge,
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
'${person.name} • ${sharedMessages.length} item${sharedMessages.length == 1 ? '' : 's'}',
|
||||
style: Theme.of(context).textTheme.bodySmall?.copyWith(
|
||||
color: AppTheme.textSecondary,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
Expanded(
|
||||
child: ListView.separated(
|
||||
controller: scrollController,
|
||||
itemCount: sharedMessages.length,
|
||||
separatorBuilder: (_, _) => const SizedBox(height: 10),
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
final SharedMessageEntry entry = sharedMessages[index];
|
||||
return _PeopleInsightRow(
|
||||
title:
|
||||
entry.sourceDisplayName?.trim().isNotEmpty == true
|
||||
? 'Detected in text: ${entry.sourceDisplayName!.trim()}'
|
||||
: 'Shared from ${entry.sourceApp}',
|
||||
subtitle: entry.messageText.trim().isEmpty
|
||||
? entry.url ?? 'Imported message content is empty'
|
||||
: entry.messageText.trim(),
|
||||
meta:
|
||||
'${entry.sourceApp.toUpperCase()} • ${entry.resolvedAutomatically ? 'AUTO-LINKED' : 'MANUAL-LINK'} • ${_shortDateTimeLabel(entry.sharedAt)}',
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _showPeoplePreferenceEvidence(
|
||||
BuildContext context, {
|
||||
required PersonPreferenceSignal signal,
|
||||
|
||||
Reference in New Issue
Block a user