Commit af7caaf
Changed files (5)
app
lib
components
dialoges
model
blood_pressure
medicine
screens
subsettings
health_data_store
app/lib/components/dialoges/add_medication_dialoge.dart
@@ -1,10 +1,10 @@
import 'package:blood_pressure_app/components/dialoges/fullscreen_dialoge.dart';
import 'package:blood_pressure_app/components/settings/color_picker_list_tile.dart';
-import 'package:blood_pressure_app/model/blood_pressure/medicine/medicine.dart';
import 'package:blood_pressure_app/model/storage/settings_store.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:health_data_store/health_data_store.dart';
/// Dialoge to enter values for a [Medicine].
class AddMedicationDialoge extends StatefulWidget {
@@ -43,10 +43,9 @@ class _AddMedicationDialogeState extends State<AddMedicationDialoge> {
onActionButtonPressed: () {
formKey.currentState?.save();
Navigator.pop(context, Medicine(
- widget.settings.highestMedIndex,
designation: _designation ?? '',
- color: _color,
- defaultDosis: _defaultDosis,
+ color: _color.value,
+ dosis: _defaultDosis == null ? null : Weight.mg(_defaultDosis!),
),);
},
bottomAppBar: widget.settings.bottomAppBars,
app/lib/model/blood_pressure/medicine/medicine.dart
@@ -5,6 +5,7 @@ import 'package:blood_pressure_app/model/blood_pressure/medicine/medicine_intake
import 'package:flutter/material.dart';
/// Description of a specific medicine.
+@deprecated
class Medicine {
/// Create a instance from a map created by [toMap].
factory Medicine.fromMap(Map<String, dynamic> map) => Medicine(
app/lib/screens/subsettings/medicine_manager_screen.dart
@@ -1,17 +1,33 @@
import 'package:blood_pressure_app/components/dialoges/add_medication_dialoge.dart';
import 'package:blood_pressure_app/model/storage/settings_store.dart';
import 'package:flutter/material.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:health_data_store/health_data_store.dart';
import 'package:provider/provider.dart';
/// Screen to view and edit medications saved in [Settings].
///
/// This screen allows adding and removing medication but not modifying them in
/// order to keep the code simple and maintainable.
-class MedicineManagerScreen extends StatelessWidget {
+class MedicineManagerScreen extends StatefulWidget {
/// Create a screen to manage medications in settings.
const MedicineManagerScreen({super.key});
+ @override
+ State<MedicineManagerScreen> createState() => _MedicineManagerScreenState();
+}
+
+class _MedicineManagerScreenState extends State<MedicineManagerScreen> {
+ List<Medicine> medicines = [];
+
+ @override
+ void initState() {
+ super.initState();
+ RepositoryProvider.of<MedicineRepository>(context).getAll()
+ .then((value) => setState(() => medicines.addAll(value)));
+ }
+
@override
Widget build(BuildContext context) {
final localizations = AppLocalizations.of(context)!;
@@ -19,49 +35,58 @@ class MedicineManagerScreen extends StatelessWidget {
appBar: AppBar(
forceMaterialTransparency: true,
),
- body: Center(child: Consumer<Settings>(
- builder: (context, settings, child) {
- final medications = settings.medications.where((e) => !e.hidden)
- .toList();
- return ListView.builder(
- itemCount: medications.length + 1,
- itemBuilder: (context, i) {
- if (i == medications.length) { // last row
- return ListTile(
- leading: const Icon(Icons.add),
- title: Text(localizations.addMedication),
- onTap: () async {
- final medicine = await showAddMedicineDialoge(context,
- settings,);
- if (medicine != null) settings.addMedication(medicine);
- },
- );
+ body: Center(
+ child: ListView.builder(
+ itemCount: medicines.length + 1,
+ itemBuilder: (context, i) {
+ if (i == medicines.length) { // last row
+ return ListTile(
+ leading: const Icon(Icons.add),
+ title: Text(localizations.addMedication),
+ onTap: () async {
+ final medRepo = RepositoryProvider.of<MedicineRepository>(context);
+ final settings = Provider.of<Settings>(context, listen: false);
+ final medicine = await showAddMedicineDialoge(context, settings,);
+ if (medicine != null) {
+ setState(() {
+ medicines.add(medicine);
+ medRepo.add(medicine);
+ });
}
- return ListTile(
- leading: medications[i].color == Colors.transparent ? null
- : Container(
- width: 40.0,
- height: 40.0,
- decoration: BoxDecoration(
- color: medications[i].color,
- shape: BoxShape.circle,
- ),
- ),
- title: Text(medications[i].designation),
- subtitle: Text('${localizations.defaultDosis}: '
- '${medications[i].defaultDosis}'),
- trailing: IconButton(
- icon: const Icon(Icons.delete),
- onPressed: () {
- settings.removeMedicationAt(i);
- },
- ),
- );
},
+ );
+ }
+ return ListTile(
+ leading: medicines[i].color == Colors.transparent.value
+ || medicines[i].color == null
+ ? null
+ : Container(
+ width: 40.0,
+ height: 40.0,
+ decoration: BoxDecoration(
+ color: Color(medicines[i].color!),
+ shape: BoxShape.circle,
+ ),
+ ),
+ title: Text(medicines[i].designation),
+ // TODO: make localization function
+ subtitle: medicines[i].dosis == null ? null
+ : Text('${localizations.defaultDosis}: '
+ '${medicines[i].dosis!.mg} mg'),
+ trailing: IconButton(
+ icon: const Icon(Icons.delete),
+ onPressed: () {
+ setState(() async {
+ await RepositoryProvider.of<MedicineRepository>(context)
+ .remove(medicines[i]);
+ medicines.removeAt(i);
+ });
+ },
+ ),
);
- },),
+ },
+ ),
),
);
}
-
-}
\ No newline at end of file
+}
app/lib/main.dart
@@ -110,9 +110,9 @@ Future<Widget> _loadApp() async {
],
child: MultiRepositoryProvider(
providers: [
- RepositoryProvider<BloodPressureRepository>(create: (_) => db.bpRepo),
- RepositoryProvider<MedicineRepository>(create: (_) => db.medRepo),
- RepositoryProvider<MedicineIntakeRepository>(create:(_) => db.intakeRepo),
+ RepositoryProvider(create: (context) => db.bpRepo),
+ RepositoryProvider(create: (context) => db.medRepo),
+ RepositoryProvider(create: (context) => db.intakeRepo),
],
child: const AppRoot(),
),);
health_data_store/lib/health_data_store.dart
@@ -36,3 +36,5 @@ export 'src/types/date_range.dart';
export 'src/types/medicine.dart';
export 'src/types/medicine_intake.dart';
export 'src/types/note.dart';
+export 'src/types/units/pressure.dart';
+export 'src/types/units/weight.dart';