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

Из приведенного ниже кода я не могу получить доступ к идентификатору пользователя текущего состояния без await. Если мне нужно использовать await, как показано ниже, мне нужно заключить код в метод, чтобы был асин c. Но, поскольку код заключен в метод, я не могу получить доступ к переменной userid в databaseReference. Можете ли вы помочь:

somemethod() async{
    FirebaseUser userid = await FirebaseAuth.instance.currentUser();
}

    final **databaseReference** = FirebaseDatabase.instance.reference().child("UserProfile").child(userid.uid).("Favorites");

@override
  Widget build(BuildContext context) {
    return FutureBuilder(
        future: **databaseReference**.once(),
        builder: (context, AsyncSnapshot<DataSnapshot> snapshot) {
          if (snapshot.hasData) {
            List<Map<dynamic, dynamic>> list = [];
            for (String key in snapshot.data.value.keys) {
              list.add(snapshot.data.value[key]);
            }

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

Спасибо.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Если вы хотите иметь только 1 будущего компоновщика, вам нужно передать параметр функции в databaseReference .once () метод

class yourDatabase {

   Future<dynamic> once(Function somemethod) async{
       //Now, you are caling the funcion on yourDatabase class
       dynamic returnOfSomethod = await somemethod();

       //TODO your somemethod here

   }
}

и для вызова вам сделать это

somemethod() async{
    FirebaseUser userid = await FirebaseAuth.instance.currentUser();
}

//Inside the build...
FutureBuilder(
   future: **databaseReference**.once(somemethod), // ! Dont place ()
   builder: () {}
)

надеюсь, что это работает!

0 голосов
/ 02 апреля 2020
        FirebaseUser userId; 
        Future databaseReference;
         somemethod() async{
                userid = await FirebaseAuth.instance.currentUser();
                databaseReference = FirebaseDatabase.instance.reference().child("UserProfile").child(userid.uid).("Favorites");    }

            @override
              Widget build(BuildContext context) {
                return FutureBuilder(
                    future: **databaseReference**.once(),
                    builder: (context, AsyncSnapshot<DataSnapshot> snapshot) {
                      if (snapshot.hasData) {
                        List<Map<dynamic, dynamic>> list = [];
                        for (String key in snapshot.data.value.keys) {
                          list.add(snapshot.data.value[key]);
                        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...