在Dart Flutter中用于空值的Null Check运算符



在由用户用户实例变量引起的Dart flutter中的空值错误上使用空检查运算符。请帮助如何运行此代码以从firebase中获取值。到目前为止,伪用户变量运行良好。代码:

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../models/user.dart';
import '../services/database/users_database_services.dart';
class UserController extends GetxController {
String userID = '';
bool previouslyLoggedIn = false;
UserDBService userDBService = UserDBService();
User? user;
setUser(String userID, String name, String phone, String email, int usercnic,
String profilePictureLink) {
this.userID = userID;
user = User(
email: email,
name: name,
phone: phone,
userID: userID,
usercnic: usercnic,
profilePictureLink: profilePictureLink,
);
}
updateDbUser() async {
bool isSuccess = await userDBService.addUser(userID, user!.name,
user!.phone, user!.email, user!.usercnic, user!.profilePictureLink);
if (isSuccess) {
Get.snackbar(
"success",
"User details updated successfully",
snackPosition: SnackPosition.BOTTOM,
);
} else {
Get.snackbar(
"error",
"User details not updated successfully",
snackPosition: SnackPosition.BOTTOM,
backgroundColor: Colors.red,
colorText: Colors.white,
duration: const Duration(seconds: 2),
);
}
}
}

空校验运算符!将其前面的可为null的值(一个可能为null也可能不为null的变量(视为不可为null。在您的情况下,这是updateDbUser中的user

如注释中所述,这可能是由于在设置user字段之前调用updateDbUser造成的。由于您已经有了显示失败更新的方法,我建议您在没有用户的情况下简单地将isSuccess设置为false:

updateDbUser() async {
bool isSuccess = user != null && await userDBService.addUser(...);

...
}

这应该确保user不为null,如果为null,它将简单地将isSuccess设置为false并向您显示红色横幅。在可能的情况下,建议避免使用空检查运算符!,因为它会导致运行时异常/错误。

在添加用户时添加空值条件,如下所示,或者您可以检查用户是否不是空

bool isSuccess = await userDBService.addUser(userID, user?.name ?? "",
user?.phone ?? "", user?.email ?? "", user?.usercnic ?? 0, user?.profilePictureLink ?? "");

bool isSuccess = false;
if(user!= null)
{
isSucess = await userDBService.addUser(userID, user!.name,
user!.phone, user!.email, user!.usercnic, user!.profilePictureLink);
}

您的用户数据为空,请在更新前检查用户数据,如下所示:

updateDbUser() async {
bool isSuccess=false;
if(user!=null){
isSuccess = await userDBService.addUser(userID, user!.name,
user!.phone, user!.email, user!.usercnic, user!.profilePictureLink);
}
if (isSuccess) {
Get.snackbar(
"success",
"User details updated successfully",
snackPosition: SnackPosition.BOTTOM,
);
} else {
Get.snackbar(
"error",
"User details not updated successfully",
snackPosition: SnackPosition.BOTTOM,
backgroundColor: Colors.red,
colorText: Colors.white,
duration: const Duration(seconds: 2),
);
}
}

相关内容

最新更新