當我在文本欄位中輸入一個值時,我想更新一個歌曲模型串列,在更改的模型上,該值不是使用 set state 方法更新串列
List<SongModel> songs = item.data!;
List<SongModel> filterSongs = [];
//showing the songs
return Column(
mainAxisSize: MainAxisSize.max,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: TextField(
keyboardType: TextInputType.text,
controller: searchController,
onChanged: (value) {
//pass value for the search
getSearch(filterSongs,songs);
},
decoration: InputDecoration(............
getSearch 的功能:-
getSearch(List<SongModel> filterSongs,List<SongModel> songs)
{
var text = searchController.text;
if (text.isEmpty) {
setState(() {
filterSongs = songs;
});
}
print(songs.where((SongModel item) => item.title.toLowerCase().contains(text.toLowerCase())).toList());
print(text);
setState(() {
// search = text;
filterSongs = songs.where((SongModel item) => item.title.toLowerCase().contains(text.toLowerCase())).toList();
});
print(filterSongs.length);
}
此處串列未使用 set state 方法更新。
uj5u.com熱心網友回復:
在您的getSearch方法中,您正在設定傳遞給的引數getSearch的值,而不是該方法之外的串列的值。無論如何,您都應該將filterSongs串列宣告移到您的build方法之外,這樣每次重新構建螢屏時都不會重新宣告它。
class MyScreenClassState extends State<MyScreenClass>{
//Create State method here
List<SongModel> filterSongs = [];
//Build method here
}
getSearch(List<SongModel> songs)
{
var text = searchController.text;
if (text.isEmpty) {
setState(() {
filterSongs = songs;
});
}
print(songs.where((SongModel item) => item.title.toLowerCase().contains(text.toLowerCase())).toList());
print(text);
setState(() {
// search = text;
filterSongs = songs.where((SongModel item) => item.title.toLowerCase().contains(text.toLowerCase())).toList();
});
print(filterSongs.length);
}
uj5u.com熱心網友回復:
如果onChanged方法不適用于您的實作,您可以嘗試這種結構,我想我會為您作業。
final TextEditingController _controller = TextEditingController();
@override
void initState() {
super.initState();
_controller.addListener(_onControllerChange);
}
@override
void dispose() {
super.dispose();
_controller.dispose();
}
void _onControllerChange() async {
.....
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/520198.html
標籤:扑镖哎呀颤振列表视图
下一篇:生成器模式build()方法輸出
