這3個代碼有區別嗎:
第一:當我在 onInit() 中呼叫我的函式時。
@override
void onInit() {
super.onInit();
fetchProductsFromAPI();
}
第二:當我在 build 方法中呼叫我的函式時,在無狀態小部件中。
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(),
);
}
}
uj5u.com熱心網友回復:
是,有一點不同。您可以閱讀有關顫振小部件生命周期的資訊以了解更多詳細資訊:
- Flutter 中的生命周期
- https://medium.flutterdevs.com/app-lifecycle-in-flutter-c248d894b830
總之
當您在構建方法之外呼叫您的方法時(您的第三個示例)。
當您可以做到時,通常建議這樣做。
看看在 initState 內部為變數賦值與在 Flutter StatefulWidget 中不賦值有什么區別嗎?
這只會在創建類時運行一次。
在initState(你的第一個例子)里面
此時,您的小部件正在創建中。一些吸氣劑已經可用,例如context. 此方法只呼叫一次。
在build方法內部(你的第二個例子)
這通常是最糟糕的方法。每次構建都會呼叫您的方法(您可以考慮 1 構建 = 1 幀),這可能會導致性能不佳。建議盡可能將這些呼叫移出build方法(如果有意義的話)
請參閱如何處理不需要的小部件構建?
uj5u.com熱心網友回復:
第一:把它放在 initState 然后函式fetchProductsFromAPI只會在你的小部件第一次創建時呼叫
第二:我強烈建議你不要使用這種方法,因為 build 方法會在 widget 需要重建時多次觸發,如果你把它放在那里,你的應用程式會出現fetchProductsFromAPI很多意外的時間。示例當您需要呼叫setState()某些更改時,您不想呼叫 fetch API
第三:這種方式會導致編譯錯誤,我認為你不能像上面的代碼那樣把它放在那里
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/520973.html
