共有3个下拉菜单:左侧用于根据品牌(壳牌,星号等)进行过滤,中间用于根据距离进行排序(升序和降序),右侧用于根据设施进行过滤(ATM,厕所等)。如果3个下拉菜单中的所有下拉列表均显示“全部”,则将显示原始列表。否则...一些情况。
仅过滤“ Esso”:
过滤具有ATM的“ Esso”:
更改这些下拉菜单的值时,列表必须相应地处于filterend位置。到目前为止,我已经完成了处理设施下拉菜单的工作。它有很多嵌套的if-else块,很容易让我感到困惑,例如:
else if (dropdownBrand == "All" && dropdownDistance != "All"){
if (dropdownDistance == "Near to far"){
_displayedList = _petrolList;
_displayedList.sort((a,b) => a.price.compareTo(b.price));
_displayedList = _displayedList
.where((PetrolItem item) => item.facilities.toString().toLowerCase() == dropdownFacilities.toString().toLowerCase())
.toList();
}
else {
_displayedList = _petrolList;
_displayedList.sort((a,b) => b.price.compareTo(a.price));
_displayedList = _displayedList
.where((PetrolItem item) => item.facilities.toString().toLowerCase() == dropdownFacilities.toString().toLowerCase())
.toList();
}
}
else if (dropdownBrand != "All" && dropdownDistance == "All"){
_displayedList = _petrolList;
_displayedList = _displayedList
.where((PetrolItem item) => item.brand.toString().toLowerCase() == dropdownBrand.toString().toLowerCase() && item.facilities.toString().toLowerCase() == dropdownFacilities.toString().toLowerCase())
.toList();
}
else if (dropdownBrand == "All" && dropdownDistance == "All"){
_displayedList = _petrolList;
_displayedList = _displayedList
.where((PetrolItem item) => item.facilities.toString().toLowerCase() == dropdownFacilities.toString().toLowerCase())
.toList();
}
完整代码:here
如何简化排序和过滤代码?
答案 0 :(得分:0)
尝试如下所示:
_displayedList = getListByBrand(brand:_selectedBrand)
_displayedList = getListByFacility(facility: _selectedFacility)
_displayedList = getListListByDistance(distance: _selectedDistance)
List<outlet> getListByBrand(String brand) {
if (brand == '') {
return _displayedList ;
} else {
// Apply your filter here.
return _filteredList ;
}
}
List<outlet> getListByFacility(String facility) {
if (facility == '') {
return _displayedList ;
} else {
// Apply your filter here.
return _filteredList ;
}
}
ist<outlet> getListListByDistance(String distance) {
if (distance == '') {
return _displayedList ;
} else {
// Apply your filter here.
return _filteredList ;
}
}