我想在按下时更改收藏夹图标及其颜色
class MyFavorite extends ChangeNotifier{
bool isFavorite ;
isFavorited(){
isFavorite = !isFavorite;
notifyListeners();
}
}
var favorite = Provider.of<MyFavorite>(context , listen: false);
GestureDetector(
onTap: () {
favorite.isFavorited();
},
child: Icon(favorite.isFavorite == true ? Icons.favorite :Icons.favorite_border, color: favorite.isFavorite == true ? Colors.red : Colors.white,
)),
当我单击时尝试将监听设置为true其他项目的颜色已更改
最佳答案
您需要/应该做一些事情。首先,您需要给 bool 值一个初始值。其次,建议将您的属性修改为 getter,但这样做,首先将它们设为私有(private)(由下划线表示)是有意义的。建议这样做,这样它们将无法从外部访问和修改。最后,您需要取下listen: false
因为您实际上是在尝试通过重建小部件来更改 UI。
bool _isFavorite = false;
bool get isFav => _isFavorite;
isFavorited(){
_isFavorite = !_isFavorite;
notifyListeners();
}
var favorite = Provider.of<MyFavorite>(context);
GestureDetector(
onTap: () {
favorite.isFavorited();
},
child: Icon(favorite.isFav == true ? Icons.favorite :Icons.favorite_border, color: favorite.isFav == true ? Colors.red : Colors.white,
)),
enter code here
如评论中所述,您可以使用 favorite.isFav
对于没有 == true
的条件我强烈建议您阅读本文https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple
关于flutter - 按下时无法更改收藏夹图标颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63065725/