Can someone explain why I can't read data from my sqlite?(The Mapping bit isn't working I thin

40 views Asked by At

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.

0

There are 0 answers