Commit 73aebaf

derdilla <derdilla06@gmail.com>
2023-05-19 10:31:20
add screen to edit data
1 parent 7e086a3
Changed files (2)
lib/components/measurement_list.dart
@@ -6,6 +6,8 @@ import 'package:flutter/material.dart';
 import 'package:provider/provider.dart';
 import 'package:intl/intl.dart';
 
+import '../screens/add_measurement.dart';
+
 class MeasurementList extends StatelessWidget {
   late final _tableElementsSizes;
   late final _sideFlex;
@@ -23,47 +25,45 @@ class MeasurementList extends StatelessWidget {
   @override
   Widget build(BuildContext context) {
 
-    return Container(
-        child: Column(
-          children: [
-            buildTableHeader(context),
-            Expanded(
-              flex: 100,
-              child: Consumer<BloodPressureModel>(
-                builder: (context, model, child) {
-                  final items = model.getLastX(30);
-                  return FutureBuilder<UnmodifiableListView<BloodPressureRecord>>(
-                    future: items,
-                    builder: (BuildContext context, AsyncSnapshot<UnmodifiableListView<BloodPressureRecord>> recordsSnapsot) {
-                      assert(recordsSnapsot.connectionState != ConnectionState.none);
+    return Column(
+      children: [
+        buildTableHeader(context),
+        Expanded(
+          flex: 100,
+          child: Consumer<BloodPressureModel>(
+            builder: (context, model, child) {
+              final items = model.getLastX(30);
+              return FutureBuilder<UnmodifiableListView<BloodPressureRecord>>(
+                future: items,
+                builder: (BuildContext context, AsyncSnapshot<UnmodifiableListView<BloodPressureRecord>> recordsSnapsot) {
+                  assert(recordsSnapsot.connectionState != ConnectionState.none);
 
-                      if (recordsSnapsot.connectionState == ConnectionState.waiting) {
-                        return const Text('loading...');
+                  if (recordsSnapsot.connectionState == ConnectionState.waiting) {
+                    return const Text('loading...');
+                  } else {
+                    if (recordsSnapsot.hasError) {
+                      return Text('Error loading data:\n${recordsSnapsot.error}');
+                    } else {
+                      final data = recordsSnapsot.data ?? [];
+                      if (data.isNotEmpty && data.first.diastolic > 0) {
+                        return ListView.builder(
+                            itemCount: data.length,
+                            shrinkWrap: true,
+                            itemBuilder: (context, index) {
+                              return buildListItem(data[index]);
+                            }
+                        );
                       } else {
-                        if (recordsSnapsot.hasError) {
-                          return Text('Error loading data:\n${recordsSnapsot.error}');
-                        } else {
-                          final data = recordsSnapsot.data ?? [];
-                          if (data.isNotEmpty && data.first.diastolic > 0) {
-                            return ListView.builder(
-                                itemCount: data.length,
-                                shrinkWrap: true,
-                                itemBuilder: (context, index) {
-                                  return buildListItem(data[index]);
-                                }
-                            );
-                          } else {
-                            return const Text('no data');
-                          }
-                        }
+                        return const Text('no data');
                       }
                     }
-                  );
+                  }
                 }
-              ),
-            )
-          ],
+              );
+            }
+          ),
         )
+      ],
     );
   }
 
@@ -71,39 +71,54 @@ class MeasurementList extends StatelessWidget {
     return Consumer<Settings>(
         builder: (context, settings, child) {
           final formatter = DateFormat(settings.dateFormatString);
-          return Container(
-            margin: const EdgeInsets.only(bottom: 5),
-            child: Row(
-                children: [
-                  Expanded(
-                    flex: _sideFlex,
-                    child: const SizedBox(),
-                  ),
-                  Expanded(
-                      flex: _tableElementsSizes[0],
-                      child: Text(formatter.format(record.creationTime))
-                  ),
-                  Expanded(
-                      flex: _tableElementsSizes[1],
-                      child: Text(record.systolic.toString())
-                  ),
-                  Expanded(
-                      flex: _tableElementsSizes[2],
-                      child: Text(record.diastolic.toString())
-                  ),
-                  Expanded(
-                      flex: _tableElementsSizes[3],
-                      child: Text(record.pulse.toString())
-                  ),
-                  Expanded(
-                      flex: _tableElementsSizes[4],
-                      child: Text(record.notes)
-                  ),
-                  Expanded(
-                    flex: _sideFlex,
-                    child: const SizedBox(),
-                  ),
-                ]
+          return GestureDetector(
+            onTap: () {
+              Navigator.push(
+                context,
+                MaterialPageRoute(builder: (context) => AddMeasurementPage(
+                  initTime: record.creationTime,
+                  initSys: record.systolic,
+                  initDia: record.diastolic,
+                  initPul: record.pulse,
+                  initNote: record.notes,
+                  isEdit: true,
+                )),
+              );
+            },
+            child: Container(
+              margin: const EdgeInsets.only(bottom: 5),
+              child: Row(
+                  children: [
+                    Expanded(
+                      flex: _sideFlex,
+                      child: const SizedBox(),
+                    ),
+                    Expanded(
+                        flex: _tableElementsSizes[0],
+                        child: Text(formatter.format(record.creationTime))
+                    ),
+                    Expanded(
+                        flex: _tableElementsSizes[1],
+                        child: Text(record.systolic.toString())
+                    ),
+                    Expanded(
+                        flex: _tableElementsSizes[2],
+                        child: Text(record.diastolic.toString())
+                    ),
+                    Expanded(
+                        flex: _tableElementsSizes[3],
+                        child: Text(record.pulse.toString())
+                    ),
+                    Expanded(
+                        flex: _tableElementsSizes[4],
+                        child: Text(record.notes)
+                    ),
+                    Expanded(
+                      flex: _sideFlex,
+                      child: const SizedBox(),
+                    ),
+                  ]
+              ),
             ),
           );
         }
lib/screens/add_measurement.dart
@@ -12,13 +12,15 @@ class AddMeasurementPage extends StatefulWidget {
   final int initDia;
   final int initPul;
   final String initNote;
+  final bool isEdit;
 
   const AddMeasurementPage({super.key,
     this.initTime,
     this.initSys = -1,
     this.initDia = -1,
     this.initPul = -1,
-    this.initNote = ''});
+    this.initNote = '', 
+    this.isEdit = false});
 
   @override
   State<AddMeasurementPage> createState() => _AddMeasurementPageState();
@@ -85,6 +87,7 @@ class _AddMeasurementPageState extends State<AddMeasurementPage> {
                     }
                 ),
                 TextFormField(
+                  initialValue: widget.isEdit ? _systolic.toString() : '',
                   decoration: const InputDecoration(
                     hintText: 'systolic'
                   ),
@@ -113,6 +116,7 @@ class _AddMeasurementPageState extends State<AddMeasurementPage> {
                   },
                 ),
                 TextFormField(
+                  initialValue: widget.isEdit ? _diastolic.toString() : '',
                   decoration: const InputDecoration(
                       hintText: 'diastolic'
                   ),
@@ -140,6 +144,7 @@ class _AddMeasurementPageState extends State<AddMeasurementPage> {
                   },
                 ),
                 TextFormField(
+                  initialValue: widget.isEdit ? _pulse.toString() : '',
                   decoration: const InputDecoration(
                       hintText: 'pulse'
                   ),
@@ -167,6 +172,7 @@ class _AddMeasurementPageState extends State<AddMeasurementPage> {
                   },
                 ),
                 TextFormField(
+                  initialValue: widget.isEdit ? _note.toString() : '',
                   decoration: const InputDecoration(
                       hintText: 'note (optional)'
                   ),
@@ -187,8 +193,9 @@ class _AddMeasurementPageState extends State<AddMeasurementPage> {
                         style: ElevatedButton.styleFrom(
                             backgroundColor: Theme.of(context).unselectedWidgetColor
                         ),
-                        child: const Text('CANCEL')),
-                    Spacer(),
+                        child: (() => widget.isEdit ? const Text('DELETE NOW') : const Text('CANCEL'))()
+                    ),
+                    const Spacer(),
                     ElevatedButton(
                         onPressed: () {
                           if (_formKey.currentState!.validate()) {