我的目标是使用我的 firebase 数据上的现有帐户登录,并在该帐户不存在时显示异常......我遵循了一些教程以及官方 firebase 和 flutter 文档。当我尝试使用不存在或现有的帐户登录时,在主屏幕中导航的按钮登录不起作用。
另外我有这个错误信息 type 'String' is not a subtype of type 'TextEditingController' in type cast
我有这个功能的两页代码
首先是我在 auth Provider Service Screen 中的代码:
import 'package:firebase_auth/firebase_auth.dart';
class AuthClass {
FirebaseAuth auth = FirebaseAuth.instance;
Future<String?> signIN({required String email, required String password}) async {
try {
await auth.signInWithEmailAndPassword(
email: email,
password: password,);
return "Welcome";
} on FirebaseAuthException catch (e) {
if (e.code == 'user-not-found') {
return 'No user found for that email.';
} else if (e.code == 'wrong-password') {
return 'Wrong password provided for that user.';
}
}
}
}
这是我的身体登录屏幕代码:
import 'package:yona/WelcomePage/WelcomePage.dart';
class Body extends StatefulWidget {
const Body({
Key? key,
}) : super(key: key);
@override
_BodyState createState() => _BodyState();
}
class _BodyState extends State<Body> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final auth = FirebaseAuth.instance;
TextEditingController _email = TextEditingController();
TextEditingController _password = TextEditingController();
@override
Widget build(BuildContext context) {
Size size = MediaQuery
.of(context)
.size;
return Background(
child: Form(
key: _formKey,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text("LOGIN", style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 20)),
Container(child: Image.asset('assets/ctlogo.png', height: 200),
),
// Container
RoundedInputField(
hintText: "Your Email",
onChanged: (value) {
setState(() {
_email = value.trim() as TextEditingController;
});
}
),
RoundedPasswordField(
onChanged: (value) {
setState(() {
_password = value.trim() as TextEditingController;
});
},
),
Container(margin: EdgeInsets.symmetric(vertical: 20),
width: 300,
child: ClipRRect(
borderRadius: BorderRadius.circular(29),
// ignore: deprecated_member_use
child: FlatButton(
padding: EdgeInsets.symmetric(vertical: 14, horizontal: 40),
color: SandYellow,
onPressed: () {
AuthClass()
.signIN(
email: _email.text.trim(), password: _password.text.trim())
.then((value) {
if (value == 'Welcome') {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (context) => HomeScreen()),
(route) => false);
}
else{
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(value!)));
}
}
);
},
child: Text("LOGIN",
style: TextStyle(color: DarkTurquoise,
fontSize: 16,)
),
),
),
),
value.trim() as TextEditingController;
value 已经是 String,因此您不能将类型转换为 TextEditingController。_email 变量应该是这样的字符串。
你可以删除as TextEditingController
这部分。所以它会起作用。
编辑:
TextEditingController _email = TextEditingController();
TextEditingController _password = TextEditingController();
这些变量不应该是控制器,应该是字符串。
String _email = '';
String _password = '';
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句