这些使用 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 控制器