build method

  1. @override
dynamic build(
  1. dynamic context,
  2. dynamic ref
)

Implementation

@override
Widget build(BuildContext context, WidgetRef ref) {
  bool isVerified = deviceRecord.isVerified();
  final fields = [
    isVerified ? L10n.of(context).verified : L10n.of(context).unverified,
  ];
  final lastSeenTs = deviceRecord.lastSeenTs();
  if (lastSeenTs != null) {
    final dateTime = DateTime.fromMillisecondsSinceEpoch(
      lastSeenTs,
      isUtc: true,
    );
    fields.add(dateTime.toLocal().toString());
  }
  final lastSeenIp = deviceRecord.lastSeenIp();
  if (lastSeenIp != null) {
    fields.add(lastSeenIp);
  }
  fields.add(deviceRecord.deviceId().toString());
  return Card(
    margin: const EdgeInsets.symmetric(vertical: 2, horizontal: 15),
    child: ListTile(
      leading: isVerified
          ? Icon(
              Atlas.check_shield_thin,
              color: Theme.of(context).colorScheme.success,
            )
          : Icon(
              Atlas.xmark_shield_thin,
              color: Theme.of(context).colorScheme.error,
            ),
      title: Text(deviceRecord.displayName() ?? ''),
      subtitle: Breadcrumbs(
        crumbs: fields.map((e) => TextSpan(text: e)).toList(),
        separator: ' - ',
      ),
      trailing: PopupMenuButton(
        itemBuilder: (BuildContext context) => <PopupMenuEntry>[
          PopupMenuItem(
            onTap: () async => await onLogout(context, ref),
            child: Row(
              children: [
                const Icon(Atlas.exit_thin),
                Padding(
                  padding: const EdgeInsets.symmetric(horizontal: 5),
                  child: Text(
                    L10n.of(context).logOut,
                    style: Theme.of(context).textTheme.labelSmall,
                    softWrap: false,
                  ),
                ),
              ],
            ),
          ),
          PopupMenuItem(
            onTap: () async => await onVerify(context, ref),
            child: Row(
              children: [
                const Icon(Atlas.shield_exclamation_thin),
                Padding(
                  padding: const EdgeInsets.symmetric(horizontal: 5),
                  child: Text(
                    L10n.of(context).verifySession,
                    style: Theme.of(context).textTheme.labelSmall,
                    softWrap: false,
                  ),
                ),
              ],
            ),
          ),
        ],
      ),
    ),
  );
}