【发布时间】:2021-12-02 06:23:32
【问题描述】:
所以当使用flutter的provider时,主要的问题是,如果想要指定provider,它的后代需要它的值和它的好,直到你不使用导航,如果我们使用导航,那么我们必须使用builder来提供新的上下文所以对于大多数人来说,在小部件层次结构中的材料应用程序之前提供所有提供程序,但是问题在于,假设我想加载一个将在第二个屏幕上加载的数据,所以我想把什么放在初始模型类中,因为我不认为提供空值是一个好方法。
所以我的问题是在不使用 null 或默认空值的情况下延迟加载数据的最佳方法是什么。
有关我的问题的一些上下文,请参见下面的代码。
class App extends StatelessWidget {
const App({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
const title = 'GPA Calculator';
return MultiProvider(
providers: [
ChangeNotifierProvider(create: (context) => StudentManager()),
ChangeNotifierProvider(create: (context) => StudentCourseManager()),
],
child: MaterialApp(
title: title,
home: const HomeScreen(title: title),
),
);
}
}
class StudentManager extends ChangeNotifier {
List<Student> _list = [];
List<Student> get list => _list;
void add(Student student) {
_list.add(student);
notifyListeners();
}
void remove(int index) {
_list.removeAt(index);
notifyListeners();
}
void update(
int index,
Student student,
) {
_list[index] = student;
notifyListeners();
}
}
class StudentCourseManager extends ChangeNotifier {
late int studentIndex;
late StudentManager studentManager;
StudentCourseManager({
required this.studentIndex,
required this.studentManager,
});
Student? get student => studentManager.list[studentIndex];
List<StudentCourse> get list => student != null ? student!.courseList : [];
void add(StudentCourse studentCourse) {
student!.addCourse(studentCourse);
studentManager.update(studentIndex, student!);
notifyListeners();
}
void delete(int index) {
student!.deleteCourse(index);
studentManager.update(studentIndex, student!);
notifyListeners();
}
void update(
int index,
StudentCourse studentCourse,
) {
student!.updateCourse(index, studentCourse);
studentManager.update(studentIndex, student!);
notifyListeners();
}
}
【问题讨论】:
-
您是否已经尝试过 ChangeNotifierProxyProvider?
-
谢谢你,我不知道它解决了我的问题
标签: flutter dart flutter-provider