【发布时间】: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