Flutter 在onPressed中添加设置状态正在清除我的文本字段(颤振)
我在使用iconbutton显示和隐藏密码时遇到问题。起初我没有在Textfield中添加控制器,它运行良好,但在我为Textfield添加控制器之后,当我按下图标按钮时,Textfield被清除。我试着删除onpressed上的setState,它什么也不做,也不清除文本字段强文本 这是我的密码Flutter 在onPressed中添加设置状态正在清除我的文本字段(颤振),flutter,Flutter,我在使用iconbutton显示和隐藏密码时遇到问题。起初我没有在Textfield中添加控制器,它运行良好,但在我为Textfield添加控制器之后,当我按下图标按钮时,Textfield被清除。我试着删除onpressed上的setState,它什么也不做,也不清除文本字段强文本 这是我的密码 class LoginState extends State<Login>{ Icon visibilityIcon = Icon(Icons.visibility); bool
class LoginState extends State<Login>{
Icon visibilityIcon = Icon(Icons.visibility);
bool isVisible = false;
@override
Widget build(BuildContext context) {
final fieldWidth = 350.0;
final TextEditingController password = new TextEditingController();
final TextEditingController userName = new TextEditingController();
return Scaffold(
body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.center,children: [
Center(
child: Container(
height: 50.0,
width: fieldWidth,
child: Align(
alignment: FractionalOffset(0.2, 0.6),
child:TextField(controller:userName,decoration: const InputDecoration(hintText: "Username",),style: TextStyle(fontSize: 16,color: Colors.grey[850]),),
)
),
),
Center(
child: Container(
height: 80,
width: fieldWidth,
child: Align(
alignment: FractionalOffset(0.2, 0.6),
child: Stack(alignment: Alignment.centerRight,children: [TextField(controller: password,decoration: const InputDecoration(hintText: "Password"),obscureText: !isVisible,style: TextStyle(fontSize: 16,color: Colors.grey[850]),),
IconButton(icon: visibilityIcon,onPressed: (){
setState(() {
if(!isVisible)
{
// print(password.text);
// visibilityIcon = Icon(Icons.visibility);
// isVisible = true;
}
else
{
// visibilityIcon = Icon(Icons.visibility_off);
// isVisible = false;
}
});
}
,)],)
),
),
),
Center(child: RaisedButton(
onPressed: () => onPressedLogin(password.text,userName.text),
color: Colors.grey[900],
focusColor: Colors.grey[400],
child: Container(
width: fieldWidth-30,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("Login",style: TextStyle(color: Colors.white60),),
Icon(Icons.login_outlined,color:Colors.white60 ,)
]),),),)
],),)
);
}
void onPressedLogin(String userName,String password){
print(userName+" "+password);
}
}
类LoginState扩展状态{
图标可见性图标=图标(Icons.visibility);
bool isVisible=false;
@凌驾
小部件构建(构建上下文){
最终场宽=350.0;
最终文本编辑控制器密码=新文本编辑控制器();
最终TextEditingController用户名=新的TextEditingController();
返回脚手架(
主体:中心(子项:列)(mainAxisAlignment:mainAxisAlignment.Center,子项:[
居中(
子:容器(
身高:50.0,
宽度:字段宽度,
子对象:对齐(
校准:分数偏移(0.2,0.6),
子项:TextField(控制器:用户名,装饰:常量输入装饰(hintText:“用户名”,),样式:TextStyle(fontSize:16,颜色:Colors.grey[850]),
)
),
),
居中(
子:容器(
身高:80,
宽度:字段宽度,
子对象:对齐(
校准:分数偏移(0.2,0.6),
child:Stack(对齐方式:alignment.centerRight,children:[TextField(控制器:密码,装饰:const-input装饰(hintText:password)),蒙蔽文本:!isVisible,样式:TextStyle(fontSize:16,颜色:Colors.grey[850]),
图标按钮(图标:可见性图标,按下时:(){
设置状态(){
如果(!isVisible)
{
//打印(密码.文本);
//visibilityIcon=图标(Icons.visibility);
//isVisible=true;
}
其他的
{
//visibilityIcon=图标(Icons.visibility\u off);
//isVisible=false;
}
});
}
,)],)
),
),
),
居中(子项:升起按钮(
onPressed:()=>onPressedLogin(密码.文本,用户名.文本),
颜色:颜色。灰色[900],
聚焦颜色:颜色。灰色[400],
子:容器(
宽度:fieldWidth-30,
孩子:排(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
文本(“登录”,样式:TextStyle(颜色:Colors.white60),),
图标(Icons.login\u概述,颜色:Colors.white60,)
]),),),)
],),)
);
}
void onPressedLogin(字符串用户名、字符串密码){
打印(用户名+“”+密码);
}
}
问题在于每次重建构建方法时,您都会在构建方法中创建新的TextEditingController()。要修复此问题,只需将控制器移到构建方法之外,如下所示:
class _LoginState extends State<Login>{
Icon visibilityIcon = Icon(Icons.visibility);
bool isVisible = false;
final TextEditingController password = new TextEditingController();
final TextEditingController userName = new TextEditingController();
class\u LoginState扩展状态{
图标可见性图标=图标(Icons.visibility);
bool isVisible=false;
最终文本编辑控制器密码=新文本编辑控制器();
最终TextEditingController用户名=新的TextEditingController();
请让我知道这对你有帮助。干杯我是新来的。哇,你刚刚救了我:D,顺便问一下,我该如何设置这个为“回答”呢?我是新来的StackOverflow不能给你投票:(我的声誉太低了,但是的,谢谢:Dglad帮助了:)你应该可以用“检查图标”来接受答案uder向上投票/向下投票图标位于左侧。我将不胜感激。谢谢