我有一个名为 splitVendorMainCategory 的函数,它只是将一个列表拆分为两个子列表,描述如下:
List vendorMainCategory = ['one', 'two', 'three', 'four'];
Future splitVendorMainCategory() async {
for (int i=0; i< (vendorMainCategoryLength); i+=2){
vendorMainCategoryC1.add(vendorMainCategory[i]),
},
for(int j = 1; j < vendorMainCategoryLength; j+=2){
vendorMainCategoryC2.add(vendorMainCategory[j]),
}
}
我在页面初始化时调用它,但它返回两个空子列表,而 List VendorMainCategory 包含元素。 我将该函数称为:
@override
initState() {
splitVendorMainCategory();
super.initState();
}
但是,当我在同一页面的“body”中调用相同的函数时,它会返回预期的结果。
vendorMainCategoryC1 = [one, three]
vendorMainCategoryC2 = [two, four]
什么可能导致该函数在页面初始化时不被调用,但在另一个小部件中调用时却可以完全正常工作?当我尝试以任何一种方式运行它时,都不会引发错误,只是得到两个不同的结果。任何帮助将不胜感激。
最佳答案
这里的问题是:
splitVendorMainCategory()
方法是异步
,这意味着需要一些时间才能完成其执行init()
方法是非异步的,这意味着它不会等待任何异步方法。因此,每当您在完成执行之前调用
splitVendorMainCategory()
时,都会调用build()
方法并开始构建小部件
索恩:
- 在
build()
方法中使用futurebuilder
或
- 使用
bool loading = true
并在异步方法完成后将其设置为false
并调用setState()
以便build ()
方法再次被调用
关于flutter - 为什么一个函数可能不会在 flutter 中的 initState(){ super.initState()} 中被调用,但如果稍后在同一页面中调用则可以正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61121266/