我可以在另一个getx控制器中使用getx控制器吗?

3

我正在使用 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) {
      ...
    }
  }

...
...
}

我还有一个控制器叫做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

你有什么想法可能是问题所在吗?


1
你可以在一个控制器中调用另一个控制器,我这样做但我声明不同:final Controller controller = Get.find(); - Jorge Vieira
它可以工作了!谢谢你的帮助。 - Ali Alqallaf
以下是嵌套控制器的完整示例:https://dev59.com/42MLtIcB2Jgan1znLJEn#75497500 - Muhammad Anees
以下是嵌套控制器的完整示例:https://dev59.com/42MLtIcB2Jgan1znLJEn#75497500 - Muhammad Anees
2个回答

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();
    }
}

1
你绝对可以这样做,虽然它被视为一种不好的实践。除非你想从另一个控制器更新附加到该控制器的屏幕上显示的数据,否则建议使用类似仓库或用例类的东西。
至于你实际问题或错误的解决方案,请将 static FirebaseAuthController get to => Get.find<FirebaseAuthController>(); 更改为 static FirebaseAuthController get to => Get.put(FirebaseAuthController());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接