Я сейчас пытаюсь создать приложение, похожее на Quiz, для изучения этой среды.
Я реализовал Firebase Firestore для управления данными приложения.
Из этого плагина трепетания документации я прочитал о привязке CollectionReference к ListView, и это было довольно легко.
Моя проблема в следующем.
У меня есть несколько категорий для отображения на домашней странице, я хочу, чтобы пользователь мог выбрать, какую из них он хочет, и затем сохранить эту информацию в списке.
С этим кодом я могу отобразить список:
@override
Widget build(BuildContext context) {
return StreamBuilder<QuerySnapshot>(
stream: Firestore.instance.collection('Categorie').snapshots(),
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError) return new Text('Error: ${snapshot.error}');
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return new Center(
child: Column(
children: <Widget>[
SizedBox(
child: CircularProgressIndicator(),
height: 50.0,
width: 50.0,
),
Text('Dowload delle categorie...')
],
),
);
default:
_loadListOfCategories(snapshot);
return new ListView(
children:
snapshot.data.documents.map((DocumentSnapshot document) {
var nome = document['Nome'];
print('doc: $nome');
return new CategoryWidget(
id: document.documentID,
tap: onCategoryTap,
nome: document['Nome'],
count: document['Count'],
checked: false,
);
}).toList(),
);
}
},
);
}
CategoryWidget - это простой виджет без сохранения состояния, который действует как ListTile.
Результат следующий:
Теперь, как я могу сохранить Список, полный моделей категорий, в котором реализовано свойство «проверено / не проверено», и как сохранить этот Список обновленным?
Я пытался использовать метод "_loadListOfCategories ()" точно внутри компоновщика:
void _loadListOfCategories(AsyncSnapshot<QuerySnapshot> snapshot) {
var temporalList = new List<CategoryModel>();
for (DocumentSnapshot doc in snapshot.data.documents) {
temporalList.add(new CategoryModel(
id: doc.documentID,
count: doc['Count'],
nome: doc['Nome']));
}
setState(() {
_listOfCategories = temporalList;
});
}
Но я не смог вызвать setState (), потому что я на самом деле внутри метода построения.