【问题标题】:Can I use getx controller inside another getx controller?我可以在另一个 getx 控制器中使用 getx 控制器吗?
【发布时间】:2021-08-09 04:25:09
【问题描述】:

我正在使用 Get (getx) 包来管理我的应用程序的状态,并且我正在尝试在另一个应用程序中使用一个控制器。例如,我有一个包含 firebase 身份验证方法的类

class FirebaseAuthController extends GetxController {

  static FirebaseAuthController get to => Get.find<FirebaseAuthController>();
  .....

  Future<void> createUser(String email, String password) async {
    try {
      await _auth.createUserWithEmailAndPassword(
          email: email, password: password);
    } catch (e) {
      ...
    }
  }

...
...
}

我还有另一个控制器,它是与 UI 交互的 signUpController


class SignInController extends GetxController {
  static SignInController get to => Get.find<SignInController>();

...
....

  Future<void> clickSignInButton() async {
    print(emailController.text);
    print(passwordController.text);
    if (formKey.currentState.validate()) {
      try {
        await FirebaseAuthController.to
             .login(emailController.text, passwordController.text);
      } catch (e) {
        print(e);
      }
    }
  }
}

当我尝试这样做时,它给了我一个错误

lib/screens/authentication_screens/controller/sign_up_controller.dart:56:37: Error: Getter not found: 'to'.
       await FirebaseAuthController.to

知道可能是什么问题吗?

【问题讨论】:

  • 你可以在另一个控制器中调用一个控制器,我这样做但我声明不同:最终控制器控制器 = Get.find();
  • 它有效!谢谢你的帮助

标签: flutter dart flutter-getx


【解决方案1】:

您绝对可以,尽管这被认为是一种不好的做法。除非您想从另一个控制器更新附加到该控制器的屏幕上显示的数据,否则建议使用存储库或用例类之类的东西。

对于您的实际问题或错误的解决方案,只需将 static FirebaseAuthController get to =&gt; Get.find&lt;FirebaseAuthController&gt;(); 更改为 static FirebaseAuthController get to =&gt; Get.put(FirebaseAuthController());

【讨论】:

    【解决方案2】:

    是的,您可以在另一个控制器中使用一个控制器并使用它的变量并更新它

    例子

    class HomeController extends GetxController {
        var home = '';
        String userName = '';
        updateName() {}
    }
    
    class LoginController extends GetxController {
        HomeController homeController = Get.put(HomeController());
        String email = '';
        String password = '';
    
        signin() {
            email = homeController.userName;
            homeController.updateName();
            homeController.update();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 2022-01-18
      • 2021-11-02
      • 2017-09-30
      • 2021-12-11
      • 1970-01-01
      • 2023-01-17
      • 2021-12-14
      • 2023-01-15
      相关资源
      最近更新 更多