Forms 颤振:当验证为假时,表单会移动

Forms 颤振:当验证为假时,表单会移动,forms,flutter,Forms,Flutter,我正在为带有验证的登录表单构建UI 以下是网页: 总体而言,我对页面的外观非常满意,而且效果很好。只有一个例外:当用户在字段(一个或多个)中输入无效参数时,表单移动,负责密码可见性的按钮不再居中。 我在网上搜索过,他们建议把它包装在一个扩展的小部件中,但这并不能解决我的问题 这是一张显示问题的图像: 代码如下: import'包:email_validator/email_validator.dart'; 进口“包装:颤振/材料.省道”; 导入“package:flatter/render

我正在为带有验证的登录表单构建UI

以下是网页:

总体而言,我对页面的外观非常满意,而且效果很好。只有一个例外:当用户在字段(一个或多个)中输入无效参数时,表单移动,负责密码可见性的按钮不再居中。 我在网上搜索过,他们建议把它包装在一个扩展的小部件中,但这并不能解决我的问题

这是一张显示问题的图像:

代码如下:

import'包:email_validator/email_validator.dart';
进口“包装:颤振/材料.省道”;
导入“package:flatter/rendering.dart”;
导入“包:flifter/services.dart”;
导入“包:firebase_auth/firebase_auth.dart”;
导入“包:client/providers/cloudfirestore_provider.dart”;
导入“包:客户端/screens/forgotpass_screen.dart”;
导入“包:客户端/screens/register_screen.dart”;
类LoginScreen扩展StatefulWidget{
@凌驾
_LoginsScreenState createState()=>\u LoginsScreenState();
}
类_LoginScreenState扩展状态{
FirebaseAuth auth=FirebaseAuth.instance;
final _formKey=GlobalKey();
最终电子邮件=TextEditingController();
最终密码=TextEditingController();
bool _obsolizeText=true;
Iconda Iconda=Icons.visibility;
var isLoading=false;
最终焦点=焦点节点();
@凌驾
小部件构建(构建上下文){
返回脚手架(
车身:建造商(
生成器:(ctx)=>SingleChildScrollView(
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
容器(
颜色:颜色,黄色,
宽度:double.infinity,
高度:MediaQuery.of(context).padding.top,
),
堆叠(
对齐:对齐.center,
儿童:[
容器(
颜色:颜色,黄色,
宽度:double.infinity,
高度:(MediaQuery.of(context.size.height)-
MediaQuery.of(context.padding.top)*
0.4,
),
ClipRRect(
边界半径:边界半径。圆形(100.0),
子:容器(
子级:Image.asset('assets/images/logo.jpg'),
身高:150,
宽度:150,
),
),
],
),
容器(
高度:(MediaQuery.of(context.size.height)-
MediaQuery.of(context.padding.top)*
0.6,
填充:边缘组。对称(垂直:30,水平:60),
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
正文(
“你好!”,
样式:TextStyle(fontSize:20,颜色:Colors.grey[900]),
),
容器(
身高:210,
孩子:表格(
键:_formKey,
子:列(
儿童:[
扩大(
子项:TextFormField(
textInputAction:textInputAction.next,
提交的文件:(五){
焦点范围。of(上下文)。请求焦点(焦点);
},
控制器:电子邮件,
装饰:输入装饰(标签文本:“电子邮件”),
键盘类型:TextInputType.emailAddress,
验证器:(值){
if(EmailValidator.validate(值)){
返回null;
}
返回“请输入有效电子邮件”;
},
),
),
扩大(
子:堆栈(
儿童:[
TextFormField(
focusNode:focus,
控制器:密码,
装饰:
输入装饰(标签文本:“密码”),
蒙蔽文字:
_蒙蔽文本,//创建用于显示密码的小眼睛
验证器:(值){
如果(值。长度<6){
返回“最少6个字符”;
}
返回null;
},
),
图标按钮(
图标:图标(Iconda),
已按下:(){
设定状态(
() {
_蒙蔽文本=!\u蒙蔽文本;
如果(Iconda==图标.可见性){
Iconda=Icons.visibility\u关闭;
}否则{
Iconda=图标。可见性;
}
},
);
})
inputDecoration(suffixIcon: IconButton())