эй, спасибо за проверку моего вопроса, я делаю приложение, которое подключается к API и извлекает данные json примерно так:
я был пытаясь заставить систему фильтрации работать так, например, список можно отсортировать по определенной серии и другим параметрам, у меня есть два списка в коде, один для всех результатов API, называемый _userdetails, и один для результата поиска, называемого _searchresult. .
Моя цель состоит в том, чтобы фильтры и панель поиска работали синхронно c, поэтому, например, вы можете отфильтровать серию, называемую одним куском, а затем отфильтровать этот новый список с другими фильтрами, чтобы сузить результаты и даже использовать панель поиска в этих новых списках.
на данный момент у меня есть фильтры, работающие до такой степени, что если серия выбрана как Dragonball, он выберет всех персонажей Dragon Ball, но один раз новый фильтр или поиск используется, он просто сбрасывает список, вот код для выпадающего
new Row(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
// Text("Select a series"),
new DropdownButton<String>(
hint: Text("Series"),
// value: null,
items: _fieldList.map((value){
return DropdownMenuItem<String>(
value: value.series,
child: Container(
width: 100,
child: new Text(value.series),
// height: 5.0,
),
);
}).toList(),
onChanged: (String val) {
_selectedText = val;
setState(() {
// _searchResult.clear();
// _searchResult.removeWhere((userDetail) => userDetail.series != _selectedText);
// _newList.clear();
_selectedText = val;
_userDetails.forEach((userDetail) {
if(userDetail.series.contains(_selectedText)){
userDetail.remove((userDetail) => userDetail.series != _selectedText);
_searchResult.add(userDetail);}
if(_searchResult.contains(_selectedText))
_searchResult.removeWhere((userDetail) => userDetail.series != _selectedText);
// _userDetails.where((f) => f.series.contains(_selectedText)).toList(); //apples
print(_searchResult.length);
});
print(_selectedText);
});
},
),
new DropdownButton<String>(
hint: Text("Class"),
// value: null,
items: _fieldList.map((value){
return DropdownMenuItem<String>(
value: value.classs,
child: new Text(value.classs),
);
}).toList(),
onChanged: (String val) {
_selectedText = val;
setState(() {
_searchResult.removeWhere((userDetail) => userDetail.classs != _selectedText);
_userDetails.forEach((userDetail) {
if (userDetail.classs.contains(_selectedText))
///loops thrpugh each user detail and add where selectedtext = whatever
// _searchResult.removeWhere((_searchResult) => userDetail.classs != _selectedText);
_searchResult.removeWhere((userDetail) => userDetail.classs != _selectedText);
_searchResult.add(userDetail);
// _userDetails.where((f) => f.classs.contains(_selectedText)).toList(); //apples
/// _searchResult.add(userDetail);
});
// _searchResult.add(userDetail);
print(_selectedText);
//_searchResult.remove(userDetail.classs.)
//_newList.add(userDetail);
print(_searchResult.length);
// });
print(_selectedText);
});
},
),
SizedBox(
height: 5.0,
),
Text('Selected: ${_selectedText}'),
],
),
вот код для т listview
new Expanded(
child: _searchResult.length != 0 || controller.text.isNotEmpty
? new ListView.builder(
itemCount: _searchResult.length,
itemBuilder: (context, i) {
return new Card(
child: new ListTile(
leading: new CircleAvatar(backgroundImage: new NetworkImage("https://ochd.co.uk/db/puti/Assets/Portraits/"+_searchResult[i].portrait,),),
title: new Text(_searchResult[i].name),
subtitle: new Text(_searchResult[i].classs),
onTap: () {
Navigator.push(context, new MaterialPageRoute(builder: (context) => DetailPage(_searchResult[i])));},
),
margin:
const EdgeInsets.all(0.0),
);
},
)
: new ListView.builder(
itemCount: _userDetails.length,
itemBuilder: (context, index) {
return new Card(
child: new ListTile(
leading: new CircleAvatar(backgroundImage: new NetworkImage("https://ochd.co.uk/db/puti/Assets/Portraits/"+_userDetails[index].portrait,),),
title: new Text(_userDetails[index].name),
subtitle: new Text(_userDetails[index].classs),
trailing: new CircleAvatar(backgroundImage: new NetworkImage("https://ochd.co.uk/db/puti/Assets/"+_userDetails[index].type,),),
onTap: () {
Navigator.push(context, new MaterialPageRoute(builder: (context) => DetailPage(_userDetails[index])));},
),
margin: const EdgeInsets.all(0.0),
);
},
),
),
я немного озадачен LOL