首页 > 解决方案 > 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());
    });
  }
}

这是我的 firebase 数据库的屏幕截图: 在此处输入图像描述

标签: databasefirebaseflutterdartbackend

解决方案


推荐阅读