这3段代码有什么区别吗:
首先:当我在 onInit() 中调用我的函数时。
@override
void onInit() {
super.onInit();
fetchProductsFromAPI();
}
第二:当我在无状态小部件中的构建方法内部调用我的函数时。
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
fetchProductsFromAPI();
return GetMaterialApp(
home: ShoppingPage(),
);
}
}
第三:当我在无状态小部件中的构建方法之外调用我的函数时。
class MyApp extends StatelessWidget {
fetchProductsFromAPI();
@override
Widget build(BuildContext context) {
return GetMaterialApp(
home: ShoppingPage(),
);
}
}
最佳答案
是的,有区别。您可以阅读 flutter widget 生命周期以了解更多详细信息:
总结
当您在构建方法之外调用方法时(您的第三个示例)。
这是在您可以做到的情况下通常推荐的做法。
这只会在创建类时运行一次。
在 initState
内部(您的第一个示例)
此时,您的小部件正在创建。一些 getter 已经可用,例如 context
。该方法仅被调用一次。
在 build
方法中(您的第二个示例)
这通常是最糟糕的方法。 每个构建都会调用您的方法(您可以考虑 1 个构建 = 1 帧),这可能会导致性能不佳。建议尽可能将这些调用移出 build
方法(如果有意义的话)
关于flutter - 当我们可以在第一行代码中初始化一个变量时,为什么要在 flutter 中使用 initState(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74190396/