按下时无法更改收藏夹图标的颜色

时间:2020-07-24 02:09:32

标签: flutter dart

我想在按下时更改收藏夹图标及其颜色

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时 其他项目的颜色已更改

2 个答案:

答案 0 :(得分:1)

您需要/应该做一些事情。首先,您需要给布尔值一个初始值。其次,建议将您的属性修改为 getters ,但是这样做时,首先将它们设为私有(由下划线表示)是有意义的。建议这样做,以使其无法从外部进行访问和修改。最后,您需要卸下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

答案 1 :(得分:0)

将类中的PreBar <- PreBar[which(PreBar$Freq!=0),] # remove your zeros library(ggplot2) ggplot(data=PreBar, aes(x=Age, y=Freq, fill=PreCond)) + geom_bar(position=position_dodge2(preserve='single'), stat="identity") + theme_light() + ylab("Percentage of Pre-existing Condition Among Positives") + xlab("Age Category") 变量初始化为isFavouritetrue。 像这样:-

false

将此行放入class MyFavorite extends ChangeNotifier{ bool isFavorite =false; isFavorited(){ isFavorite = !isFavorite; notifyListeners(); } } 函数中(如果尚不存在)并删除build

listen: false

var favorite = Provider.of<MyFavorite>(context);意味着您不想听即将发生的变化。