54 lines
1.3 KiB
Dart
54 lines
1.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:gap/gap.dart';
|
|
import 'package:google_fonts/google_fonts.dart';
|
|
|
|
class InfoRow extends StatelessWidget {
|
|
final String label;
|
|
final String value;
|
|
final IconData icon;
|
|
final bool monospace;
|
|
final VoidCallback? onTap;
|
|
|
|
const InfoRow({
|
|
super.key,
|
|
required this.label,
|
|
required this.value,
|
|
required this.icon,
|
|
this.monospace = false,
|
|
this.onTap,
|
|
});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
Widget valueWidget = Text(
|
|
value,
|
|
style:
|
|
monospace
|
|
? GoogleFonts.robotoMono(fontSize: 14)
|
|
: Theme.of(context).textTheme.bodyMedium,
|
|
textAlign: TextAlign.end,
|
|
);
|
|
|
|
if (onTap != null) valueWidget = InkWell(onTap: onTap, child: valueWidget);
|
|
|
|
return Row(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Icon(icon, size: 20, color: Theme.of(context).colorScheme.primary),
|
|
const Gap(12),
|
|
Expanded(
|
|
flex: 2,
|
|
child: Text(
|
|
label,
|
|
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
|
color: Theme.of(context).colorScheme.onSurfaceVariant,
|
|
),
|
|
),
|
|
),
|
|
const Gap(12),
|
|
Expanded(flex: 3, child: valueWidget),
|
|
],
|
|
);
|
|
}
|
|
}
|