main
1import 'package:blood_pressure_app/components/color_picker.dart';
2import 'package:blood_pressure_app/components/input_dialoge.dart';
3import 'package:blood_pressure_app/model/horizontal_graph_line.dart';
4import 'package:blood_pressure_app/model/storage/settings_store.dart';
5import 'package:flutter/material.dart';
6import 'package:blood_pressure_app/l10n/app_localizations.dart';
7import 'package:provider/provider.dart';
8
9class GraphMarkingsScreen extends StatelessWidget {
10 const GraphMarkingsScreen({super.key});
11
12 // TODO: consider adding fullscreen dialoge for adding markings (like medicine)
13 @override
14 Widget build(BuildContext context) {
15 final localizations = AppLocalizations.of(context)!;
16 // IMPORTANT: When adding more option, like vertical lines, add navigation bar
17 return Scaffold(
18 appBar: AppBar(
19 forceMaterialTransparency: true,
20 ),
21 body: Center(child: Consumer<Settings>(
22 builder: (context, settings, child) {
23 final lines = settings.horizontalGraphLines.toList();
24 return ListView.builder(
25 itemCount: lines.length + 2, // support first and last row
26 itemBuilder: (context, i) {
27 if(i == 0) { // first row
28 return Container(
29 padding: const EdgeInsets.all(10),
30 child: DefaultTextStyle.merge(
31 child: Text(localizations.horizontalLines),
32 style: Theme.of(context).textTheme.headlineLarge,
33 ),
34 );
35 }
36 if (i > lines.length) { // last row
37 return ListTile(
38 leading: const Icon(Icons.add),
39 title: Text(localizations.addLine),
40 onTap: () async {
41 final color = await showColorPickerDialog(context);
42 if (!context.mounted) return;
43 final height = await showNumberInputDialoge(context, hintText: localizations.linePositionY);
44
45 if (color == null || height == null) return;
46 lines.add(HorizontalGraphLine(color, height.round()));
47 settings.horizontalGraphLines = lines;
48 },
49 );
50 }
51 return ListTile(
52 leading: Container(
53 width: 40.0,
54 height: 40.0,
55 decoration: BoxDecoration(
56 color: lines[i-1].color,
57 shape: BoxShape.circle,
58 ),
59 ),
60 title: Text(lines[i-1].height.toString()),
61 trailing: IconButton(
62 icon: const Icon(Icons.delete),
63 onPressed: () {
64 lines.removeAt(i-1);
65 settings.horizontalGraphLines = lines;
66 },
67 ),
68 );
69 },
70 );
71 },),
72 ),
73 );
74 }
75}