database - Unhandled Exception: RangeError (index): Invalid value: Valid value range is empty: 0 // 在尝试登录时颤动
问题描述
我创建了一个带有登录和注册屏幕的颤振应用程序,注册屏幕运行良好,并将电子邮件和用户名保存在 firebase 中,但是当我尝试登录时出现此错误:未处理的异常:RangeError(索引):无效值:有效值范围为空:0,当我打印查询快照的大小时,它为零。任何帮助将不胜感激。
这是我按下登录按钮时调用的方法的代码:
AuthMethods authMethods = new AuthMethods();
final formKey = GlobalKey<FormState>();
TextEditingController emailTextEditingController = new TextEditingController();
TextEditingController passwordTextEditingController = new TextEditingController();
QuerySnapshot snapshotUserInfo;
bool isLoading = false;
signMeIn() {
if (formKey.currentState.validate()) {
HelperFunctions.saveUserEmailSharedPrefrence(emailTextEditingController.text);
databaseMethods.getUserByUserEmail(emailTextEditingController.text).toString();
databaseMethods.getUserByUserEmail(emailTextEditingController.text).then((val) {
snapshotUserInfo = val;
HelperFunctions.saveUserNameSharedPrefrence(
snapshotUserInfo.docs[0].data()["name"]); });
setState(() {
isLoading = true; });
print("the size of the returnd query snapshot is:"); print(snapshotUserInfo.size);
print("is the snapshot null? "); print(snapshotUserInfo == null);
authMethods
.signInWithEmailAndPassword(emailTextEditingController.text,
passwordTextEditingController.text)
.then((val) {
if (val != null) {
HelperFunctions.saveUserLoggedInSharedPrefrence(true);
Navigator.pushReplacement(
context, MaterialPageRoute(builder: (context) => ChatRoom())); }
});
}}
这是辅助函数的代码:
import 'package:shared_preferences/shared_preferences.dart';
class HelperFunctions {
static String sharedPrefrenceUserLoggedInKey = "ISLOGGEDIN";
static String sharedPrefrenceUserNameKey = "USERNAMEKEY";
static String sharedPrefrenceUserEmailKey = "USEREMAILKEY";
//saving data to share prefrence
static Future<bool> saveUserLoggedInSharedPrefrence(
bool isUserLoggedIn) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return await prefs.setBool(sharedPrefrenceUserLoggedInKey, isUserLoggedIn);
}
static Future<bool> saveUserNameSharedPrefrence(String userName) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return await prefs.setString(sharedPrefrenceUserNameKey, userName);
}
static Future<bool> saveUserEmailSharedPrefrence(String userEmail) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return await prefs.setString(sharedPrefrenceUserEmailKey, userEmail);
}
//getting data from share prefrence
static Future<bool> getUserLoggedInSharedPrefrence() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getBool(sharedPrefrenceUserLoggedInKey);
}
static Future<String> getUserNameSharedPrefrence() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString(sharedPrefrenceUserNameKey);
}
static Future<String> getUserEmailSharedPrefrence(String userEmail) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString(sharedPrefrenceUserEmailKey);
}
}
这是 database.dart 的代码:
import 'package:cloud_firestore/cloud_firestore.dart';
class DatabaseMethods {
getUserByUsername(String username) async {
return await FirebaseFirestore.instance
.collection("users")
.where("name", isEqualTo: username)
.get();
}
getUserByUserEmail(String userEmail) async {
return await FirebaseFirestore.instance
.collection("users")
.where("email", isEqualTo: userEmail)
.get();
}
uploadUserInfo(userMap) {
FirebaseFirestore.instance.collection("users").add(userMap).catchError((e) {
print(e.toString());
});
}
createChatRoom(String chatRoomId, chatRoomMap) {
FirebaseFirestore.instance
.collection("ChatRoom")
.doc(chatRoomId)
.set(chatRoomMap)
.catchError((e) {
print(e.toString());
});
}
}
解决方案
推荐阅读
- kubernetes - PVC 和多个命名空间
- sql - SQL Oracle 中基于 7 天周期的总和值
- macos - 如何重新打开macOS“最近关闭”或“打开最近”菜单中列出的所有文件?
- python - 如何创建一个函数,该函数将列表作为输入并为每个高于 0.5 的值返回 1,如果低于 0.5,则返回 0?
- swift - 基于多个字符串分隔符拆分字符串的高效算法
- python - Pandas 将 jsonl 加载到具有复杂内部结构的数据帧中
- typescript - 使用 reduce 从对象数组创建强类型 TS 字典
- javascript - 如何在javascript中替换引号内的字符串?
- node.js - 猫鼬中两个 .save() 的正确方法
- javascript - 获取 Leaflet 弹出窗口以仅在功能属性不为空时显示