我可以创建 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&lt;XMLFilesStatController&gt;() 的单个实例吗?

类似: var xmlCtrl = Get.find&lt;XMLFilesStatController&gt;();

然后将其用作: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(()=&gt;XMLFilesStatController());

之后你可以像你说的那样使用var xmlCtrl = Get.find&lt;XMLFilesStatController&gt;();

看看dependency management。

【讨论】:

我可以在main()而不是Widget中创建Get.put吗? @DmitryBubnenkov 是的,您可以,但这会使您的实例在您的整个应用程序中可用。确保这是你想要的。【参考方案2】:

您首先需要使用Get.put(XMLFilesStatController())Get.lazyPut(()=&gt;XMLFilesStatController())。然后你可以通过调用var xmlCtrl = Get.find&lt;XMLFilesStatController&gt;();来创建你的对象。

如果您希望您的 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,但在另一个类中找到它?

Ehcache学习ehcache与springAOP拦截器实例

Laravel 查看默认的用户认证