【问题标题】:Flutter GetX: the value passed in arguments is null on second pageFlutter GetX:传入参数的值在第二页为空
【发布时间】:2021-11-16 13:05:54
【问题描述】:

使用 GetX Flutter 从一个页面导航到另一个页面时,从第一页传递的参数不会在第二个页面上接收。

第一控制器:

class LoginController extends GetxController {
  var _loading = false.obs;

  get loading => _loading.value;

  set loading(value) {
    _loading.value = value;
  }

  var _loginResponse = LoginResponse().obs;

  late TextEditingController emailController, passwordController;

  @override
  void onInit() {
    super.onInit();
    emailController = TextEditingController();
    passwordController = TextEditingController();
  }

  @override
  void onReady() {
    super.onReady();
  }

  @override
  void onClose() {
    super.onClose();
    emailController.dispose();
    passwordController.dispose();
  }

  Future<void> loginCall(
      {required String email, required String password}) async {

 
    if (!GetUtils.isEmail(email)) {
      Get.snackbar('Invalid email', 'Please enter valid email',
          snackPosition: SnackPosition.BOTTOM);
      return;
    }

    if (password.length < 8) {
      Get.snackbar('Invalid password', 'Minimum 8 chars',
          snackPosition: SnackPosition.BOTTOM);
      return;
    }

    _loading.value = true;

    var result =
        await NetworkRequest.loginCall(email: email, password: password);

    result != null
        ? _loginResponse.value = result
        : Get.snackbar(
            'Something went wrong', 'Hold back and try again after sometime.',
            snackPosition: SnackPosition.BOTTOM);

    if(_loginResponse.value.responseCode == 1) {

      **Get.offAll(GoogleAuthenticationScreen(), arguments: _loginResponse.value.responseData!.session.toString());**
    }

    _loading.value = false;

  }
}

第二控制器:

class GoogleAuthenticationController extends GetxController {
  var _loading = false.obs;
  late TextEditingController pinController;
  var _authResponse = GoogleTwoFactorResponse().obs;

  @override
  void onInit() {
    super.onInit();
    pinController = TextEditingController();
    var session = Get.arguments.toString();
    twoFactorCall(token: session);
  }

  @override
  void onClose() {
    super.onClose();
    pinController.dispose();
  }

  Future<void> twoFactorCall({required String token}) async {
    _loading.value = true;

    var result = await NetworkRequest.googleAuthentication(token: token);

    result != null
        ? _authResponse.value = result
        : Get.snackbar(
            'Something went wrong', 'Hold back and try again after sometime.',
            snackPosition: SnackPosition.BOTTOM);

    Get.snackbar(result!.responseMessage!, "",
        snackPosition: SnackPosition.BOTTOM);

    _loading.value = false;
  }
}

Getx 版本获取:^4.3.8

医生总结(要查看所有详细信息,请运行 flutter doctor -v): [✓] Flutter (Channel stable, 2.2.2, on macOS 11.4 20F71 darwin-x64, locale en-IN) [✓] Android 工具链 - 为 Android 设备开发(Android SDK 版本 30.0.2) [✓] Xcode - 为 iOS 和 macOS 开发 [✓] Chrome - 为网络开发 [✓] Android Studio(4.1版) [✓] 已连接设备(2 个可用)

• 未发现任何问题!

【问题讨论】:

  • 您是否尝试在控制器内部获取值,因为它们没有被压入堆栈?您应该将它们放在身份验证屏幕中,然后在屏幕初始化方法中进行设置。
  • 是的,我已经更新了代码,请告诉我
  • 您将只能在 GoogleAuthenticationScreen() 代码中访问这些参数。

标签: android flutter flutter-dependencies flutter-getx


【解决方案1】:

你可以试试

 final session = Get.arguments;

在 onInIt 方法之外。希望它会工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-30
    • 2021-08-25
    • 2021-12-20
    • 2021-07-04
    • 1970-01-01
    • 2014-06-08
    • 2021-06-07
    • 2022-10-21
    相关资源
    最近更新 更多