我想解决此错误,请"LateInitializationError: Field '_email@598051279' has already been initialized."



在运行应用程序时出现此错误

LateInitializationError:字段'_email@598051279'已经存在初始化。

如何解决这个问题?

我的代码分为两部分:


class _LoginViewState extends State<LoginView> {
late final TextEditingController _email;
late final TextEditingController _password;
@override
void dispose() {
_email = TextEditingController();
_password = TextEditingController();
super.dispose();
}
@override
void initState() {
_email = TextEditingController();
_password = TextEditingController();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Login')),
body: Column(
children: [
TextField(
controller: _email,
),
TextField(
controller: _password,
),

这是第二部分

Center(
child: TextButton(
onPressed: () async {
final email = _email.text;
final password = _password.text;
try {
final userCredintials =
await FirebaseAuth.instance.signInWithEmailAndPassword(
email: email,
password: password,
);
Navigator.of(context).pushNamedAndRemoveUntil(
notesRoute,
(route) => false,
);
} 
],
),
);
}
}

这里是代理控制台

LateInitializationError: Field '_email@49051279' has already been initialized.
When the exception was thrown, this was the stack
#0      LateError._throwFieldAlreadyInitialized (dart:_internal-patch/internal_patch.dart:201:5)
#1      _LoginViewState._email=
package:learn_flutter_37_hours/views/login.dart:14
#2      _LoginViewState.dispose

dispose()方法中,您将再次设置_email_password的值:

@override
void dispose() {
_email = TextEditingController();
_password = TextEditingController();
super.dispose();
}

由于这两个变量都是final,因此您只能设置它们的值一次,就像在initState中所做的那样。事实上,您应该在dispose()方法中处理这些控制器,而不是再次设置它们。试试这个:

@override
void dispose() {
_email.dispose();
_password.dispose();
super.dispose();
}

注意:处置函数不应该是这样的。您需要将其替换为以下代码

@override
void dispose() {
_email.dispose();
_password.dispose();
super.dispose();
}

最新更新