Getx包中的Get.create()是什么以及它的作用

问题描述 投票:0回答:2

阅读

Getx
包文档,我遇到了这个方法:

  Get.create<ShoppingController>(() => ShoppingController()); 

它说:

Get.create(()=>Controller()) 每次调用 Get.find() 都会生成一个新的 Controller,

但是,我似乎不明白这是什么意思以及它与

Get.put()
Get.lazyPut()
有何不同。

flutter dart flutter-getx
2个回答
5
投票

我找到了这个问题的答案。

之间的巨大区别

Get.create<ShoppingController>(() => ShoppingController()); 

还有:

Get.put(ShoppingController());

它们都用于在 Flutter 应用程序中注入依赖项,但是

Get.put<T>(T())
只注入一次,每当我们调用
Get.find<T>()
时,它都会查找确切的依赖项并返回它,所以我们可以记住这一点:

Get.put<T>(())
注入依赖项,无论何时我们在整个应用程序中调用
Get.find<T>()
,都会返回相同的
T

另一方面,

Get.create<V>(() => V)
也在Flutter应用程序中注入依赖项,但是每次我们调用
Get.find<V>()
时,它不会返回相同的
V
,它会创建一个新的
V
实例,然后返回它,这样我们就可以记住这一点:

Get.create<V>(() => V)
不要返回相同的实例,每次调用
Get.find<V>()
时都会创建一个新实例。

Get.put(T()) :

class ControllerOne extends GetxController {
int number = 10;
increment() {
 number += 10;
 }
}


final controllerOne =  Get.put<ControllerOne>(ControllerOne());

final controllerOneFinder = Get.find<controllerOne>();

controllerOneFinder.increment();

final controllerOneSecondFinder = Get.find<controllerOne>();

print(controllerOneFinder.number); // 20

print(controllerOneSecondFinder.number); // 20

保持不变。

Get.create(() =>T) :

class ControllerTwo extends GetxController {
int secondNumber = 10;
increment() {
 secondNumber += 10;
 }
}


final controllerTwo =  Get.create<ControllerTwo>(() => (ControllerTwo());

final controllerTwoFinder = Get.find<ControllerTwo>();

controllerTwoFinder.increment();

final controllerTwoSecondFinder = Get.find<ControllerTwo>();


print(controllerTwoFinder.number); // 20

print(controllerTwoSecondFinder.number); // 10

每一个都不同于另一个。 (controllerTwoSecondFinder ==controllerTwoFinder) 是

false


0
投票

现在是最新版 GetX 打包版本 5.0 中的 Get.spawn。

确保先更新软件包,然后再使用它。

这不会出错。

© www.soinside.com 2019 - 2024. All rights reserved.