阅读
Getx
包文档,我遇到了这个方法:
Get.create<ShoppingController>(() => ShoppingController());
它说:
Get.create(()=>Controller()) 每次调用 Get.find() 都会生成一个新的 Controller,
但是,我似乎不明白这是什么意思以及它与
Get.put()
和Get.lazyPut()
有何不同。
我找到了这个问题的答案。
之间的巨大区别
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
。
现在是最新版 GetX 打包版本 5.0 中的 Get.spawn。
确保先更新软件包,然后再使用它。
这不会出错。