Я уже несколько часов пытаюсь получить данные из firestore
в виде списка, чтобы я мог показать их в предложении панели поиска.
Эта функция ниже будет извлекать данные из firestore
и возвращать некоторые выбранные поля в виде списка.
Future<List> getNewsOnSearchBar() async {
final String _collection = 'news';
final Firestore _fireStore = Firestore.instance;
var newsList = [];
print("1");
Future<QuerySnapshot> getData() async {
print("2");
return await _fireStore.collection(_collection).getDocuments();
}
QuerySnapshot val = await getData();
if (val.documents.length > 0) {
print("3");
for (int i = 0; i < val.documents.length; i++) {
newsList.add(val.documents[i].data["headline"]);
}
} else {
print("Not Found");
}
print("4");
return newsList;
}
А ниже моя строка поиска widget
. Он имеет атрибут searchList
типа List<dynamic>
. Он принимает такие значения, как:
var list = ["a", "b", "c"];
searchList: list
Поэтому я хочу вызвать эту функцию выше getNewsOnSearchBar()
и установите в список атрибут searchList
. Я пробовал ниже, но это не сработало.
Widget _showSearchBar(BuildContext context) {
return FutureBuilder(
future: getNewsOnSearchBar(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasError || !snapshot.hasData) {
return _progressIndicator();
} else {
return GFSearchBar(
searchList: [], //how can I assign the list return from `getNewsOnSearchBar()` here?
searchQueryBuilder: (query, list) {
return list
.where((item) =>
item.toLowerCase().contains(query.toLowerCase()))
.toList();
},
overlaySearchListItemBuilder: (item) {
return Container(
padding: const EdgeInsets.all(3),
child: Text(
item,
style: const TextStyle(fontSize: 18),
),
);
},
onItemSelected: (item) {},
);
}
});
}
Не могли бы вы мне помочь, пожалуйста?