Не удается получить значение списка в контейнере Flutter Firebase

#firebase #flutter #listview #google-cloud-firestore

#firebase #flutter #listview #google-облако-firestore

Вопрос:

Я пытаюсь распечатать идентификаторы документов, присутствующих в моей коллекции «Меню». Но похоже, что виджет не получает значение List<Text> списка идентификаторов документов. Когда я печатаю список в функции addDocId, он печатает содержимое идентификаторов документов, но в виджете сборки, если я печатаю список, он выводит только — (‘[]’). Я не могу понять, почему он получает docIds пустым. Пожалуйста, помогите мне.

 
    import 'package:flutter/material.dart';
    import 'package:cloud_firestore/cloud_firestore.dart';
    import 'package:firebase_core/firebase_core.dart';
    
    class Category extends StatefulWidget {
      @override
      _CategoryState createState() => _CategoryState();
    }
    
    class _CategoryState extends State<Category> {
      bool _initialized = false;
      bool _error = false;
    
      initializeFlutterFire() async {
        try {
          await Firebase.initializeApp();
          setState(() {
            _initialized = true;
          });
        } catch (e) {
          setState(() {
            _error = true;
          });
        }
      }
    
      @override
      void initState() {
        initializeFlutterFire();
    
        super.initState();
      }
    
      Widget somethingWentWrong() {
        return AlertDialog(
          title: Text('Something Went Wrong'),
          content: Icon(
            Icons.error,
            color: Colors.red,
            size: 40.0,
          ),
        );
      }
    
      Widget loading() {
        return Center(
          child: CircularProgressIndicator(
            backgroundColor: Colors.black,
            valueColor: new AlwaysStoppedAnimation<Color>(Colors.black),
          ),
        );
      }
    
      List<Text> docIds = [];
    
      void addDocId(String s) {
        docIds.add(Text(s));
        print(docIds);
      }
    
      @override
      Widget build(BuildContext context) {
        if (_error) {
          return somethingWentWrong();
        }
        if (!_initialized) {
          return loading();
        }
    
        FirebaseFirestore.instance
            .collection('Menu')
            .get()
            .then((QuerySnapshot querySnapshot) => {
                  querySnapshot.docs.forEach((doc) {
                    addDocId(doc.id);
                  })
                });
        print(docIds);
    
        return Container(
            margin: EdgeInsets.fromLTRB(
              50.0,
              100.0,
              50.0,
              100.0,
            ),
            // color: Colors.blueAccent,
            child: Center(
              child: ListView(
                children: docIds,
              ),
            ));
      }
    }
  

Ответ №1:

Поскольку Text распознается только в Flutter, он не работает для Firebase. Попробуйте вместо этого использовать строку со значением текста или создать сопоставление с каждой независимой переменной в тексте, такой как размер шрифта.