【问题标题】:cannot change the favorite icon color when pressed按下时无法更改收藏夹图标颜色
【发布时间】:2020-11-13 20:33:25
【问题描述】:

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

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 其他项目的颜色改变了

【问题讨论】:

    标签: flutter dart


    【解决方案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
    

    如 cmets 中所述,您可以只使用 favorite.isFav 来表示没有 == true 的条件

    我强烈推荐你阅读这篇https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple

    【讨论】:

    • “您正在调用函数,而不是实际的布尔值”是什么意思?此外,favorite.isFav == true 可以缩短为 favorite.isFav
    • 你是对的。我以为我在这种情况下看到了favorite.isFavorited
    【解决方案2】:

    将类中的isFavourite 变量初始化为truefalse。 像这样:-

    class MyFavorite extends ChangeNotifier{
    
    
      bool isFavorite =false;
    
      isFavorited(){
        isFavorite = !isFavorite;
        notifyListeners();
      }
    }
    

    将此行放入build 函数中(如果还没有的话)并删除listen: false

    var favorite = Provider.of&lt;MyFavorite&gt;(context);

    listen:false 表示您不想听即将发生的变化。

    【讨论】:

      猜你喜欢
      • 2015-02-23
      • 2023-02-21
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多