я хочу отправить данные под идентификатором пользователя, а также получить те же данные - PullRequest
0 голосов
/ 20 апреля 2020

Я не могу отправить его под текущим идентификатором пользователя, а также не могу получить его для текущего идентификатора пользователя. в основном я хочу отправить данные под идентификатором пользователя, а также получить те же данные.

  1. Так что для этого я хочу изменить имя текущего документа в качестве идентификатора пользователя. но всякий раз, когда я делаю это и вызываю _sendToServer () в нажатой кнопке, это дает мне ошибку.
 _sendToServer() {
    if (_key.currentState.validate()) {
      _key.currentState.save();
      DatabaseReference ref = FirebaseDatabase.instance.reference();
      final Firestore _db = Firestore.instance;
      var data = {
        "name": name,
        "profession": profession,
        "message": message,
      };
      _db
          .collection('Profile')
          .document('KoMna0Hv7VXoeABwFTGH7LTo1No2')
          .setData(data)
          .then((v) {
        _key.currentState.reset();
      });
    }
  }
также при получении данных я не могу это сделать. поскольку я получаю сообщение об ошибке в приведенном ниже коде.
fetchUser() async{
    Future<List<Text>> getAllProfiles() async {
      List<Text> returnList = [];
      final Firestore _db = Firestore.instance;
      await _db.collection("profile").getDocuments().then((QuerySnapshot snapshot) {
        snapshot.documents.forEach((doc) {
          var keys = snapshot.value.keys;
          var data = snapshot.value;
          allData.clear();
          for (var key in keys) {
            myData d = new myData(
              data[key]['name'],
              data[key]['message'],
              data[key]['profession'],
            );
            allData.add(d);
          }
          setState(() {
            print('Length : ${allData.length}');
          });
        });
      });
      return returnList;
    }
  }

я должен предоставить эту пару значений ключа для выборки данных, но, к сожалению, я не могу этого сделать.

1 Ответ

1 голос
/ 23 апреля 2020
  1. Я добавил orderByChild ('id') и equalTo ('$ {user.uid}') в коде пользователя firebase. и я также еще один элемент в моем списке, который является data [key] ['id'], мой текущий идентификатор пользователя. таким образом, каждый раз, когда пользователь пытается извлечь данные, он просматривает элемент списка для текущего идентификатора пользователя и, если он совпадает, выбирает только эту конкретную базу данных.
@override
  // ignore: must_call_super
  void initState() {
    FirebaseAuth.instance.currentUser().then((user) {
      fetchUser(user);
    });
  }

  fetchUser(FirebaseUser user) {
    DatabaseReference ref = FirebaseDatabase.instance.reference();
    ref
        .child('node-name')
        .orderByChild('id')
        .equalTo('${user.uid}')
        .once()
        .then((DataSnapshot snap) {
      var keys = snap.value.keys;
      var data = snap.value;
      print(snap.value.toString());
      allData.clear();
      for (var key in keys) {
        myData d = new myData(
          data[key]['name'],
          data[key]['number'],
          data[key]['address'],
          data[key]['id'],
          data[key]['location'],
          data[key]['website'],
        );
        allData.add(d);
      }
      setState(() {
        print('Length : ${allData.length}');
      });
    });
  }
_sendToServer() async{
    FirebaseUser user = await FirebaseAuth.instance.currentUser();
    if (_key.currentState.validate()) {
      _key.currentState.save();
      DatabaseReference ref = FirebaseDatabase.instance.reference();
      var data = {
        "id": user.uid,
        "name": name,
        "number": number,
        "address": address,
        "location":location,
        "website":website,
      };
      ref.child('node-name').child(user.uid).set(data).then((v) {
        _key.currentState.reset();
      });
    } else {
      setState(() {
        _autovalidate = true;
      });
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...