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

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

最佳答案

您需要/应该做一些事情。首先,您需要给 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/

相关文章:

flutter - 表单的 TextFormField 中的多个光标 flutter

android - Flutter firebase 无法直接登陆子页面

javascript - AngularDart 和 AngularJS 互操作性

flutter - 圆形BoxDecoration阴影在Web上而不是在移动设备上被切成盒子形状

flutter - 当 Hive 数据在 FireBaseMessage 的 onBackgroundMessage 处理程序中更新时,如何更新 UI 小部件?

flutter - 在Mac OS上的Flutter的SDK

android - Gradle/Flutter 中的构建错误 : 'Could not resolve all artifacts for configuration' ?

flutter - 是否可以在 flutter web 中为域添加前缀?

Dart Transformer 无法覆盖 Assets

dart - 制作有本地化需求的Dart包