如何使用 GetX 订阅另一个 Controller 中的更改?

Posted

技术标签:

【中文标题】如何使用 GetX 订阅另一个 Controller 中的更改?【英文标题】:How to subscribe to changes in another Controller with GetX? 【发布时间】:2021-11-19 06:41:08 【问题描述】:

如何在另一个 GetxController 中订阅更改?

class HomeController extends GetxController 
    var home = '';
    String userName = '';
    refresh() async 
        //call http...
        update();
    


class LoginController extends GetxController 
    String email = '';
    String password = '';

    onInit() 
        GetBuilder<HomeController>((_)
          email = _.userName;
        );
    

假设我希望 LoginControllerHomeController 更新时订阅更改。我该怎么做?

我认为我不能像上面那样使用GetBuilder

【问题讨论】:

【参考方案1】:

你基本上可以使用下面的代码;

userName 字段必须是可侦听流的扩展 Rx 对象。
onInit() 
    final mailSubs = Get.find<HomeController>.userName.stream.listen((event) 
      email = event;
    );
  

【讨论】:

【参考方案2】:

您应该尝试以下可能对您有用的代码。 您可以监听特定的控制器,也可以监听控制器的变量。

class LoginController extends GetxController 
  String email = '';
  String password = '';
  HomeController cnt = Get.find();

  @override
  onInit() 
    // Listen to the Controller
    cnt.obs.listen((value) 
      print(value);
    );
    // Listen to the username variable
    cnt.userName.obs.listen((value) 
      print(value);
    );
  

【讨论】:

以上是关于如何使用 GetX 订阅另一个 Controller 中的更改?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter GetX Get.find() 在一个类中返回 null,但在另一个类中找到它?

使用 GetX 改变主题?

在flutter中使用getX打开页面时自动调整页面语言

如何防止用户在颤动中使用 getX 倒退

网页中的 Flutter GetX 路由

如何使用 GetX 可观察变量?