Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 26 additions & 26 deletions app/lib/db/cabinetdb.dart
Original file line number Diff line number Diff line change
@@ -1,37 +1,13 @@
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import 'package:app/models/cabinet.dart';
import 'package:app/models/cabinet_model.dart';

class DatabaseHelper {
static final DatabaseHelper instance = DatabaseHelper._init();
static Database? _database;

DatabaseHelper._init();

Future<int> update(Cabinet cabinet) async {
final db = await instance.database;
return db.update(
'cabinet',
cabinet.toMap(),
where: 'id = ?',
whereArgs: [cabinet.id],
);
}

Future<Cabinet?> readMedicine(int id) async {
final db = await instance.database;
final maps = await db.query(
'cabinet',
where: 'id = ?',
whereArgs: [id],
);

if (maps.isNotEmpty) {
return Cabinet.fromMap(maps.first);
}
return null;
}

Future<Database> get database async {
if (_database != null) return _database!;
_database = await _initDB('dose.db');
Expand Down Expand Up @@ -69,14 +45,38 @@ CREATE TABLE cabinet (
return await db.insert('cabinet', cabinet.toMap());
}

Future<Cabinet?> readMedicine(int id) async {
final db = await instance.database;
final maps = await db.query(
'cabinet',
where: 'id = ?',
whereArgs: [id],
);

if (maps.isNotEmpty) {
return Cabinet.fromMap(maps.first);
}
return null;
}

Future<List<Cabinet>> readAllMedicines() async {
final db = await instance.database;
const orderBy = 'time ASC';
final result = await db.query('cabinet', orderBy: orderBy);
return result.map((json) => Cabinet.fromMap(json)).toList();
}

Future<int> delete(int id) async {
Future<int> updateMedicine(Cabinet medicine) async {
final db = await instance.database;
return await db.update(
'cabinet',
medicine.toMap(),
where: 'id = ?',
whereArgs: [medicine.id],
);
}

Future<int> deleteMedicine(int id) async {
final db = await instance.database;
return await db.delete(
'cabinet',
Expand Down
2 changes: 1 addition & 1 deletion app/lib/db/profiledb.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import 'package:app/models/profile.dart';
import 'package:app/models/profile_model.dart';

class DatabaseHelper {
static final DatabaseHelper instance = DatabaseHelper._init();
Expand Down
54 changes: 45 additions & 9 deletions app/lib/home/add_menu.dart
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import 'package:flutter/material.dart';
import 'package:app/models/cabinet.dart';
import 'package:app/models/cabinet_model.dart';
import 'package:app/db/cabinetdb.dart';
import 'package:app/services/notification_service.dart';
import 'package:app/services/alarm_service.dart';

class AddMedicineMenu extends StatefulWidget {
final VoidCallback onSave;
final Cabinet? medicineToEdit;

const AddMedicineMenu({super.key, required this.onSave});
const AddMedicineMenu({super.key, required this.onSave, this.medicineToEdit});

@override
State<AddMedicineMenu> createState() => _AddMedicineMenuState();
Expand All @@ -26,6 +27,33 @@ class _AddMedicineMenuState extends State<AddMedicineMenu> {
int _cycle = 1;
int _priority = 1;

@override
void initState() {
super.initState();
if (widget.medicineToEdit != null) {
final med = widget.medicineToEdit!;
_nameController.text = med.name;
_dosageController.text = med.dosage.replaceAll(' mg', '');
_stockController.text = med.currstock.toString();
_priority = med.priority;

final parts = med.time.split(':');
if (parts.length == 2) {
_selectedTime = TimeOfDay(hour: int.parse(parts[0]), minute: int.parse(parts[1]));
}
}
}

@override
void dispose() {
_nameController.dispose();
_dosageController.dispose();
_conditionController.dispose();
_doctorController.dispose();
_stockController.dispose();
super.dispose();
}

Future<void> _selectTime(BuildContext context) async {
final TimeOfDay? picked = await showTimePicker(
context: context,
Expand All @@ -43,19 +71,28 @@ class _AddMedicineMenuState extends State<AddMedicineMenu> {
final String timeString = "${_selectedTime.hour}:${_selectedTime.minute.toString().padLeft(2, '0')}";

final medicine = Cabinet(
id: widget.medicineToEdit?.id,
name: _nameController.text,
dosage: "${_dosageController.text} mg",
time: timeString,
currstock: int.tryParse(_stockController.text) ?? 0,
initstock: int.tryParse(_stockController.text) ?? 0,
initstock: widget.medicineToEdit != null
? widget.medicineToEdit!.initstock
: (int.tryParse(_stockController.text) ?? 0),
priority: _priority,
);

int newId = await DatabaseHelper.instance.create(medicine);
int savedId;
if (widget.medicineToEdit == null) {
savedId = await DatabaseHelper.instance.create(medicine);
} else {
await DatabaseHelper.instance.updateMedicine(medicine);
savedId = medicine.id!;
}

await AlarmService().scheduleMedicineAlarm(newId, medicine);
await AlarmService().scheduleMedicineAlarm(savedId, medicine);
await NotificationHelper().scheduleMedicineNotification(
newId,
savedId,
medicine.name,
timeString
);
Expand All @@ -65,7 +102,6 @@ class _AddMedicineMenuState extends State<AddMedicineMenu> {
if (mounted) {
Navigator.pop(context);
}

}
}

Expand All @@ -76,7 +112,7 @@ class _AddMedicineMenuState extends State<AddMedicineMenu> {
return Scaffold(
backgroundColor: colorScheme.surface,
appBar: AppBar(
title: const Text("Add Reminder"),
title: Text(widget.medicineToEdit == null ? "Add Reminder" : "Edit Reminder"),
leading: IconButton(
icon: const Icon(Icons.close),
onPressed: () => Navigator.pop(context),
Expand Down Expand Up @@ -207,7 +243,7 @@ class _AddMedicineMenuState extends State<AddMedicineMenu> {
style: FilledButton.styleFrom(
padding: const EdgeInsets.symmetric(vertical: 16),
),
child: const Text("Save Reminder"),
child: Text(widget.medicineToEdit == null ? "Save Reminder" : "Update Reminder"),
),
const SizedBox(height: 40),
],
Expand Down
51 changes: 39 additions & 12 deletions app/lib/home/home.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import 'package:app/models/cabinet.dart';
import 'package:app/models/cabinet_model.dart';
import 'package:flutter/material.dart';
import 'package:app/db/cabinetdb.dart';
import 'package:app/services/notification_service.dart';
import 'package:app/services/alarm_service.dart';
import 'package:app/profile/cabinet/cabinet.dart';
import 'package:app/profile/about.dart';

class HomePage extends StatefulWidget {
Expand Down Expand Up @@ -46,7 +47,7 @@ class _HomePageState extends State<HomePage> {
);

if (result == 'delete') {
await DatabaseHelper.instance.delete(id);
await DatabaseHelper.instance.deleteMedicine(id);
await NotificationHelper().cancelNotification(id);
await AlarmService().cancelAlarm(id);
setState(() {
Expand All @@ -60,16 +61,42 @@ class _HomePageState extends State<HomePage> {
final colorScheme = Theme.of(context).colorScheme;
return Column(
children: [
ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const AboutPage(),
),
);
},
child: const Text('Test'),
Row(
children: [
ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const CabinetPage(),
),
);
},
child: const Text('Cabinet'),
),
ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const AboutPage(),
),
);
},
child: const Text('About'),
),
ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const CabinetPage(),
),
);
},
child: const Text('Settings'),
),
],
),
Expanded(
child: FutureBuilder<List<Cabinet>>(
Expand Down
6 changes: 6 additions & 0 deletions app/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,16 @@ class MyApp extends StatelessWidget {
theme: ThemeData(
colorScheme: lightDynamic ?? _defaultLightColorScheme,
useMaterial3: true,
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
splashFactory: NoSplash.splashFactory,
),
darkTheme: ThemeData(
colorScheme: darkDynamic ?? _defaultDarkColorScheme,
useMaterial3: true,
splashColor: Colors.transparent,
highlightColor: Colors.transparent,
splashFactory: NoSplash.splashFactory,
),
themeMode: ThemeMode.system,
home: const Dose(),
Expand Down
File renamed without changes.
File renamed without changes.
Loading