Получить все документы из коллекции из Firestore — флаттер

Я пытаюсь получить все документы с их полями из коллекции firestore, но это не работает. Я сделал это:

final _fireStore = FirebaseFirestore.instance;

Future<void> getData() async{

    QuerySnapshot querySnapshot = await _fireStore.collection('addsaidas').get();;

    final allData = querySnapshot.docs.map((doc) => doc.data()).toList();

    print(allData);
}

Но экран по-прежнему пуст. Код работает, но ничего не появляется.

Помогает ли этот раздел? firebase.google.com/docs/firestore/query-data/get-data#dart_‌​5

Wesley LeMahieu 15.02.2023 02:05
Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
0
1
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш код кажется мне хорошим на первый взгляд. По вопросу, касающемуся этой линии

Но экран по-прежнему пуст. Код работает, но ничего не появляется.

Чтобы отобразить результат на экране, мы должны использовать виджеты, предоставляемые флаттером.

Вот один пример с использованием ListView, а также печатью результата в консоли onPress FloatingActionButton :

class MyHomePage extends StatelessWidget {
  MyHomePage({Key? key}) : super(key: key);
  final _fireStore = FirebaseFirestore.instance;
  final ref =
      FirebaseFirestore.instance.collection('addsaidas').snapshots();
  Future<void> getData() async {
    QuerySnapshot querySnapshot =
        await _fireStore.collection('addsaidas').get();
    final allData = querySnapshot.docs.map((doc) => doc.data()).toList();

    for (var dataMap in allData) {
      if (dataMap is Map) {
        // add a type check to ensure dataMap is a Map
        for (var key in dataMap.keys) {
          print('$key: ${dataMap[key]}'); //printing document fields using keys
        }
        print('----------------------');
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('My Screen')),
      body: StreamBuilder<QuerySnapshot>(
        stream: ref,
        builder: (context, snapshot) {
          if (!snapshot.hasData) {
            return const Center(child: CircularProgressIndicator());
          }
          final documents = snapshot.data!.docs;
          return ListView.builder(
            itemCount: documents.length,
            itemBuilder: (context, index) {
              final document = documents[index];
              final data = document.data() as Map<String, dynamic>;
              return ListTile(
                title: Text(data['nomesaida']),
                subtitle: Text(data['datasaida']),
              );
            },
          );
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: getData,
        backgroundColor: Colors.green,
        child: const Icon(Icons.navigation),
      ),
    );
  }
}

Вы можете распечатать другие поля, как указано выше.

Другие вопросы по теме