twonly-app/lib/src/visual/elements/contact_chip.element.dart
otsmr 00b2b25252
Some checks are pending
Flutter analyze & test / flutter_analyze_and_test (push) Waiting to run
modify passwordles recovery settings
2026-06-21 03:40:35 +02:00

68 lines
1.9 KiB
Dart

import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:twonly/src/database/daos/contacts.dao.dart';
import 'package:twonly/src/database/twonly.db.dart';
import 'package:twonly/src/utils/misc.dart';
import 'package:twonly/src/visual/components/avatar_icon.comp.dart';
import 'package:twonly/src/visual/components/verification_badge.comp.dart';
import 'package:twonly/src/visual/elements/reactive_tap_feedback.element.dart';
import 'package:twonly/src/visual/views/contact/contact.view.dart';
class ContactChip extends StatelessWidget {
const ContactChip({
required this.contact,
this.onTap,
super.key,
});
final Contact contact;
final void Function(int)? onTap;
@override
Widget build(BuildContext context) {
return ReactiveTapFeedback(
onTap: () {
if (onTap != null) {
onTap!(contact.userId);
} else {
context.navPush(
ContactView(
contact.userId,
key: ValueKey(contact.userId),
),
);
}
},
child: Chip(
avatar: AvatarIcon(
contactId: contact.userId,
fontSize: 10,
),
label: Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
getContactDisplayName(contact),
style: const TextStyle(fontSize: 14),
overflow: TextOverflow.ellipsis,
),
const SizedBox(width: 6),
VerificationBadgeComp(
contact: contact,
size: 12,
clickable: false,
),
if (onTap != null) ...[
const SizedBox(width: 15),
const FaIcon(
FontAwesomeIcons.xmark,
color: Colors.grey,
size: 12,
),
],
],
),
),
);
}
}