Flutter简易登录表单控制器为空问题求助
问题分析与解决:登录界面输入值无法传递到控制器
问题原因
你的CustomTextField组件存在核心问题——它内部自行初始化了一个新的TextEditingController实例,并且构造函数没有正确接收外部传入的控制器参数。这导致你在LoginPage中定义的_emailController和_passwordController根本没有和输入框绑定,输入的内容都存在了CustomTextField内部的控制器里,外部调用时自然拿到空字符串。
解决步骤
修改custom_textfield.dart的代码,删除内部的控制器初始化,将controller声明为final成员变量,并在构造函数中正确接收外部传入的实例:
import 'package:flutter/material.dart'; class CustomTextField extends StatelessWidget { final String hintText; final bool obscureText; final TextEditingController controller; // 改为final,不再自行初始化 // 构造函数正确接收controller参数 CustomTextField({ super.key, required this.controller, // 使用this绑定到成员变量 required this.hintText, required this.obscureText, }); @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.symmetric(horizontal: 25.0), child: TextField( obscureText: obscureText, controller: controller, // 这里使用的是外部传入的控制器 decoration: InputDecoration( enabledBorder: OutlineInputBorder( borderSide: BorderSide( color: Theme.of(context).colorScheme.tertiary, ), borderRadius: BorderRadius.circular(10), ), focusedBorder: OutlineInputBorder( borderSide: BorderSide( color: Theme.of(context).colorScheme.primary, ), borderRadius: BorderRadius.circular(10), ), fillColor: Theme.of(context).colorScheme.secondary, filled: true, hintText: hintText, hintStyle: TextStyle( color: Theme.of(context).colorScheme.primary, ), ), ), ); } }
这样修改后,LoginPage中的控制器就会和输入框正确绑定,输入的内容能被正常捕获,点击登录时就不会再触发空值提示了。
内容的提问来源于stack exchange,提问作者Caio
相关产品推荐
相关产品推荐

