如何初始化Flutter中的值?它说延迟初始化错误

0mkxixxg  于 2023-03-13  发布在  Flutter
关注(0)|答案(4)|浏览(254)

我在flutter中运行了一个项目,在第一种情况下在分析器中显示,在第二种情况下在模拟器中显示延迟初始化错误,我不知道如何解决这个问题。

首例

List<Student>? studentsList

它在分析仪中出错了。

第二起案件

late List<Student> studentsList

它运行并且在分析器中没有出错,但是在模拟器中出现了一个红色屏幕,并且显示延迟初始化错误。如何初始化它?

nfzehxib

nfzehxib1#

在使用对象之前必须初始化它。
方式一:

List<Student> studentList = [];

在这种情况下,你用空列表初始化你的studentList对象,你可以重新初始化它,因为它不是最终的。
方式二:
如果你想让你的列表成为最终的,这样你就不能重新初始化它了,那么就像这样做。

final List<Student> studentList = [];

在这种情况下,您可以执行添加、删除和其他列表功能,而不会出现任何问题,但您不能再次重新初始化它。
我可以说你不需要late关键字来定义你的学生名单了。
毕竟如果你真的想这样使用late关键字

late List<Student> studentList;

然后确保你已经初始化了你的列表,就像下面一样,并且记住一件事,你不能重新初始化studentList,一旦你初始化了它,否则你会得到late init错误。

studentList = []; // or studentList = otherList;
jyztefdp

jyztefdp2#

为了更好地理解,让我简单地解释一下。

第一例

List<Student>? studentsList

你说编译器studentsList可能是null,所以你可以像这样访问它。

if (studentsList != null) {
  // do something with studentsList
}

或使用null aware?运算符。

studentsList?.add(Student());

第二个案例

late List<Student> studentsList;

你说的是编译器,我会确保在使用studentsList之前初始化它,所以如果你不遵守承诺,compiler将抛出LaterInitializationError
您可以通过在使用前进行初始化来克服这个问题,例如:

late List<Student> studentsList = [];

或者你可以在initState的某个地方初始化。

rqenqsqc

rqenqsqc3#

你可以给予它一个空列表初始值:

List<Student>? studentsList = [];

你应该看看 dart 的基础知识
https://dart.dev/tutorials

tcomlyy6

tcomlyy64#

late关键字用于当你想推迟变量示例化时,我认为一个好方法是创建一个初始化方法,并在第一次使用之前调用它,如下所示:

late List<Student> studentsList;

// Initialize studentsList somewhere in your code, just before the first usage.
void initializeStudentsList() {
  studentsList = []; // Or fill it with desired data.
}

相关问题