Commit f7cd0a6

derdilla <derdilla06@gmail.com>
2023-07-16 09:20:29
use proper bottom bar instead of floatingActionButton hack
1 parent 70f10b3
Changed files (2)
lib/screens/subsettings/export_import_screen.dart
@@ -18,87 +18,84 @@ class ExportImportScreen extends StatelessWidget {
         title: Text(AppLocalizations.of(context)!.exportImport),
         backgroundColor: Theme.of(context).primaryColor,
       ),
-      body: Container(
-        margin: const EdgeInsets.only(bottom: 80),
-        child: Consumer<Settings>(builder: (context, settings, child) {
-          return SingleChildScrollView(
-            child: Column(
-              children: [
-                const ExportWarnBanner(),
-                const SizedBox(height: 15,),
-                Opacity(
-                  opacity: (settings.exportFormat == ExportFormat.db) ? 0.5 : 1, // TODO: centralize when restyle
-                  child: const IntervalPicker(),
-                ),
-                SettingsTile(
-                  title: Text(AppLocalizations.of(context)!.exportDir),
-                  description: Text(settings.defaultExportDir),
-                  onPressed: (context) async {
-                    final appDir = await JSaver.instance.setDefaultSavingDirectory();
-                    settings.defaultExportDir = appDir.value;
+      body: Consumer<Settings>(builder: (context, settings, child) {
+        return SingleChildScrollView(
+          child: Column(
+            children: [
+              const ExportWarnBanner(),
+              const SizedBox(height: 15,),
+              Opacity(
+                opacity: (settings.exportFormat == ExportFormat.db) ? 0.5 : 1, // TODO: centralize when restyle
+                child: const IntervalPicker(),
+              ),
+              SettingsTile(
+                title: Text(AppLocalizations.of(context)!.exportDir),
+                description: Text(settings.defaultExportDir),
+                onPressed: (context) async {
+                  final appDir = await JSaver.instance.setDefaultSavingDirectory();
+                  settings.defaultExportDir = appDir.value;
+                }
+              ),
+              SwitchSettingsTile(
+                  title: Text(AppLocalizations.of(context)!.exportAfterEveryInput),
+                  description: Text(AppLocalizations.of(context)!.exportAfterEveryInputDesc),
+                  initialValue: settings.exportAfterEveryEntry,
+                  onToggle: (value) {
+                    settings.exportAfterEveryEntry = value;
                   }
-                ),
-                SwitchSettingsTile(
-                    title: Text(AppLocalizations.of(context)!.exportAfterEveryInput),
-                    description: Text(AppLocalizations.of(context)!.exportAfterEveryInputDesc),
-                    initialValue: settings.exportAfterEveryEntry,
-                    onToggle: (value) {
-                      settings.exportAfterEveryEntry = value;
-                    }
-                ),
-                DropDownSettingsTile<ExportFormat>(
-                  key: const Key('exportFormat'),
-                  title: Text(AppLocalizations.of(context)!.exportFormat),
-                  value: settings.exportFormat,
-                  items: [
-                    DropdownMenuItem(value: ExportFormat.csv, child: Text(AppLocalizations.of(context)!.csv)),
-                    //DropdownMenuItem(value: ExportFormat.pdf, child: Text(AppLocalizations.of(context)!.pdf)),
-                    DropdownMenuItem(value: ExportFormat.db, child: Text(AppLocalizations.of(context)!.db)),
-                  ],
-                  onChanged: (ExportFormat? value) {
-                    if (value != null) {
-                      settings.exportFormat = value;
-                    }
-                  },
-                ),
-                InputSettingsTile(
-                  title: Text(AppLocalizations.of(context)!.fieldDelimiter),
-                  inputWidth: 40,
-                  initialValue: settings.csvFieldDelimiter,
-                  disabled: !(settings.exportFormat == ExportFormat.csv),
-                  onEditingComplete: (value) {
-                    if (value != null) {
-                      settings.csvFieldDelimiter = value;
-                    }
-                  },
-                ),
-                InputSettingsTile(
-                  title: Text(AppLocalizations.of(context)!.textDelimiter),
-                  inputWidth: 40,
-                  initialValue: settings.csvTextDelimiter,
+              ),
+              DropDownSettingsTile<ExportFormat>(
+                key: const Key('exportFormat'),
+                title: Text(AppLocalizations.of(context)!.exportFormat),
+                value: settings.exportFormat,
+                items: [
+                  DropdownMenuItem(value: ExportFormat.csv, child: Text(AppLocalizations.of(context)!.csv)),
+                  //DropdownMenuItem(value: ExportFormat.pdf, child: Text(AppLocalizations.of(context)!.pdf)),
+                  DropdownMenuItem(value: ExportFormat.db, child: Text(AppLocalizations.of(context)!.db)),
+                ],
+                onChanged: (ExportFormat? value) {
+                  if (value != null) {
+                    settings.exportFormat = value;
+                  }
+                },
+              ),
+              InputSettingsTile(
+                title: Text(AppLocalizations.of(context)!.fieldDelimiter),
+                inputWidth: 40,
+                initialValue: settings.csvFieldDelimiter,
+                disabled: !(settings.exportFormat == ExportFormat.csv),
+                onEditingComplete: (value) {
+                  if (value != null) {
+                    settings.csvFieldDelimiter = value;
+                  }
+                },
+              ),
+              InputSettingsTile(
+                title: Text(AppLocalizations.of(context)!.textDelimiter),
+                inputWidth: 40,
+                initialValue: settings.csvTextDelimiter,
+                disabled: !(settings.exportFormat == ExportFormat.csv),
+                onEditingComplete: (value) {
+                  if (value != null) {
+                    settings.csvTextDelimiter = value;
+                  }
+                },
+              ),
+              SwitchSettingsTile(
+                  title: Text(AppLocalizations.of(context)!.exportCsvHeadline),
+                  description: Text(AppLocalizations.of(context)!.exportCsvHeadlineDesc),
+                  initialValue: settings.exportCsvHeadline,
                   disabled: !(settings.exportFormat == ExportFormat.csv),
-                  onEditingComplete: (value) {
-                    if (value != null) {
-                      settings.csvTextDelimiter = value;
-                    }
-                  },
-                ),
-                SwitchSettingsTile(
-                    title: Text(AppLocalizations.of(context)!.exportCsvHeadline),
-                    description: Text(AppLocalizations.of(context)!.exportCsvHeadlineDesc),
-                    initialValue: settings.exportCsvHeadline,
-                    disabled: !(settings.exportFormat == ExportFormat.csv),
-                    onToggle: (value) {
-                      settings.exportCsvHeadline = value;
-                    }
-                ),
-                const ExportFieldCustomisationSetting(),
-              ],
-            ),
-          );
-        })
-      ),
-      floatingActionButton: const ExportImportButtons(),
+                  onToggle: (value) {
+                    settings.exportCsvHeadline = value;
+                  }
+              ),
+              const ExportFieldCustomisationSetting(),
+            ],
+          ),
+        );
+      }),
+      bottomNavigationBar: const ExportImportButtons(),
     );
   }
 }
