【问题标题】:Flutter Getx: Can obs create a global variable?Flutter Getx:obs可以创建全局变量吗?
【发布时间】:2022-06-22 02:41:23
【问题描述】:

如何让obs成为全局变量?

有可以创建全局变量的Getx选项吗?

例如:

class Test extends GetxController {
  RxString a = "".obs;
}

第 1 页:

Test test =  Get.put(Test());
print(test.a.value); //""
test.a.value = "55555";
print(test.a.value); //"55555"

第 2 页:

Test test =  Get.put(Test());
print(test.a.value); //""

【问题讨论】:

  • 使用 GetxService 并将 main() 和使用 Get.find() 放在任何地方。

标签: flutter flutter-getx


【解决方案1】:

您可以使用 Get.put(Test()); 将您的课程插入 main 中,它会是这样的:

void main() {
  Get.put(Test());
  runApp(...);
}

在您的测试类中添加以下代码:static Test get to => Get.find<Test>();

你的Test 类看起来像这样:

class Test extends GetxController {
 static Test get to => Get.find<Test>();
  RxString a = "".obs;
}

现在你有了你的全局类并发送它来调用它,如下所示:

Test.to.a

您可以通过以下方式使用它:

//IMPORT TEST CLASS
//get the same instance that has already been created
Test test =  Test.to.a; 
print(test.value); 

【讨论】:

    【解决方案2】:

    Get.put() 创建单个实例,但是,如果你想创建一个全局控制器,Get.find() 会获取创建的控制器的最后一个实例并共享它,这样就可以实现全局访问。

    你可以阅读更多关于这个here

    注意,要使用Get.find(),需要提前创建实例。

    您的新代码将如下所示:

    class Test extends GetxController {
      RxString a = "".obs;
    }
    

    第 1 页:

    Test test =  Get.put(Test());
    print(test.a.value); //""
    test.a("55555");
    print(test.a.value); //"55555"
    

    第 2 页:

    Test test =  Get.find<Test>();
    print(test.a.value); //"55555"
    

    【讨论】:

    • 谢谢。有用!有时我需要使用最新的值。但它并不是真正的全局实例。现在,我正在使用 Test testGlobals = Get.put(Test);在同一个类文件中。但我还是觉得我的方法可能不对。
    【解决方案3】:

    如果您的工作需要最新的价值,您可以关注@Sagnik Biswas 的评论。有效!

    现在,我正在使用基本的全局实例。

    test_cont.dart:

    TestCont testContGlobals =  Get.put(TestCont());
    class TestCont extends GetxController {
      RxString a = "".obs;
    }
    

    但我仍然认为我的方法可能不正确。

    这种方法有什么缺点吗?

    【讨论】:

      【解决方案4】:

      更新 现在,我正在使用

      类+静态

      类:

      Class Global {
           Rx<String> name = "me".obs;
           ProfileObject profile = ProfileObject();
      }
      

      用途:

      Obx(()=>Text(Global.name.value)),
      Obx(()=>Text(Global.profile.age.value)),
      

      使用方便,不要在类中设置只使用静态。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-26
        • 2016-10-25
        • 2021-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-08
        • 2017-11-12
        相关资源
        最近更新 更多