import 'package:refilc/api/providers/user_provider.dart'; import 'package:refilc/api/providers/database_provider.dart'; import 'package:refilc/models/self_note.dart'; import 'package:refilc/models/user.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class SelfNoteProvider with ChangeNotifier { late List<SelfNote> _notes; late List<TodoItem> _todoItems; late BuildContext _context; List<SelfNote> get notes => _notes; List<TodoItem> get todos => _todoItems; SelfNoteProvider({ List<SelfNote> initialNotes = const [], List<TodoItem> initialTodoItems = const [], required BuildContext context, }) { _notes = List.castFrom(initialNotes); _todoItems = List.castFrom(initialTodoItems); _context = context; if (_notes.isEmpty) restore(); if (_todoItems.isEmpty) restoreTodo(); } // restore self notes from db Future<void> restore() async { String? userId = Provider.of<UserProvider>(_context, listen: false).id; // await Provider.of<DatabaseProvider>(_context, listen: false) // .userStore // .storeSelfNotes([], userId: userId!); // load self notes from db if (userId != null) { var dbNotes = await Provider.of<DatabaseProvider>(_context, listen: false) .userQuery .getSelfNotes(userId: userId); _notes = dbNotes; notifyListeners(); } } // restore todo items from db Future<void> restoreTodo() async { String? userId = Provider.of<UserProvider>(_context, listen: false).id; // await Provider.of<DatabaseProvider>(_context, listen: false) // .userStore // .storeSelfNotes([], userId: userId!); // load self notes from db if (userId != null) { var dbTodo = await Provider.of<DatabaseProvider>(_context, listen: false) .userQuery .getTodoItems(userId: userId); _todoItems = dbTodo; notifyListeners(); } } // fetches fresh data from api (not needed, cuz no api for that) // Future<void> fetch() async { // } // store self notes in db Future<void> store(List<SelfNote> notes) async { User? user = Provider.of<UserProvider>(_context, listen: false).user; if (user == null) throw "Cannot store Self Notes for User null"; String userId = user.id; await Provider.of<DatabaseProvider>(_context, listen: false) .userStore .storeSelfNotes(notes, userId: userId); _notes = notes; notifyListeners(); } // store todo items in db Future<void> storeTodo(List<TodoItem> todos) async { User? user = Provider.of<UserProvider>(_context, listen: false).user; if (user == null) throw "Cannot store Self Notes for User null"; String userId = user.id; await Provider.of<DatabaseProvider>(_context, listen: false) .userStore .storeSelfTodoItems(todos, userId: userId); _todoItems = todos; notifyListeners(); } }