我在flutter中运行了一个项目,在第一种情况下在分析器中显示,在第二种情况下在模拟器中显示延迟初始化错误,我不知道如何解决这个问题。
首例
List<Student>? studentsList
它在分析仪中出错了。
第二起案件
late List<Student> studentsList
它运行并且在分析器中没有出错,但是在模拟器中出现了一个红色屏幕,并且显示延迟初始化错误。如何初始化它?
nfzehxib1#
在使用对象之前必须初始化它。方式一:
List<Student> studentList = [];
在这种情况下,你用空列表初始化你的studentList对象,你可以重新初始化它,因为它不是最终的。方式二:如果你想让你的列表成为最终的,这样你就不能重新初始化它了,那么就像这样做。
studentList
final List<Student> studentList = [];
在这种情况下,您可以执行添加、删除和其他列表功能,而不会出现任何问题,但您不能再次重新初始化它。我可以说你不需要late关键字来定义你的学生名单了。毕竟如果你真的想这样使用late关键字
late
late List<Student> studentList;
然后确保你已经初始化了你的列表,就像下面一样,并且记住一件事,你不能重新初始化studentList,一旦你初始化了它,否则你会得到late init错误。
studentList = []; // or studentList = otherList;
jyztefdp2#
为了更好地理解,让我简单地解释一下。
第一例
你说编译器studentsList可能是null,所以你可以像这样访问它。
studentsList
null
if (studentsList != null) { // do something with studentsList }
或使用null aware?运算符。
null aware
?
studentsList?.add(Student());
第二个案例
late List<Student> studentsList;
你说的是编译器,我会确保在使用studentsList之前初始化它,所以如果你不遵守承诺,compiler将抛出LaterInitializationError。您可以通过在使用前进行初始化来克服这个问题,例如:
compiler
LaterInitializationError
late List<Student> studentsList = [];
或者你可以在initState的某个地方初始化。
initState
rqenqsqc3#
你可以给予它一个空列表初始值:
List<Student>? studentsList = [];
你应该看看 dart 的基础知识https://dart.dev/tutorials
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. }
4条答案
按热度按时间nfzehxib1#
在使用对象之前必须初始化它。
方式一:
在这种情况下,你用空列表初始化你的
studentList
对象,你可以重新初始化它,因为它不是最终的。方式二:
如果你想让你的列表成为最终的,这样你就不能重新初始化它了,那么就像这样做。
在这种情况下,您可以执行添加、删除和其他列表功能,而不会出现任何问题,但您不能再次重新初始化它。
我可以说你不需要
late
关键字来定义你的学生名单了。毕竟如果你真的想这样使用
late
关键字然后确保你已经初始化了你的列表,就像下面一样,并且记住一件事,你不能重新初始化
studentList
,一旦你初始化了它,否则你会得到late init错误。jyztefdp2#
为了更好地理解,让我简单地解释一下。
第一例
你说编译器
studentsList
可能是null
,所以你可以像这样访问它。或使用
null aware
?
运算符。第二个案例
你说的是编译器,我会确保在使用
studentsList
之前初始化它,所以如果你不遵守承诺,compiler
将抛出LaterInitializationError
。您可以通过在使用前进行初始化来克服这个问题,例如:
或者你可以在
initState
的某个地方初始化。rqenqsqc3#
你可以给予它一个空列表初始值:
你应该看看 dart 的基础知识
https://dart.dev/tutorials
tcomlyy64#
late
关键字用于当你想推迟变量示例化时,我认为一个好方法是创建一个初始化方法,并在第一次使用之前调用它,如下所示: