#flutter
#трепетание
Вопрос:
я должен сделать что-то в своем приложении, что технически не так сложно, но я не знаю, как это сделать.
Мне нужно получить некоторые данные из firebase, а затем использовать эти данные для получения других данных из fireabse.
Это работает так. У меня есть организация, и из нее я получаю только UID пользователей. После того, как я распечатаю всю организацию (только идентификаторы пользователей), мне придется снова вызвать базу данных и получить имена людей, использующих идентификаторы пользователей, которые я получил ранее.
Вот что я пытался делать
FutureBuilder(
future: databaseReference.once(),
builder: (context, AsyncSnapshot < DataSnapshot > snapshot) {
List lists = [];
if (snapshot.hasData) {
lists.clear();
Map < dynamic, dynamic > values = snapshot.data.value;
values.forEach((key, values) {
lists.add(values);
print(values);
}, );
return new ListView.builder(
primary: false,
padding: EdgeInsets.only(left: 12.0, right: 12, bottom: 15, ),
shrinkWrap: true,
itemCount: lists.length,
itemBuilder: (BuildContext context, int index) {
HERE I TRY TO CALL IT AGAIN WITH THE REZULT I GET
FirebaseDatabase.instance.reference().child("Users/" lists[index]["UID"].toString() "/Name").once().then((DataSnapshot snapshot) {
print('Data : ${snapshot.value}');
aa = snapshot.value;
});
return Container(
child: Text("$aa"));
});
}
return Container(
margin: const EdgeInsets.only(top: 300),
child: CircularProgressIndicator());
}),
Проблема, с которой я сталкиваюсь, заключается в том, что появляется отложенное значение null, если я показываю это в контейнере, и оно не появляется. Я думал о добавлении future builder внутри этого future builder. Что бы вы, ребята, порекомендовали?
Ответ №1:
Может быть, вы могли бы обрабатывать все выборки пользователей внутри поставщика Future / Stream и упростить свой виджет, просто представив список пользователей?
Пример:
class MyWidget extends HookWidget {
@override
Widget build(BuildContext context) {
final AsyncValue<List<User>> asyncUsers = useProvider(allUsersProvider);
return asyncUsers.when(
data: (users) => ListView.builder(
shrinkWrap: true,
itemCount: users.length,
itemBuilder: (BuildContext context, int index) => Container(
child: Text(users[index].name),
),
),
loading: () => Text('Loading...'),
error: (error, trace) => Text('Something bad happened'),
);
}
}