颤振:GetX。使用 GetxController

时间:2021-07-30 00:03:31

标签: flutter dart state-management getx flutter-getx

我有这三屏注册表格,第一屏要求填写邮箱、密码和确认密码,第二屏要求提供其他用户信息,包括姓名、电话号码和地址,最后一个是一次性密码确认页面

现在我想将输入到第一个屏幕的所有数据调用到第二个屏幕上,我将在将数据保存到数据库之前确认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,
  });
}

Bellow 是我的控制器:

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

现在在完整的个人资料屏幕“第二屏幕”上,我尝试显示在第一个屏幕上填充的数据“电子邮件地址”以确保它实际上保存了用户输入,但是当输入名称“电子邮件或电子邮件文本编辑控制器”时,我的 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..
...

我得到的错误:

<块引用>

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

我想我叫错了或者什么

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

1 个答案:

答案 0 :(得分:1)

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

Registration registration;

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

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

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