我为接受密码的文本字段创建了一个小部件,并使用了有状态小部件。现在我想获得两个不同文件中文本字段中写入的值但我不能在这里设置textditingcontroller requiredenter图像描述
登录页面应该是这样的:在登录页面中声明控制器,然后您可以将控制器传递给其他Widget,包括Passwordfield,登录页面现在是控制器的所有者,它初始化它并处置它。
class LoginPage extends StatefulWidget {
@override
_LoginPageState createState() => _LoginPageState();
}
class _LoginPageState extends State<LoginPage> {
late TextEditingController _passwordController;
@override
void initState() {
_passwordController = TextEditingController();
}
@override
void dispose() {
_passwordController.dispose();
}
Widget build(BuildContext context) {
return Column(
children: <Widget>[
// Emailfield(),
Passwordfield(
controller: _passwordController,
),
],
);
}
}
在Passwordfield中的编辑构造函数以使用此Widget中的控制器:
class Passwordfield extends StatefulWidget {
final TextEditingController controller;
Passwordfield({Key? key, required this.controller,}) : super(key: key);
@override
_PasswordfieldState createState() => _PasswordfieldState();
}
class _PasswordfieldState extends State<Passwordfield> {
ValueChanged<String> onChanged = (value) {};
String hintText = "password";
bool hidepassword = true;
Widget build(BuildContext context) {
return TextField(
controller: widget.controller,
onChanged: onChanged,
obscureText: hidepassword,
// ...
);
}
}
你可以这样做:
首先你必须创建controller:
var _controller = TextEditingController();
然后将此控制器添加到textfield
TextField(
autofocus: true,
controller: _controller, // add controller here
decoration: InputDecoration(
hintText: 'Test',
focusColor: Colors.white,
),
),
最后在按钮中检查控制器是否为空
CustomButton (onTap:()异步{if (_controller.text.trim().isEmpty) {showCustomSnackBar ('密码字段为空',上下文);}})
这