【问题标题】:Flutter: GetX. Passing form input data to the next page Using GetxController颤振:GetX。使用 GetxController 将表单输入数据传递到下一页
【发布时间】:2021-10-05 14:06:17
【问题描述】:

我有这 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,
  });
}

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

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

第二屏代码 Bollow: 贝娄我尝试将“电子邮件”作为 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 或名为 '电子邮件'。

我想我叫错了还是什么

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

【问题讨论】:

    标签: flutter dart state-management flutter-getx


    【解决方案1】:

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

    Registration registration;
    

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

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

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

    【讨论】:

    • 当我在首次注册页面上添加您提供的代码时,我收到此错误:Methods must have an explicit list of parameters. Try adding a parameter list.dart(missing_method_parameters) The name of a constructor must match the name of the enclosing class.
    • 但是当我更换控制器代码时,registrationController.registration.email 停止显示错误,但我在添加功能上得到了一个新错误registrationController.registration.add(Registration( email: emailTextEditingController.text, password: passwordTextEditingController.text, ));这是我得到的错误The method 'add' isn't defined for the type 'Registration'.跨度>
    • 显然.add 不是一个函数
    • 你在控制器中添加了Registration registration吗?
    • 是的,我已经做到了...那么我该如何解决 .add 的问题?
    猜你喜欢
    • 2021-03-02
    • 2021-09-12
    • 2021-07-27
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多