Forms 在多个屏幕中使用表格“颤振”;在小部件树中检测到重复的GlobalKey“;错误
我使用“GlobalKey _formKey=GlobalKey();”为我使用的关键部分创建了一个带有表单的登录页面,它工作正常,没有问题。在登录一个页面后,我想创建一个弹出屏幕,我会像在登录页面中一样进行所有操作。不幸的是,我得到了这个“在小部件树中检测到重复的GlobalKey”错误。我尝试了很多我在网上看到的东西,但没有一个奏效。我的钥匙不是静态的,不是最终的。此外,我还尝试替换登录页面,但它也不起作用。我只是尝试在应用程序中的不同页面中使用表单,但它们之间并没有任何连接Forms 在多个屏幕中使用表格“颤振”;在小部件树中检测到重复的GlobalKey“;错误,forms,flutter,key,Forms,Flutter,Key,我使用“GlobalKey _formKey=GlobalKey();”为我使用的关键部分创建了一个带有表单的登录页面,它工作正常,没有问题。在登录一个页面后,我想创建一个弹出屏幕,我会像在登录页面中一样进行所有操作。不幸的是,我得到了这个“在小部件树中检测到重复的GlobalKey”错误。我尝试了很多我在网上看到的东西,但没有一个奏效。我的钥匙不是静态的,不是最终的。此外,我还尝试替换登录页面,但它也不起作用。我只是尝试在应用程序中的不同页面中使用表单,但它们之间并没有任何连接 class B
class Body extends StatelessWidget {
GlobalKey<FormState> _formKey = GlobalKey();
final TextEditingController emailContoller = TextEditingController();
final TextEditingController passwordContoller = TextEditingController();
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => LoginCubit(
emailContoller,
passwordContoller,
_formKey,
),
child: BlocConsumer<LoginCubit, LoginState>(
listener: (context, state) {
if (state is LoginComplete) {
CacheManager.instance.addCacheItem(
'${state.loginResultModel.userID}', state.loginResultModel);
state.navigate(context);
} else if (state is LoginError) {
ScaffoldMessenger.of(context)
.showSnackBar(SnackBar(content: Text(state.message)));
}
},
builder: (context, state) {
return buildBackground(context, state);
},
));
}
Background buildBackground(BuildContext context, LoginState state) {
Size size = MediaQuery.of(context).size;
return Background(
child: Stack(children: [
Form(
key: _formKey,
autovalidateMode: autovalidateMode(state),
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
"LOGIN",
style: TextStyle(fontWeight: FontWeight.bold),
),
//TextFormFields and buttons....
类主体扩展了无状态小部件{
GlobalKey _formKey=GlobalKey();
final TextEditingController emailContoller=TextEditingController();
最终TextEditingController密码控制器=TextEditingController();
@凌驾
小部件构建(构建上下文){
返回BlocProvider(
创建:(上下文)=>LoginCubit(
emailContoller,
密码控制器,
_formKey,
),
孩子:女顾客(
侦听器:(上下文、状态){
如果(状态为LoginComplete){
CacheManager.instance.addCacheItem(
“${state.loginResultModel.userID}”,state.loginResultModel);
状态。导航(上下文);
}else if(状态为LoginError){
脚手架信使(上下文)
.showSnackBar(SnackBar(内容:Text(state.message)));
}
},
生成器:(上下文、状态){
返回buildBackground(上下文、状态);
},
));
}
后台buildBackground(BuildContext上下文,LoginState状态){
Size Size=MediaQuery.of(context).Size;
返回背景(
子:堆栈(子:[
形式(
键:_formKey,
autovalidateMode:autovalidateMode(状态),
子:SingleChildScrollView(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
正文(
“登录”,
样式:TextStyle(fontWeight:fontWeight.bold),
),
//TextFormFields和buttons。。。。
Popup具有相同的实现问题是您正在将相同的
\u formKey
传递给LoginCubit()
,因此在本例中,您在不同的位置使用相同的GlobalKey()
创建两个单独的GlobalKey()
,并在两个位置使用它们
GlobalKey\u formKey=GlobalKey();
GlobalKey\u cubitFormKey=GlobalKey();
现在使用\u formKey
到Form()
并将\u cubitFormKey
传递到LoginCubit()