Я получил список из пожарного магазина. Как пример: рестораны.
[restaurant 1 with all info, restaurant 2 w a i, restaurant 3 w a i]
Я отображаю его в виде списка, и все работает.
List<Post> filteredPosts;
List<Post> posts;
class _DealsfState extends State<Dealsf> {
@override
void initState() {
super.initState();
getDeals();
}
void getDeals() async {
QuerySnapshot snapshot = await Firestore.instance
.collection('deals')
.document('${widget.stad.toLowerCase()}')
.collection('deals')
.where('on${widget.day}Night', isEqualTo: true)
.where('endTime', isGreaterThanOrEqualTo: currentHour())
.orderBy('endTime', descending: false)
.getDocuments();
List<Post> almostposts =
snapshot.documents.map((doc) => Post.fromDocument(doc)).toList();
setState(() {
posts = almostposts;
});
}
buildTimeline() {
if (filteredPosts == null) {
if (posts == null) {
return Container(
child: Text(
"loading",
style: TextStyle(color: Colors.red),
),
);
} else if (posts.isEmpty) {
return Text("No posts");
} else {
return ListView(children: posts);
}
} else {
if (filteredPosts.isEmpty) {
return Text("No posts");
} else {
return ListView(children: filteredPosts);
}
}
}
void showFilterDialog({BuildContext context}) {
showDialog(
context: context,
builder: (BuildContext context) => CalendarPopupView(
barrierDismissible: true,
initialEndDate: null,
initialStartDate: null,
onApplyClick: (DateTime startData, DateTime endData) {
setState(() {
});
},
onCancelClick: () {},
),
);
}
@override
Widget build(BuildContext context) {
double screenHeight = MediaQuery.of(context).size.height;
double screenWidth = MediaQuery.of(context).size.width;
return Flexible(
child: Container(
width: screenWidth * (9 / 10),
height: screenHeight * (3.65 / 5),
child: Stack(
children: <Widget>[
buildTimeline(),
Container(child: button that opens the 'showFilterDialog')
Я запрограммировал механизм фильтра, например:
filteredList = initialList.where((snapshot) => snapshot.4stars == true).toList();
Но когда я отображаю отфильтрованный список (в качестве замены initalList), происходят действительно странные вещи, иногда он показывает неправильный элемент или дублирует элемент.
Я думал, что сделал ошибку смеханизм фильтрации, но когда я передаю фильтрованный список в новое «окно» с помощью Flutter Navigator, он прекрасно показывает элементы, которые я отфильтровал в новом окне.
Что я делаю неправильно? Есть ли возможность перестроить класс виджетов statefull, чтобы он мог отображать правильно отфильтрованные элементы?
Спасибо!