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}