我想在Flutter应用程序中从Firebase数据库中获取当前用户数据

时间:2020-04-18 21:33:18

标签: firebase flutter firebase-realtime-database dart firebase-authentication

我的问题是我只想获取当前用户的数据。但是下面的这段代码正在获取数据库中存在的所有用户的数据。我该如何获取唯一且唯一的当前用户的数据。

  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}');
      });
    });
  }
  1. 这是我将数据以“ node-name”名称上传到Firebase的代码。此代码存储在另一个文件中,并且还有另一个必填字段,但这是将我的数据上传到Firebase的字段。
_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;
      });
    }
  }
  1. 我在firebase中的数据库如下所示。

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以这样使用

...
ref.child('node-name').child('/** current_user_key **/').once()
...

答案 1 :(得分:1)

使用用户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}');
      });
    });
}