body: Container(
child: FutureBuilder(
future: _getCandidates(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.data == null) {
return Container(
child: Center(
child: Text("Loading..."),
),
);
} else {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
final bool alreadySaved = _saved.contains(snapshot.data[index]);
return ListTile(
title: Text(snapshot.data[index].name,
style: TextStyle(
fontSize: 20.0,
fontWeight: FontWeight.bold,
)),
subtitle: Text(snapshot.data[index].province +
' | ' +
snapshot.data[index].district +
' | ' +
snapshot.data[index].party),
trailing: Icon(
alreadySaved
? Icons.favorite
: Icons.favorite_border,
color: alreadySaved ? Colors.red : null,
),
onTap: () {
setState(() {
if (alreadySaved) {
_saved.remove(snapshot.data[index]);
} else {
_saved.add(snapshot.data[index]);
}
});
},
);
});
}
}))
Я пытаюсь воссоздать «Ваше первое приложение флаттера, часть 2», не создавая отдельный виджет _buildRow и не используя собственный файл json. Приведенный выше код устанавливает состояние значка сердца красным на кране, но сразу отменяет действие, изменяя значок сердца на значение по умолчанию.