首页 > 解决方案 > 颤振:GetX。使用 GetxController 将表单输入数据传递到下一页

问题描述

我有这 3 个屏幕注册表单,第一个屏幕请求电子邮件、密码和确认密码,然后第二个屏幕请求其他用户信息,包括姓名、电话号码和地址,而最后一个屏幕是 OTP 确认页面

现在我想将所有输入的数据调用到第一个屏幕到第二个屏幕上,我将在将数据保存到数据库之前确认 otp 是否正确。

这是注册模型:

class Registration {
  int id;
  String firstNmae;
  String lastName;
  String email;
  String password;
  int phone;
  String address;

  Registration({
    this.id,
    this.firstNmae,
    this.lastName,
    this.email,
    this.password,
    this.phone,
    this.address,
  });
}

这是我的控制器:

import 'package:get/get_state_manager/get_state_manager.dart';
import 'package:signuptest/models/RegistrationModel.dart';

class RegistrationController extends GetxController {
  var registration = [];
}

在第一个注册屏幕上:

class SignUpForm extends StatefulWidget {
  @override
  _SignUpFormState createState() => _SignUpFormState();
}

class _SignUpFormState extends State<SignUpForm> {
  final RegistrationController registrationController =
      Get.find<RegistrationController>();

TextEditingController emailTextEditingController = TextEditingController();
  TextEditingController passwordTextEditingController = TextEditingController();
  TextEditingController cPasswordTextEditingController =
      TextEditingController();

...


//First Screen Onpressed Function:

      onpress: () {
                      if (_formKey.currentState.validate()) {
                        registrationController.registration.add(Registration(
                          email: emailTextEditingController.text,
                          password: passwordTextEditingController.text,
                        ));
                        Navigator.pushNamed(context, CompleteProfileScreen.routeName);
        }

现在在完整的配置文件屏幕“第二个屏幕”上,我尝试显示在第一个屏幕上填充的数据“电子邮件地址”,以确保它实际上保存了用户输入,但是当输入名称“电子邮件或 emailTextEditingController”时,我的 VScode 没有建议我的名字,当我直接输入它时,它下面会显示红线

我尝试将“电子邮件”作为 Text() 小部件的值传递:

class CompleteProfileForm extends StatefulWidget {
  @override
  _CompleteProfileFormState createState() => _CompleteProfileFormState();
}

class _CompleteProfileFormState extends State<CompleteProfileForm> {


  final RegistrationController registrationController =
      Get.put(RegistrationController());


...

 @override
  Widget build(BuildContext context) {
    return Form(
      child: Column(
        children: [
         Text(registrationController.registration.email), //I get a red line under the email which says..
...

我得到的错误是:

没有为“列表”类型定义吸气剂“电子邮件”。尝试导入定义“email”的库,将名称更正为现有 getter 的名称,或定义名为“email”的 getter 或字段

我想我叫错了什么。

我已经看到很多关于相同问题的问题,但其中大多数都没有确定的答案,其次我不想将数据作为论据传递

标签: flutterdartstate-managementflutter-getx

解决方案


您在控制器中声明对象错误。它应该是这样的:

Registration registration;

然后在第一个注册页面上:

registrationController.registration.email = emailTextEditingController.text;
registrationController.registration.password = passwordTextEditingController.text;

您的错误是您声明了一个空数组而不是该类的对象。


推荐阅读