lib/screens/statistics.dart
@@ -21,136 +21,134 @@ class StatisticsPage extends StatelessWidget {
         title: Text(AppLocalizations.of(context)!.statistics),
         backgroundColor: Theme.of(context).primaryColor,
       ),
-      body: Container(
-        margin: const EdgeInsets.only(bottom: 100),
-        child: SingleChildScrollView(child: Consumer<BloodPressureModel>(
-          builder: (context, model, child) {
-            return Consumer<Settings>(builder: (context, settings, child) {
-              return ConsistentFutureBuilder<UnmodifiableListView<BloodPressureRecord>>(
-                  future: model.getInTimeRange(settings.displayDataStart, settings.displayDataEnd),
-                  onData: (context, data) {
-                    final analyzer = BloodPressureAnalyser(data.toList());
-                    return Column(
-                      children: [
-                        Statistic(
-                            key: const Key('measurementCount'),
-                            caption: Text(AppLocalizations.of(context)!.measurementCount), child: displayInt(analyzer.count)),
-                        // special measurements
-                        StatisticsRow(
-                          caption1: Text(
-                            AppLocalizations.of(context)!.avgOf(AppLocalizations.of(context)!.sysLong),
-                            style: TextStyle(color: settings.sysColor, fontWeight: FontWeight.w700),
-                          ),
-                          child1: displayInt(analyzer.avgSys),
-                          caption2: Text(
-                            AppLocalizations.of(context)!.avgOf(AppLocalizations.of(context)!.diaLong),
-                            style: TextStyle(color: settings.diaColor, fontWeight: FontWeight.w700),
-                          ),
-                          child2: displayInt(analyzer.avgDia),
-                          caption3: Text(
-                            AppLocalizations.of(context)!.avgOf(AppLocalizations.of(context)!.pulLong),
-                            style: TextStyle(color: settings.pulColor, fontWeight: FontWeight.w700),
-                          ),
-                          child3: displayInt(analyzer.avgPul),
+      body: SingleChildScrollView(child: Consumer<BloodPressureModel>(
+        builder: (context, model, child) {
+          return Consumer<Settings>(builder: (context, settings, child) {
+            return ConsistentFutureBuilder<UnmodifiableListView<BloodPressureRecord>>(
+                future: model.getInTimeRange(settings.displayDataStart, settings.displayDataEnd),
+                onData: (context, data) {
+                  final analyzer = BloodPressureAnalyser(data.toList());
+                  return Column(
+                    children: [
+                      Statistic(
+                          key: const Key('measurementCount'),
+                          caption: Text(AppLocalizations.of(context)!.measurementCount), child: displayInt(analyzer.count)),
+                      // special measurements
+                      StatisticsRow(
+                        caption1: Text(
+                          AppLocalizations.of(context)!.avgOf(AppLocalizations.of(context)!.sysLong),
+                          style: TextStyle(color: settings.sysColor, fontWeight: FontWeight.w700),
                         ),
-                        Statistic(
-                          caption: Text(AppLocalizations.of(context)!.measurementsPerDay),
-                          child: displayInt(analyzer.measurementsPerDay)),
-                        StatisticsRow(
-                          caption1: Text(
-                            AppLocalizations.of(context)!.minOf(AppLocalizations.of(context)!.sysLong),
-                            style: TextStyle(color: settings.sysColor, fontWeight: FontWeight.w700),
-                          ),
-                          child1: displayInt(analyzer.minSys),
-                          caption2: Text(
-                            AppLocalizations.of(context)!.minOf(AppLocalizations.of(context)!.diaLong),
-                            style: TextStyle(color: settings.diaColor, fontWeight: FontWeight.w700),
-                          ),
-                          child2: displayInt(analyzer.minDia),
-                          caption3: Text(
-                            AppLocalizations.of(context)!.minOf(AppLocalizations.of(context)!.pulLong),
-                            style: TextStyle(color: settings.pulColor, fontWeight: FontWeight.w700),
-                          ),
-                          child3: displayInt(analyzer.minPul),
+                        child1: displayInt(analyzer.avgSys),
+                        caption2: Text(
+                          AppLocalizations.of(context)!.avgOf(AppLocalizations.of(context)!.diaLong),
+                          style: TextStyle(color: settings.diaColor, fontWeight: FontWeight.w700),
                         ),
-                        StatisticsRow(
-                          caption2: Text(
-                            AppLocalizations.of(context)!.maxOf(AppLocalizations.of(context)!.diaLong),
-                            style: TextStyle(color: settings.diaColor, fontWeight: FontWeight.w700),
-                          ),
-                          child2: displayInt(analyzer.maxDia),
-                          caption1: Text(
-                            AppLocalizations.of(context)!.maxOf(AppLocalizations.of(context)!.sysLong),
-                            style: TextStyle(color: settings.sysColor, fontWeight: FontWeight.w700),
-                          ),
-                          child1: displayInt(analyzer.maxSys),
-                          caption3: Text(
-                            AppLocalizations.of(context)!.maxOf(AppLocalizations.of(context)!.pulLong),
-                            style: TextStyle(color: settings.pulColor, fontWeight: FontWeight.w700),
-                          ),
-                          child3: displayInt(analyzer.maxPul),
+                        child2: displayInt(analyzer.avgDia),
+                        caption3: Text(
+                          AppLocalizations.of(context)!.avgOf(AppLocalizations.of(context)!.pulLong),
+                          style: TextStyle(color: settings.pulColor, fontWeight: FontWeight.w700),
                         ),
-                        // Time-Resolved Metrics
-                        Statistic(
-                          caption: Text(AppLocalizations.of(context)!.timeResolvedMetrics),
-                          child: (() {
-                            final data = analyzer.allAvgsRelativeToDaytime;
-                            const opacity = 0.5;
-                            return SizedBox(
-                              width: 500,
-                              height: 500,
-                              child: RadarChart(
-                                RadarChartData(
-                                  radarShape: RadarShape.circle,
-                                  radarBorderData: const BorderSide(color: Colors.transparent),
-                                  gridBorderData: BorderSide(color: Theme.of(context).dividerColor, width: 2),
-                                  tickBorderData: BorderSide(color: Theme.of(context).dividerColor, width: 2),
-                                  ticksTextStyle: const TextStyle(color: Colors.transparent),
-                                  tickCount: 5,
-                                  titleTextStyle: const TextStyle(fontSize: 25),
-                                  getTitle: (pos, value) {
-                                    if (pos % 2 == 0) {
-                                      return RadarChartTitle(text: '$pos', positionPercentageOffset: 0.05);
-                                    }
-                                    return const RadarChartTitle(text: '');
-                                  },
-                                  dataSets: [
-                                    RadarDataSet(
-                                        dataEntries: intListToRadarEntry(data[0]),
-                                        borderColor: settings.diaColor,
-                                        fillColor: settings.diaColor.withOpacity(opacity),
-                                        entryRadius: 0,
-                                        borderWidth: settings.graphLineThickness),
-                                    RadarDataSet(
-                                        dataEntries: intListToRadarEntry(data[1]),
-                                        borderColor: settings.sysColor,
-                                        fillColor: settings.sysColor.withOpacity(opacity),
-                                        entryRadius: 0,
-                                        borderWidth: settings.graphLineThickness),
-                                    RadarDataSet(
-                                        dataEntries: intListToRadarEntry(data[2]),
-                                        borderColor: settings.pulColor,
-                                        fillColor: settings.pulColor.withOpacity(opacity),
-                                        entryRadius: 0,
-                                        borderWidth: settings.graphLineThickness),
-                                  ],
-                                ),
-                              ),
-                            );
-                          })(),
+                        child3: displayInt(analyzer.avgPul),
+                      ),
+                      Statistic(
+                        caption: Text(AppLocalizations.of(context)!.measurementsPerDay),
+                        child: displayInt(analyzer.measurementsPerDay)),
+                      StatisticsRow(
+                        caption1: Text(
+                          AppLocalizations.of(context)!.minOf(AppLocalizations.of(context)!.sysLong),
+                          style: TextStyle(color: settings.sysColor, fontWeight: FontWeight.w700),
                         ),
-                      ],
-                    );
-                  }
-              );
-            });
-          },
-        )),
-      ),
-      floatingActionButton: const SizedBox(
+                        child1: displayInt(analyzer.minSys),
+                        caption2: Text(
+                          AppLocalizations.of(context)!.minOf(AppLocalizations.of(context)!.diaLong),
+                          style: TextStyle(color: settings.diaColor, fontWeight: FontWeight.w700),
+                        ),
+                        child2: displayInt(analyzer.minDia),
+                        caption3: Text(
+                          AppLocalizations.of(context)!.minOf(AppLocalizations.of(context)!.pulLong),
+                          style: TextStyle(color: settings.pulColor, fontWeight: FontWeight.w700),
+                        ),
+                        child3: displayInt(analyzer.minPul),
+                      ),
+                      StatisticsRow(
+                        caption2: Text(
+                          AppLocalizations.of(context)!.maxOf(AppLocalizations.of(context)!.diaLong),
+                          style: TextStyle(color: settings.diaColor, fontWeight: FontWeight.w700),
+                        ),
+                        child2: displayInt(analyzer.maxDia),
+                        caption1: Text(
+                          AppLocalizations.of(context)!.maxOf(AppLocalizations.of(context)!.sysLong),
+                          style: TextStyle(color: settings.sysColor, fontWeight: FontWeight.w700),
+                        ),
+                        child1: displayInt(analyzer.maxSys),
+                        caption3: Text(
+                          AppLocalizations.of(context)!.maxOf(AppLocalizations.of(context)!.pulLong),
+                          style: TextStyle(color: settings.pulColor, fontWeight: FontWeight.w700),
+                        ),
+                        child3: displayInt(analyzer.maxPul),
+                      ),
+                      // Time-Resolved Metrics
+                      Statistic(
+                        caption: Text(AppLocalizations.of(context)!.timeResolvedMetrics),
+                        child: (() {
+                          final data = analyzer.allAvgsRelativeToDaytime;
+                          const opacity = 0.5;
+                          return SizedBox(
+                            width: 500,
+                            height: 500,
+                            child: RadarChart(
+                              RadarChartData(
+                                radarShape: RadarShape.circle,
+                                radarBorderData: const BorderSide(color: Colors.transparent),
+                                gridBorderData: BorderSide(color: Theme.of(context).dividerColor, width: 2),
+                                tickBorderData: BorderSide(color: Theme.of(context).dividerColor, width: 2),
+                                ticksTextStyle: const TextStyle(color: Colors.transparent),
+                                tickCount: 5,
+                                titleTextStyle: const TextStyle(fontSize: 25),
+                                getTitle: (pos, value) {
+                                  if (pos % 2 == 0) {
+                                    return RadarChartTitle(text: '$pos', positionPercentageOffset: 0.05);
+                                  }
+                                  return const RadarChartTitle(text: '');
+                                },
+                                dataSets: [
+                                  RadarDataSet(
+                                      dataEntries: intListToRadarEntry(data[0]),
+                                      borderColor: settings.diaColor,
+                                      fillColor: settings.diaColor.withOpacity(opacity),
+                                      entryRadius: 0,
+                                      borderWidth: settings.graphLineThickness),
+                                  RadarDataSet(
+                                      dataEntries: intListToRadarEntry(data[1]),
+                                      borderColor: settings.sysColor,
+                                      fillColor: settings.sysColor.withOpacity(opacity),
+                                      entryRadius: 0,
+                                      borderWidth: settings.graphLineThickness),
+                                  RadarDataSet(
+                                      dataEntries: intListToRadarEntry(data[2]),
+                                      borderColor: settings.pulColor,
+                                      fillColor: settings.pulColor.withOpacity(opacity),
+                                      entryRadius: 0,
+                                      borderWidth: settings.graphLineThickness),
+                                ],
+                              ),
+                            ),
+                          );
+                        })(),
+                      ),
+                    ],
+                  );
+                }
+            );
+          });
+        },
+      )),
+      bottomNavigationBar: Container(
         height: 70,
-        child: Center(child: IntervalPicker()),
-      ),
+        margin: const EdgeInsets.only(top: 15, bottom: 5),
+        child: const IntervalPicker(),
+      )
     );
   }