我可以创建 Get.find<>() 的单个实例吗?
Posted
技术标签:
【中文标题】我可以创建 Get.find<>() 的单个实例吗?【英文标题】:Can I create single instance of Get.find<>()? 【发布时间】:2021-11-08 11:50:15 【问题描述】:目前要显示来自controller
的值我正在使用下一个构造:
Get.find<XMLFilesStatController>().foo.value,
Get.find<XMLFilesStatController>().bar.value,
Get.find<XMLFilesStatController>().baz.value,
我可以在类中创建指向Get.find<XMLFilesStatController>()
的单个实例吗?
类似:
var xmlCtrl = Get.find<XMLFilesStatController>();
然后将其用作:xmlCtrl.foo
?
我试着这样做:
class XMLProcessingStatisticView extends StatelessWidget
var formKey = GlobalKey<FormState>();
var xmlCtrl = Get.find<XMLFilesStatController>();
在 main.dart 我正在创建:
main()
//....
Get.lazyPut<XMLFilesStatController>(() => XMLFilesStatController());
runApp(MyApp());
所以实例 XMLFilesStatController
被初始化。但我需要捷径Get.find
但出现错误:
errors.dart:202 Uncaught (in promise) Error: "XMLFilesStatController" not found. You need to call "Get.put(XMLFilesStatController())" or "Get.lazyPut(()=>XMLFilesStatController())"
【问题讨论】:
你在哪里使用Get.put(...)
?它可能与仅在构建小部件时可用的依赖关系有关。尝试在 build 方法中移动变量 dt
。
【参考方案1】:
你可以完全按照你的描述做,但你的问题是你还没有实例化XMLFilesStatController
。您首先必须使用Get.put(XMLFilesStatController());
或Get.lazyPut(()=>XMLFilesStatController());
。
之后你可以像你说的那样使用var xmlCtrl = Get.find<XMLFilesStatController>();
。
看看dependency management。
【讨论】:
我可以在main()
而不是Widget中创建Get.put
吗?
@DmitryBubnenkov 是的,您可以,但这会使您的实例在您的整个应用程序中可用。确保这是你想要的。【参考方案2】:
您首先需要使用Get.put(XMLFilesStatController())
或Get.lazyPut(()=>XMLFilesStatController())
。然后你可以通过调用var xmlCtrl = Get.find<XMLFilesStatController>();
来创建你的对象。
如果您希望您的 XMLFilesStatController
对象是永久的,即您只想创建一次对象并在整个应用生命周期中使用它,那么您需要这样做Get.put(XMLFilesStatController(),permanent=true)
【讨论】:
以上是关于我可以创建 Get.find<>() 的单个实例吗?的主要内容,如果未能解决你的问题,请参考以下文章
mongodb如何使用get.find(….),比如sql的LIKE操作? [复制]
CakePHP 3.x ORM get()、find() 以及如何禁用befeoreFind()?
Use the Get-Command PowerShell Cmdlet to Find Parameter Set Information
Flutter GetX Get.find() 在一个类中返回 null,但在另一个类中找到它?