#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. Попробуйте вместо этого использовать строку со значением текста или создать сопоставление с каждой независимой переменной в тексте, такой как размер шрифта.