Exception has occurred. HiveError (HiveError: The box "academictasks" is already open and of type Box<AcademicTask>.)

im using riverpod so im managing state like this

import 'package:flutter/material.dart';
import 'package:hive/hive.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:to_do/tasks/tasks.dart';
import 'package:to_do/utils.dart';

final personalTaskProvider = ChangeNotifierProvider((ref) => PersonalTasks());
final academicTaskProvider = ChangeNotifierProvider((ref) => AcademicTasks());

class PersonalTasks extends ChangeNotifier {

  PersonalTasks() {
    loadTasks();
  }

  List<PersonalTask> personalTasks = [];

  void loadTasks() {
    Box box = Hive.box<PersonalTask>(personalTaskBoxString);
    personalTasks = List<PersonalTask>.from(box.values);
    notifyListeners();
  }

  Future<void> addTask(PersonalTask task) async {
    Box box = Hive.box<PersonalTask>(personalTaskBoxString);
    await box.add(task);
    personalTasks.add(task);
    notifyListeners();
  }

  Future<void> deleteTask(int index) async {
    Box box = Hive.box<PersonalTask>(personalTaskBoxString);
    await box.deleteAt(index);
    personalTasks.removeAt(index);
    notifyListeners();
  }
}

class AcademicTasks extends ChangeNotifier {

  AcademicTasks() {
    loadTasks();
  }

  List<AcademicTask> academicTasks = [];

  void loadTasks() {
    Box box = Hive.box(academicTaskBoxString);
    academicTasks = List<AcademicTask>.from(box.values);
    notifyListeners();
  }

  Future<void> addTask(AcademicTask task) async {
    Box box = Hive.box<AcademicTask>(academicTaskBoxString);
    await box.add(task);
    academicTasks.add(task);
    notifyListeners();
  }

  Future<void> deleteTask(int index) async {
    Box box = Hive.box<AcademicTask>(academicTaskBoxString);
    await box.deleteAt(index);
    academicTasks.removeAt(index);
    notifyListeners();
  }
}

This is the HomePage of my app

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:to_do/pages/homepage/bothepersonalandacademictask.dart';
import 'package:to_do/pages/homepage/homepageappbar.dart';
import 'package:to_do/pages/homepage/onlyacademictasks.dart';
import 'package:to_do/pages/homepage/onlypersonaltasks.dart';
import 'package:to_do/providers/taskprovider.dart';
import 'package:to_do/widgets/fab.dart';

class HomePage extends StatelessWidget {
  const HomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: const HomePageAppBar(),
      body: Consumer(
        builder: (context, ref, child) => _scaffoldBody(ref),
      ),
      floatingActionButton: const FAB(),
    );
  }

  Widget _scaffoldBody(WidgetRef ref) {
    final personalTasks = ref.watch(personalTaskProvider);
    final academicTasks = ref.watch(academicTaskProvider);

    if (personalTasks.personalTasks.isEmpty &&
        academicTasks.academicTasks.isEmpty) {
      return const Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              "Good News :)",
              style: TextStyle(fontSize: 40),
            ),
            Text(
              "No Pending Tasks",
              style: TextStyle(fontSize: 40),
            ),
          ],
        ),
      );
    } else if (personalTasks.personalTasks.isEmpty) {
      return OnlyAcademicTasks(academicTasks: academicTasks.academicTasks);
    } else if (academicTasks.academicTasks.isEmpty) {
      return OnlyPersonalTasks(personalTasks: personalTasks.personalTasks);
    } else {
      return BothPersonalAndAcademicTasks(
          academicTasks: academicTasks.academicTasks,
          personalTasks: personalTasks.personalTasks);
    }
  }
}

im getting Exception has occurred. HiveError (HiveError: The box "academictasks" is already open and of type Box.) this exception i dont know why by the way im new to hive i dont know how it works i dont know why im getting this error

i have tried removing constructors for provider classes i works but i the tasks arent storing i guess, i cant see my previous apps when i restart the app

im attaching the main.dart too

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:hive_flutter/adapters.dart';
import 'package:to_do/pages/homepage/homepage.dart';
import 'package:to_do/tasks/tasks.dart';
import 'package:to_do/utils.dart';

void main() async {
  await Hive.initFlutter();
  Hive.registerAdapter(AcademicTaskAdapter());
  Hive.registerAdapter(PersonalTaskAdapter());
  await Hive.openBox<PersonalTask>(personalTaskBoxString);
  await Hive.openBox<AcademicTask>(academicTaskBoxString);
  runApp(const ProviderScope(child: MyApp()));
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark(useMaterial3: true),
      debugShowCheckedModeBanner: false,
      home: const HomePage(),
    );
  }
}

Upvotes: 1

Views: 15

Answers (0)

Related Questions