在运行应用程序时出现此错误
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();
}