Причина в том, что ваш второй оператор print выполняется до завершения вызова базы данных, поэтому для его печати не было возвращено никаких данных. Не уверен, зачем вам второй отпечаток той же информации, но если вы намереваетесь заменить этот отпечаток какой-то обработкой данных, он там не будет работать. Вам необходимо обработать данные, возвращенные в блоке .then
. В качестве альтернативы вам нужно использовать асин * c / await конструкцию в Dart.
ОБНОВЛЕНИЕ Учитывая ваш комментарий:
Ну, моя цель здесь чтобы добраться до обновленного списка accountNames за пределами этой функции. Например. вызывая это из другой функции или виджета. Как я могу передать данные за пределы блока .then?
Есть несколько способов, но самым простым, учитывая ваш код, было бы изменить эту функцию на Future> и использовать инструкцию возврата в блоке .then
, что-то вроде:
Future<List<String>> getData(BuildContext context) {
List<String> accountNames = List<String>();
_database.collection('userAccounts').getDocuments().then((snapshot) {
snapshot.documents.forEach((f) {
accountNames.add(f['accountName']);
});
return accountNames;
});
}
Тогда назовите это как:
var accountNameList = await getData(context);