I am trying to store data locally but it just doesn't store. It empties on each restart. Activity is an enum

26 Views Asked by At

When I try to print the state after adding it displays: [Instance of 'Reminder']

Following is the code to my provider:

import 'package:flutter/material.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 <Reminder>[]);

Future<Database> _getDatabase() async {

final dbPath = await sql.getDatabasesPath();

final db = await sql.openDatabase(

path.join(

dbPath,

'reminder.db',

),

onCreate: (db, version) {

return db.execute(

'CREATE TABLE userReminders(title TEXT, targetTime STRING, activity TEXT)',

);

},

version: 1,

);

return db;

}

Future<void> loadReminders() async {

final db = await _getDatabase();

final data = await db.query('userReminders');

final reminders = data

.map(

(row) => Reminder(

title: row['title'] as String,

targetTime: TimeOfDay.fromDateTime(

DateTime.parse(row['targetTime'].toString())),

activity: row['activity'].toString() as Activity,

),

)

.toList();

state = reminders;

print(state);

}

void addReminder(Reminder newReminder) async {

// final appDir = await syspath.getApplicationCacheDirectory();

final db = await _getDatabase();

try {

await db.insert('userReminders', {

'title': newReminder.title,

'targetTime': newReminder.targetTime.toString(),

'activity': newReminder.activity.toString(),

});

state = [

newReminder,

...state,

];

print(state);

} catch (e) {

print('Error inserting reminder: $e');

}

}

}

final reminderProvider =

StateNotifierProvider<ReminderNotifier, List<Reminder>>(

(ref) => ReminderNotifier());
0

There are 0 best solutions below