main
1import 'package:blood_pressure_app/features/bluetooth/logic/characteristics/ble_measurement_data.dart';
2import 'package:blood_pressure_app/features/bluetooth/ui/input_card.dart';
3import 'package:flutter/material.dart';
4import 'package:blood_pressure_app/l10n/app_localizations.dart';
5
6/// Indication of a successful bluetooth measurement.
7class MeasurementSuccess extends StatelessWidget {
8 /// Indicate a successful while taking a bluetooth measurement.
9 const MeasurementSuccess({super.key,
10 required this.onTap,
11 required this.data,
12 });
13
14 /// Data decoded from bluetooth.
15 final BleMeasurementData data;
16
17 /// Called when the user requests closing.
18 final void Function() onTap;
19
20 @override
21 Widget build(BuildContext context) => GestureDetector(
22 onTap: onTap,
23 child: InputCard(
24 onClosed: onTap,
25 child: Center(
26 child: ListTileTheme(
27 data: const ListTileThemeData(
28 iconColor: Colors.orange,
29 ),
30 child: Column(
31 mainAxisAlignment: MainAxisAlignment.center,
32 children: [
33 const Icon(Icons.done, color: Colors.green),
34 const SizedBox(height: 8,),
35 Text(AppLocalizations.of(context)!.measurementSuccess,
36 style: Theme.of(context).textTheme.titleMedium,),
37 const SizedBox(height: 8,),
38 ListTile(
39 title: Text(AppLocalizations.of(context)!.meanArterialPressure),
40 subtitle: Text(data.meanArterialPressure.round().toString()),
41 ),
42 if (data.userID != null)
43 ListTile(
44 title: Text(AppLocalizations.of(context)!.userID),
45 subtitle: Text(data.userID!.toString()),
46 ),
47 if (data.status?.bodyMovementDetected ?? false)
48 ListTile(
49 title: Text(AppLocalizations.of(context)!.bodyMovementDetected),
50 leading: const Icon(Icons.directions_walk),
51 ),
52 if (data.status?.cuffTooLose ?? false)
53 ListTile(
54 title: Text(AppLocalizations.of(context)!.cuffTooLoose),
55 leading: const Icon(Icons.space_bar),
56 ),
57 if (data.status?.improperMeasurementPosition ?? false)
58 ListTile(
59 title: Text(AppLocalizations.of(context)!.improperMeasurementPosition),
60 leading: const Icon(Icons.emoji_people),
61 ),
62 if (data.status?.irregularPulseDetected ?? false)
63 ListTile(
64 title: Text(AppLocalizations.of(context)!.irregularPulseDetected),
65 leading: const Icon(Icons.heart_broken),
66 ),
67 if (data.status?.pulseRateExceedsUpperLimit ?? false)
68 ListTile(
69 title: Text(AppLocalizations.of(context)!.pulseRateExceedsUpperLimit),
70 leading: const Icon(Icons.monitor_heart),
71 ),
72 if (data.status?.pulseRateIsLessThenLowerLimit ?? false)
73 ListTile(
74 title: Text(AppLocalizations.of(context)!.pulseRateLessThanLowerLimit),
75 leading: const Icon(Icons.monitor_heart),
76 ),
77 ],
78 ),
79 ),
80 ),
81 ),
82 );
83
84}