flutter - 为什么一个函数可能不会在 flutter 中的 initState(){ super.initState()} 中被调用,但如果稍后在同一页面中调用则可以正常工作?

标签 flutter function-call

我有一个名为 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]    

什么可能导致该函数在页面初始化时不被调用,但在另一个小部件中调用时却可以完全正常工作?当我尝试以任何一种方式运行它时,都不会引发错误,只是得到两个不同的结果。任何帮助将不胜感激。

最佳答案

这里的问题是:

  1. splitVendorMainCategory() 方法是异步,这意味着需要一些时间才能完成其执行

  2. init() 方法是非异步的,这意味着它不会等待任何异步方法。

  3. 因此,每当您在完成执行之前调用 splitVendorMainCategory() 时,都会调用 build() 方法并开始构建小部件

索恩:

  1. build() 方法中使用 futurebuilder

  • 使用 bool loading = true 并在异步方法完成后将其设置为 false 并调用 setState() 以便 build ()方法再次被调用
  • 关于flutter - 为什么一个函数可能不会在 flutter 中的 initState(){ super.initState()} 中被调用,但如果稍后在同一页面中调用则可以正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61121266/

    相关文章:

    string - Flutter 将字符串转换为 boolean 值

    flutter - ImagePicker,如何再次设置图像?

    dart - 如何在 SingleChildScrollView 中放置一个 ListView 但防止它们单独滚动?

    从 main() 调用函数

    flutter - OpenAI ChatGPT (GPT-3.5) API : Why does it take so long to get a completion?

    flutter - 如何在flutter中并排对齐 ListView 中的项目?

    C 中无法在另一个函数中打印函数的返回值

    bash 。返回两个函数级别(两个嵌套调用)

    javascript - 为什么 onMouseOver 操作在 javaScript 中似乎不起作用?

    PHP-调用静态函数