#flutter #dart
Вопрос:
Я создавал страницу входа в систему для своего приложения и хотел проверить свою электронную почту и пароль, я также написал тот же код проверки ранее, но в тот раз у меня не было никаких ошибок. Но на этот раз я получаю _CastError (оператор проверки Null, используемый для нулевого значения), попытался найти его в Google, но не могу, эксперты, пожалуйста, помогите, очень расстроены сейчас. Я прилагаю код, а также сообщение об ошибке.
import 'package:flutter/material.dart';
class Login extends StatefulWidget {
const Login({Key? key}) : super(key: key);
@override
_LoginState createState() => _LoginState();
}
class _LoginState extends State<Login> {
final _formKey = GlobalKey<FormState>();
var email = "";
var password = "";
final emailController = TextEditingController();
final passwordController = TextEditingController();
@override
void dispose() {
emailController.dispose();
passwordController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Form(
child: Padding(
padding: const EdgeInsets.all(20.0),
child: ListView(
children: [
Container(
margin: const EdgeInsets.symmetric(vertical: 10),
child: TextFormField(
controller: emailController,
autofocus: false,
decoration: const InputDecoration(
labelText: "Email: ",
labelStyle: TextStyle(
fontSize: 20,
),
border: OutlineInputBorder(),
errorStyle: TextStyle(fontSize: 15, color: Colors.redAccent),
),
validator: (value) {
if (value == null || value.isEmpty) {
return "Please Enter Email";
}
if (!value.contains("@")) {
return "Please Enter Valid Email ";
}
return null;
},
),
),
Container(
margin: const EdgeInsets.symmetric(vertical: 10),
child: TextFormField(
controller: passwordController,
autofocus: false,
decoration: const InputDecoration(
labelText: "Password: ",
labelStyle: TextStyle(
fontSize: 20,
),
border: OutlineInputBorder(),
errorStyle: TextStyle(fontSize: 15, color: Colors.redAccent),
),
validator: (value) {
if (value == null || value.isEmpty) {
return "Please Enter Password";
}
return null;
},
keyboardType: TextInputType.number,
obscureText: true,
),
),
Container(
margin: const EdgeInsets.symmetric(vertical: 20),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
setState(() {
email = emailController.text;
password = passwordController.text;
});
}
},
child: const Text("LOGIN"),
),
TextButton(
onPressed: () {},
child: const Text(
"Forgot Password",
style: TextStyle(fontSize: 14),
),
),
],
),
),
Container(
margin: const EdgeInsets.symmetric(vertical: 1),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text("Don't Have An Account?"),
TextButton(
onPressed: () {},
child: const Text("Sign-Up"),
)
],
),
)
],
),
),
));
}
}
Ответ №1:
Я думаю, что вы пропустили назначение ключа виджету формы
body: Form(
key: _formKey,
child: Padding(
...
Комментарии:
1. Да, я скучал по этому, большое спасибо. Ваше решение исправило это. Еще раз спасибо
Ответ №2:
Вы должны передать ключ в форму, чтобы форма знала, что у нее есть ключ:
Scaffold(
body: Form(
key: _formKey, // <== here
child: Padding(
Комментарии:
1. Большое спасибо , я пропустил ключ в виджете Формы. Я ценю ваше решение. Еще раз спасибо