当我想在Flutter Bloc中调用Hive功能时,我有错误
当我想在Flutter Bloc中调用Hive功能时,我会出错。我有盒子作为flutter Bloc的服务,但我会发现这个错误
[ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: LateInitializationError: Field '_course@823127803' has not been initialized.
#0 CourseService._course (package:personal_ui/services/courses_service.dart)
#1 CourseService.getCourses package:personal_ui/services/courses_service.dart:13
#2 new CoursesBloc.<anonymous closure>
courses.dart
@HiveType(typeId: 1)
class Course extends HiveObject {
@HiveField(0)
final String courseName;
@HiveField(1)
final String color;
@HiveField(2)
final List<Map<dynamic, dynamic>> shedule;
Course(this.courseName, this.shedule, this.color);
}
courses_service.dart
class CourseService {
late Box<Course> _course;
Future<void> init() async {
Hive.registerAdapter(CourseAdapter());
_course = await Hive.openBox<Course>('course');
}
List<Course> getCourses() {
return _course.values.toList();
}
void addCourse(Course course) {
_course.add(course);
}
Future<void> removeCourse(Course course) async {
final courseToRemove = _course.values
.firstWhere((element) => element.courseName == course.courseName);
await courseToRemove.delete();
}
}
courses_bloc。 dart
class CoursesBloc extends Bloc<CoursesEvent, CoursesState> {
final CourseService _courseService;
CoursesBloc(this._courseService) : super(CoursesInitial()) {
on<LoadCoursesEvent>(((event, emit) {
final courses = _courseService.getCourses();
emit(CoursesLoadedState(courses));
}));
}
courses_state.dart
abstract class CoursesState extends Equatable {
const CoursesState();
}
class CoursesInitial extends CoursesState {
@override
List<Object> get props => [];
}
class CoursesLoadedState extends CoursesState {
final List<Course> courses;
CoursesLoadedState(this.courses);
@override
// TODO: implement props
List<Object?> get props => throw UnimplementedError();
}
courses_event.dart
abstract class CoursesState extends Equatable {
const CoursesState();
}
class CoursesInitial extends CoursesState {
@override
List<Object> get props => [];
}
class CoursesLoadedState extends CoursesState {
final List<Course> courses;
CoursesLoadedState(this.courses);
@override
// TODO: implement props
List<Object?> get props => throw UnimplementedError();
}
实施
BlocProvider(
create: (context) =>
CoursesBloc(RepositoryProvider.of<CourseService>(context))
..add(LoadCoursesEvent()),
child: BlocBuilder<CoursesBloc, CoursesState>(
builder: (context, state) {
if (state is CoursesInitial) {
return const Center(
child: CircularProgressIndicator(),
);
}
if (state is CoursesLoadedState) {
return ListView(
shrinkWrap: true,
children: state.courses
.map((e) => CourseItem(
color: Colors.amber, courseName: e.courseName))
.toList(),
);
}
return Container();
},
),
我需要在启动应用程序并根据ListView中的内容显示该功能的函数获取课程,据说它不是初始化的,但我找不到错误。
I have an error when I want to call a Hive function in Flutter Bloc. I have my box as a service in flutter bloc but I get this error
[ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: LateInitializationError: Field '_course@823127803' has not been initialized.
#0 CourseService._course (package:personal_ui/services/courses_service.dart)
#1 CourseService.getCourses package:personal_ui/services/courses_service.dart:13
#2 new CoursesBloc.<anonymous closure>
courses.dart
@HiveType(typeId: 1)
class Course extends HiveObject {
@HiveField(0)
final String courseName;
@HiveField(1)
final String color;
@HiveField(2)
final List<Map<dynamic, dynamic>> shedule;
Course(this.courseName, this.shedule, this.color);
}
courses_service.dart
class CourseService {
late Box<Course> _course;
Future<void> init() async {
Hive.registerAdapter(CourseAdapter());
_course = await Hive.openBox<Course>('course');
}
List<Course> getCourses() {
return _course.values.toList();
}
void addCourse(Course course) {
_course.add(course);
}
Future<void> removeCourse(Course course) async {
final courseToRemove = _course.values
.firstWhere((element) => element.courseName == course.courseName);
await courseToRemove.delete();
}
}
courses_bloc.dart
class CoursesBloc extends Bloc<CoursesEvent, CoursesState> {
final CourseService _courseService;
CoursesBloc(this._courseService) : super(CoursesInitial()) {
on<LoadCoursesEvent>(((event, emit) {
final courses = _courseService.getCourses();
emit(CoursesLoadedState(courses));
}));
}
courses_state.dart
abstract class CoursesState extends Equatable {
const CoursesState();
}
class CoursesInitial extends CoursesState {
@override
List<Object> get props => [];
}
class CoursesLoadedState extends CoursesState {
final List<Course> courses;
CoursesLoadedState(this.courses);
@override
// TODO: implement props
List<Object?> get props => throw UnimplementedError();
}
courses_event.dart
abstract class CoursesState extends Equatable {
const CoursesState();
}
class CoursesInitial extends CoursesState {
@override
List<Object> get props => [];
}
class CoursesLoadedState extends CoursesState {
final List<Course> courses;
CoursesLoadedState(this.courses);
@override
// TODO: implement props
List<Object?> get props => throw UnimplementedError();
}
implementation
BlocProvider(
create: (context) =>
CoursesBloc(RepositoryProvider.of<CourseService>(context))
..add(LoadCoursesEvent()),
child: BlocBuilder<CoursesBloc, CoursesState>(
builder: (context, state) {
if (state is CoursesInitial) {
return const Center(
child: CircularProgressIndicator(),
);
}
if (state is CoursesLoadedState) {
return ListView(
shrinkWrap: true,
children: state.courses
.map((e) => CourseItem(
color: Colors.amber, courseName: e.courseName))
.toList(),
);
}
return Container();
},
),
I need to call the function get courses when I start the application and show it according to the content in the listview, supposedly it is not initialized but I can't find the error.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论