这些使用 GetX 在 Flutter 中初始化值的方式有区别吗?
Is there a difference between these ways of initializing values in Flutter using GetX?
我可以想到这 3 种使用 GetX 初始化值的方法
在声明处初始化:
class StatusPane extends StatelessWidget {
final HomeController homeController = Get.find();
StatusPane({Key? key}) : super(key: key);
在初始化列表中:
class StatusPane extends StatelessWidget {
final HomeController homeController;
StatusPane({Key? key}) : homeController = Get.find(), super(key: key);
或者在构造函数中
class StatusPane extends StatelessWidget {
late final HomeController homeController;
StatusPane({Key? key}) : super(key: key) {
homeController = Get.find();
}
三者之间有什么显着差异吗?比如,一种方法会导致崩溃或错误吗?或者是更好的性能明智的一种方式?或者它们实际上是相同的?如果不使用 GetX,会不会有什么不同,例如 final HomeController homeController = HomeController()
?还是完全取决于个人喜好?
这 3 个是相同的,但如果您想要更高的性能,您可以通过方法或 getter 获得控制器,例如:
HomeController get controller => GetInstance().find<HomeController>()
这样,如果您使用 Get.lazyPut 而不是 Get.put,HomeController 及其生命周期(如 onInit、onReady 等)会在必要时被调用。否则它会立即在构造函数上调用。
还有一个内置的 GetView class,您可以使用它来代替 StatelessWidget。它有一个 getter 控制器
我可以想到这 3 种使用 GetX 初始化值的方法
在声明处初始化:
class StatusPane extends StatelessWidget {
final HomeController homeController = Get.find();
StatusPane({Key? key}) : super(key: key);
在初始化列表中:
class StatusPane extends StatelessWidget {
final HomeController homeController;
StatusPane({Key? key}) : homeController = Get.find(), super(key: key);
或者在构造函数中
class StatusPane extends StatelessWidget {
late final HomeController homeController;
StatusPane({Key? key}) : super(key: key) {
homeController = Get.find();
}
三者之间有什么显着差异吗?比如,一种方法会导致崩溃或错误吗?或者是更好的性能明智的一种方式?或者它们实际上是相同的?如果不使用 GetX,会不会有什么不同,例如 final HomeController homeController = HomeController()
?还是完全取决于个人喜好?
这 3 个是相同的,但如果您想要更高的性能,您可以通过方法或 getter 获得控制器,例如:
HomeController get controller => GetInstance().find<HomeController>()
这样,如果您使用 Get.lazyPut 而不是 Get.put,HomeController 及其生命周期(如 onInit、onReady 等)会在必要时被调用。否则它会立即在构造函数上调用。 还有一个内置的 GetView class,您可以使用它来代替 StatelessWidget。它有一个 getter 控制器