I can print the data. But for some reason it is not being mapped to my list. Due to which my database is being filled but I can't display it in my app. Here's my provider file for loading, reading data. All print statements before the map statement works, the following don't for some reason.
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:path/path.dart' as path;
import 'package:re_mind/object_classes/reminder.dart';
import 'package:riverpod/riverpod.dart';
import 'package:sqflite/sqflite.dart' as sql;
import 'package:sqflite/sqlite_api.dart';
class ReminderNotifier extends StateNotifier<List<Reminder>> {
ReminderNotifier() : super(const []);
Future<Database> _getDatabase() async {
final dbPath = await sql.getDatabasesPath();
final db = await sql.openDatabase(
path.join(
dbPath,
'reminder.db',
),
onCreate: (db, version) async {
return await db.execute(
'CREATE TABLE userReminders(day TEXT, targetTime TEXT, activity TEXT)',
);
},
version: 1,
);
print(db);
return db;
}
// Activity enumFromString(String value) {
// return Activity.values.firstWhere(
// (e) => e.toString().split('.').last == value,
// );
// }
// TimeOfDay stringToTimeOfDay(String tod) {
// final format = DateFormat.jm(); //"6:00 AM"
// return TimeOfDay.fromDateTime(format.parse(tod));
// }
Future<void> loadReminders() async {
final db = await _getDatabase();
final data = await db.rawQuery('SELECT * FROM userReminders');
print(data);
List<Reminder> reminders = [];
reminders = data
.map(
(e) => Reminder(
day: e['day'] as Day,
targetTime: e['targetTime'] as TimeOfDay,
// stringToTimeOfDay(e['targetTime'] as String),
activity: e['activity'] as Activity,
),
)
.toList();
print(data.isEmpty);
state = reminders;
}
Future closeDB() async {
final db = await _getDatabase();
db.close();
}
void addReminder(Day day, TimeOfDay time, Activity activity) async {
// final appDir = await syspath.getApplicationCacheDirectory();
final db = await _getDatabase();
final newReminder =
Reminder(day: day, targetTime: time, activity: activity);
try {
await db.rawInsert(
'INSERT INTO userReminders(day , targetTime, activity) VALUES("${day.toString()}", "${time.toString()}", "${activity.toString()}")');
state = [
newReminder,
...state,
];
} catch (e) {
// ignore: avoid_print
print('Error inserting reminder: $e');
}
}
}
final reminderProvider =
StateNotifierProvider<ReminderNotifier, List<Reminder>>(
(ref) => ReminderNotifier());
Here's my Reminder Object File:
import 'package:flutter/material.dart';
enum Activity {
wakeUp,
gym,
breakfast,
meeting,
lunch,
quickNap,
library,
sleep,
}
enum Day {
monday,
tuesday,
wednesday,
thursday,
friday,
saturday,
sunday,
}
class Reminder {
const Reminder({
required this.day,
required this.targetTime,
required this.activity,
});
final Day day;
final TimeOfDay targetTime;
final Activity activity;
}
I tried to store the database locally to retrieve it and save reminders. The database is being stored, but not read correctly. There's no reading.