簡體   English   中英

Flutter Firestore 添加數據

[英]Flutter Firestore adding data

我想在 firestore 上添加數據,但它不起作用。 有人可以幫幫我嗎這是最新的更新版本,我不知道如何... firebase_auth: ^0.18.0+1 cloud_firestore: ^0.14.0+2

這是注冊屏幕,所以我想在創建 email 和密碼后發送數據。 我也想添加帶有用戶 uid 的文檔。

onPressed: () async {
                  try {
                    UserCredential userCredential = await FirebaseAuth
                        .instance
                        .createUserWithEmailAndPassword(
                      email: _emailController.text,
                      password: _passwordController.text,
                    );
                    if (userCredential != null) {
                      firestore
                          .collection("user")
                          .doc('user.uid')
                          .set({
                            'username': username,
                            'email': email,
                          })
                          .then((value) => print("User Added"))
                          .catchError((error) =>
                              print("Failed to add user: $error"));
                      Navigator.of(context).pushNamed(AppRoutes.authLogin);
                    }
                  } catch (e) {
                    print(e);
                    _usernameController.text = "";
                    _passwordController.text = "";
                    _repasswordController.text = "";
                    _emailController.text = "";
                    //TODO: alertdialog with error
                  }
                  setState(() {
                    saveAttempted = true;
                  });
                  if (_formKey.currentState.validate()) {
                    _formKey.currentState.save();
                  }
                },

有人可以幫我用 firestore 嗎..謝謝..

首先創建用戶class。

  class UserData {
  final String userId;
  final String fullNames;
  final String email;
  final String phone;
  UserData(
      {this.userId,
      this.fullNames,
      this.email,
      this.phone});

  Map<String, dynamic> getDataMap() {
    return {
      "userId": userId,
      "fullNames": fullNames,
      "email": email,
      "phone": phone,
    };
  }
}

然后你可以使用像這樣的 function 來保存憑據並將數據保存到 firestore

createOrUpdateUserData(Map<String, dynamic> userDataMap) async {
    FirebaseUser user = await FirebaseAuth.instance.currentUser();
    DocumentReference ref =
        Firestore.instance.collection('user').document(user.uid);
    return ref.setData(userDataMap, merge: true);
  }

==

bool validateAndSave() {
final form = _formKey.currentState;
if (form.validate()) {
  form.save();
  return true;
}
return false;
 }  

 void validateAndSubmit() async {
        if (validateAndSave()) {
          try {
            String userId = _formType == FormType.login
               ? await widget.auth.signIn(_email, _password)//use your signin
              : await widget.auth.signUp(_email, _password);//use your signup
            if (_formType == FormType.register) {
              UserData userData = new UserData(
                fullNames: _fullNames,
                email: _email,
                phone: "",            
          );
          createOrUpdateUserData(userData.getDataMap());
        }

    } catch (e) {
    setState(() {
      _isLoading = false;
      switch (e.code) {
        case "ERROR_INVALID_EMAIL":
          _authHint = "Your email address appears to be malformed.";
          break;
        case "ERROR_EMAIL_ALREADY_IN_USE":
          _authHint = "Email address already used in a different account.";
          break;
        case "ERROR_WRONG_PASSWORD":
          _authHint = "Your password is wrong.";
          break;
        case "ERROR_USER_NOT_FOUND":
          _authHint = "User with this email doesn't exist.";
          break;
         case "EMAIL NOT VERIFIED":
          _authHint = "Email not verified: Please go to yor email and verify";
          break;
        case "ERROR_USER_DISABLED":
          _authHint = "User with this email has been disabled.";
          break;
        case "ERROR_TOO_MANY_REQUESTS":
          _authHint =
              "Too many Attemps. Account has temporarily disabled.\n Try again later.";
          break;
        case "ERROR_OPERATION_NOT_ALLOWED":
          _authHint = "Signing in with Email and Password is not enabled.";
          break;
        case "ERROR_ACCOUNT_EXISTS_WITH_DIFFERENT_CREDENTIAL":
          _authHint = "The email is in use by another account";
          break;
        default:
          _authHint = "An undefined Error happened.";
      }
    });
    print(e);
    errorDialog(context, _authHint);
  }
} else {
  setState(() {
    _authHint = '';
  });
}

}

然后使用

onpressed:(){
              validateAndSubmit();
                 }

表單類型是一個枚舉

enum FormType { login, register, reset }

widget.auth.signIn 和 widget.auth.signUp 應該分別替換為您的登錄和注冊。

添加了自定義錯誤塊以區分 firebase 身份驗證錯誤。

獨立定義一個授權頁面將幫助您在未來重用您的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM