Android 我能';更新列表视图
这是我第一次在论坛上。。。我对颤振没有太多经验,但我正在我的一个项目中使用它 我需要创建多选列表视图,但无法更新图标。设置状态在我认为应该使用的地方是不允许的 我的Listview通过RESTAPI调用加载数据Android 我能';更新列表视图,android,flutter,Android,Flutter,这是我第一次在论坛上。。。我对颤振没有太多经验,但我正在我的一个项目中使用它 我需要创建多选列表视图,但无法更新图标。设置状态在我认为应该使用的地方是不允许的 我的Listview通过RESTAPI调用加载数据 class _SelectSongScreenState extends State<SelectSongScreen> { @override Widget build(BuildContext context) { // TODO: implement b
class _SelectSongScreenState extends State<SelectSongScreen> {
@override
Widget build(BuildContext context) {
// TODO: implement build
return new Scaffold(
appBar: AppBar(
title: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment:CrossAxisAlignment.start,
children: [
Text("Adicionar Músicas"),
Text(widget.playlistName,style: TextStyle(fontSize: 18.0, color: Colors.orange),)
]
),
actions: <Widget>[
IconButton(icon: Icon(Icons.save_alt),
]),
body: FutureBuilder(
future: fetchMySongs(http.Client(), 1),
builder: (context, snapshot){
if (snapshot.hasError) print(snapshot.error);
return snapshot.hasData
? SongList2(songs: snapshot.data)
: Center(child: CircularProgressIndicator());
}),
);
}
}
class SongList2 extends StatelessWidget {
final List<Song> songs;
SongList2({Key key, this.songs}) : super(key: key);
@override
Widget build(BuildContext context) {
// TODO: implement build
return ListView(
children: _buildListItemsFromSongs(),
);
}
List<GestureDetector> _buildListItemsFromSongs(){
int index = 0;
var selectedSong = new Song();
var songsSelected = new List<String>();
var songsSelectedId = new List<String>();
bool _isSelected = true;
int _selectedCount = 0;
return songs.map((song){
var boxDecoration;
_isSelected = false;
var container = Container(
decoration: boxDecoration,
child: new Row(
children: <Widget>[
new Column(
children: <Widget>[
IconButton(
icon: (_isSelected ? Icon(Icons.remove_circle,size: 40,) : Icon(Icons.add_circle,size: 40)),
color: (_isSelected ? Colors.red : Colors.green),
onPressed: () {
//setState(){ <================================================
print("You tapped in button ${song.name}");
selectedSong = song;
var _pos = songsSelected.indexOf(song.name);
if (_pos == -1){
songsSelected.add(song.name);
songsSelectedId.add(song.id.toString());
}else{
songsSelected.removeAt(_pos);
songsSelectedId.removeAt(_pos);
}
for (int i = 0;i <= songsSelected.length -1; i++){
if (songsSelected[i] == song.name) {
boxDecoration = new BoxDecoration(
color: Colors.grey[300]
);
_isSelected = true;
}
}
//}); <================================================
},
),
],
),
new Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding:
const EdgeInsets.fromLTRB(12.0, 12.0, 12.0, 6.0),
child: Text(
song.name,
style: TextStyle(
fontSize: 20.0, fontWeight: FontWeight.bold),
),
),
Padding(
padding:
const EdgeInsets.fromLTRB(12.0, 6.0, 12.0, 12.0),
child: Text(
song.singer,
style: TextStyle(fontSize: 18.0),
),
),
],
),
],
),
);
index = index + 1;
final gestureDetector = GestureDetector(
child: container,
onTap:(){
}
);
return gestureDetector;
}).toList();
}
}
class\u选择SongScreenState扩展状态{
@凌驾
小部件构建(构建上下文){
//TODO:实现构建
归还新脚手架(
appBar:appBar(
标题:专栏(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
文本(“Adicionar Músicas”),
文本(widget.playliName,样式:TextStyle(fontSize:18.0,颜色:Colors.orange),)
]
),
行动:[
图标按钮(图标:图标(Icons.save_alt),
]),
正文:未来建设者(
future:fetchMySongs(http.Client(),1),
生成器:(上下文,快照){
if(snapshot.hasError)打印(snapshot.error);
返回snapshot.hasData
?歌曲列表2(歌曲:快照数据)
:居中(子项:循环压缩机指示器());
}),
);
}
}
类SongList2扩展了无状态小部件{
最终名单歌曲;
SongList2({Key-Key,this.songs}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
//TODO:实现构建
返回列表视图(
子项:\ u buildListItemsFromSongs(),
);
}
列表_buildListItemsFromSongs(){
int指数=0;
var selectedSong=新歌曲();
var songsSelected=新列表();
var songsSelectedId=新列表();
bool_isSelected=true;
int _selectedCount=0;
返回歌曲。映射((歌曲){
室内装饰;
_isSelected=false;
var container=容器(
装饰:盒子装饰,
孩子:新的一排(
儿童:[
新专栏(
儿童:[
图标按钮(
图标:(_isSelected?图标(图标。删除_圈,大小:40),):图标(图标。添加_圈,大小:40)),
颜色:(_isSelected?Colors.red:Colors.green),
已按下:(){
//setState(){必须将SongList2类更改为有状态小部件,然后才能使用setState方法更改图标