У меня есть приложение, которое использует случайные данные из API-интерфейса, и у меня есть кнопка с плавающей запятой, чтобы добавить текущие данные в избранное. Когда я щелкаю по кнопке «Избранное», значок должен меняться в соответствии со значением bool (он назван записанным ( ) в моем примере), но я могу сделать это только с помощью setState (чтобы перестроить страницу), но на этот раз данные всей страницы меняются, потому что мой ответ API случайный с тем же URL-адресом, я имею в виду каждый раз, когда я добавляю или удаляю текущие данные при перезагрузке страницы с другими случайными данными, мне нужно обойти эту перезагрузку данных (часть getData () в моем примере) и просто обновить sh значок моей любимой кнопки, есть ли способ сделать это, я попытался использовать другой FutureBuilder для плавания Кнопка и setState только для записи (), но все тот же результат?
Мое дерево конструирования выглядит так:
@override
Widget build(BuildContext context) {
return Material(
child: FutureBuilder<Payload>(
future: getData(_name),
builder: (context, snapshot) {
Future<bool> recorded()async {
var checkFavs = await favoriteDao.findRecordById(snapshot.data.id);
return checkFavs == null ? Future<bool>.value(true) : Future<bool>.value(false);
}
if (snapshot.connectionState != ConnectionState.done && firstRun == true)
return Center(child: Image.asset("images/dice.gif"));
if (snapshot.connectionState == ConnectionState.done)
if (snapshot.hasError)
{
return Scaffold(...) // error page
}
return Scaffold(..
....
....
floatingActionButton: FutureBuilder(
future: recorded(),
builder: (context, AsyncSnapshot snapshots){
return FloatingActionButton(
onPressed: () async{
firstRun = false;
var myrecord = Myrecord(//data details for record//)
var checkFavs = await favoriteDao.findRecordById(snapshot.data.id);
if (checkFavs == null) {await favoriteDao.insertRecord(myrecord);}
else {await favoriteDao.deleteById(snapshot.data.id);}
setState(() {
recorded();
});
},
child: snapshots.hasData && snapshots.data ? Icon (Icon ( Icons.favorite_border,) : Icon (Icons.favorite,)
};
)
)
...