_CastError(用于空值的空檢查運算子)
錯誤代碼
bool validateAndSave() {
final form = globalFormKey.currentState;
if (form.validate()) {
form.save();
return true;
}
return false;
}
完整代碼
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:thex/components/account_check.dart';
import 'package:thex/components/rounded_button.dart';
import 'package:thex/components/rounded_input_field.dart';
import 'package:thex/components/rounded_password_field.dart';
import 'package:thex/constants.dart';
import 'package:thex/models/login_model.dart';
import 'package:thex/screen/Login/components/background.dart';
// import 'package:thex/screen/home/home_screen.dart';
import 'package:thex/screen/signup/signup_screen.dart';
import 'package:url_launcher/url_launcher.dart';
class Body extends StatelessWidget {
Body({
Key? key,
}) : super(key: key);
final scaffoldKey = GlobalKey<ScaffoldState>();
GlobalKey<FormState> globalFormKey = GlobalKey<FormState>();
LoginRequestModel? requestModel;
void initState() {
requestModel = LoginRequestModel();
}
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
return Background(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Container(
margin: EdgeInsets.only(bottom: size.height * 0.04),
child: const Text(
"Sign In",
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 34, color: kPrimaryColor),
),
),
SvgPicture.asset(
"assets/icons/login.svg",
height: size.height * 0.35
),
RoundedInputField(
validator: (value) => ! value!.contains('@') ? null : 'Invalid Email',
hintText: "Your Email",
onSaved: (value) {
requestModel!.email = value;
},
),
RoundedPasswordField(
validator: (password) => password!.length < 6 ? 'Password too short' : null,
hintText: "Your Password",
onSaved: (password) {
requestModel!.password = password;
},
),
RoundedButton(
text: "LOGIN",
press: () {
if (validateAndSave()) {
print(requestModel!.toJson());
}
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) {
// return const HomeScreen();
// },
// ),
// );
},
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
AlreadyHaveAnAccountCheck(
press: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context){
return const SignUpScreen();
},
),
);
},
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text("Don't have an account? ", style: TextStyle(color: kPrimaryColor),),
GestureDetector(
onTap: () { launch("https://www.web.com/forgot-password");},
child: const Text("Reset Password", style: TextStyle(color: kPrimaryColor),),
),
],
)
],
),
);
}
bool validateAndSave() {
final form = globalFormKey.currentState;
if (form.validate()) {
form.save();
return true;
}
return false;
}
}
幫助!!
uj5u.com熱心網友回復:
你不應該使用“!” 強制不為空。相反,
?? defaultValue在使用“!”之前使用或檢查 null。此外,使用除錯模式 (f5) 檢查流程并了解代碼死在哪里。
uj5u.com熱心網友回復:
我已經改成這樣了,但是控制臺沒有回應。應該有一個列印請求模型
bool validateAndSave() {
final form = globalFormKey.currentState;
if (form?.validate != null) {
form!.save();
return true;
} else {
return false;
}
}
uj5u.com熱心網友回復:
問題是您的小部件中沒有表單元素。那里是空的。
您需要使用密鑰添加表單小部件。
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
return Background(
child: Form(
key: globalFormKey,
child: Column(
...
)
)
);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/453777.html
上一篇:Flutter桌面問題
