Flutter Getx:obs可以创建全局变量吗?

Flutter Getx: Can obs create a global variable?

如何让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); //""

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"

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

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

test_cont.dart:

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

但我还是觉得我的方法可能不对

这种方法有什么缺点吗?

您可以使用 Get.put(Test()); 将 class 插入到 main 中,它类似于:

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

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

您的 Test class 将如下所示:

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

现在您有了全局 class 并发送给调用者如下:

Test.to.a

您将按以下方式使用它:

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