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

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

  1. Это код, с помощью которого я выбираю данные из Firebase (я использую Realtime DataBase). в этом «имени узла» находится поле, в котором хранятся мои данные.
class ShowDataPage extends StatefulWidget {
  @override
  _ShowDataPageState createState() => _ShowDataPageState();
}

class _ShowDataPageState extends State<ShowDataPage> {
  List<myData> allData = [];

  @override
  void initState() {
    DatabaseReference ref = FirebaseDatabase.instance.reference();
    ref.child('node-name').once().then((DataSnapshot snap) {
      var keys = snap.value.keys;
      var data = snap.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}');
      });
    });
  }
Это код, из которого я загружаю свои данные в базу данных под именем «имя-узла». этот код хранится в другом файле и имеет также другие необходимые поля, но это поле, которое загружает мои данные в базу данных.
_sendToServer() {
    if (_key.currentState.validate()) {
      _key.currentState.save();
      DatabaseReference ref = FirebaseDatabase.instance.reference();
      var data = {
        "name": name,
        "profession": profession,
        "message": message,
      };
      ref.child('node-name').push().set(data).then((v) {
        _key.currentState.reset();
      });
    } else {
      setState(() {
        _autovalidate = true;
      });
    }
  }
Моя база данных в базе данных выглядит следующим образом.

enter image description here

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Используйте пользовательский uid:

ref.child('node-name').child("M5CCSXQo3Upq5OC7y3lw").once()
.then((DataSnapshot snap) {...}

Если вы не знаете uid и не используете его, выполните запрос по имени в примере.

@override
void initState() {
    FirebaseAuth.instance.currentUser().then((user){
      fetchUser(user);
    });
}

fetchUser(FirebaseUser user)
{
  DatabaseReference ref = FirebaseDatabase.instance.reference();
  ref.child('node-name').child(user.uid).once().then((DataSnapshot snap) {
      var keys = snap.value.keys;
      var data = snap.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}');
      });
    });
}
1 голос
/ 19 апреля 2020

вы можете использовать вот так

...
ref.child('node-name').child('/** current_user_key **/').once()
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...