0

这是整个代码。我只是想让心形图标在被选为收藏时改变颜色,然后将保存的收藏项推送到保存的收藏页面。我不知道如何使用流生成器来做到这一点。

错误是:在此代码中,当我单击图像图标时,所有图像的图标都被选为收藏夹。

 class CloudAlbum extends StatefulWidget {

 static const routeName = '/album';

  @override
 _CloudAlbumState createState() => _CloudAlbumState();
}

 class _CloudAlbumState extends State<CloudAlbum> {

  @override
    void initState() {
    super.initState();
    _getCurrentUser();
  }

  final FirebaseAuth _auth = FirebaseAuth.instance;
  FirebaseUser loggedInUser ;
  _getCurrentUser() async {
      final FirebaseUser user = await _auth.currentUser();
      try {
        if (user != null) {
          setState(() {
            loggedInUser = user;
            print(loggedInUser.email);
            print(loggedInUser.uid);
            final email = loggedInUser.email;
            return email;
        });
       }
      } catch(e) {
         print(e);
     }
   }
   @override
   Widget build(BuildContext context) {
    String email = "";
      setState(() {
        email = loggedInUser.email;
      });
    //final imgid = ModalRoute.of(context).settings.arguments as String;
    final favImg = Provider.of<FavImg>(context, listen: false);

    var users = Firestore.instance.collection('abc').document('xyz').collection(email).snapshots();

      return StreamBuilder(
        stream: users,
        builder: (ctx, streamSnapshot) {
          if (streamSnapshot.connectionState == ConnectionState.waiting) {
             return Center(child: CircularProgressIndicator());
          }
          final docs = streamSnapshot.data.documents;
         //List<bool> _isFavorited = List<bool>.generate(docs.length, (_) => false);
          print(docs);
          return GridView.builder(
             itemCount: docs.length,
             itemBuilder: (ctx, index) =>
               Container(
                 padding: EdgeInsets.all(5),
                 child: ClipRRect(
                  borderRadius: BorderRadius.circular(10),
                    child: GridTile(
                        child: GestureDetector(
                          onTap: () {
                            // Navigator.of(context).pushNamed(
                            //   FullImage.routeName);
                          },
                            child: Hero(
                              tag: docs[index]['id'],
                              child: FadeInImage(
                                placeholder: AssetImage('assets/images/placeholder.png'),
                                image: NetworkImage(docs[index]['imgurl']),
                                fit: BoxFit.cover,
                              ),
                            ),
                          ),
                        footer: GridTileBar(
                          backgroundColor: Colors.black26,
                           leading:
                           Consumer<FavImg>(
                             builder: (ctx, favImg, _) =>
                          //       IconButton(
                          //         onPressed: () => setState(()
                          //         => _isFavorited[index]= !_isFavorited[index]),
                          //         icon: _isFavorited[index]
                          //             ? Icon(Icons.star)
                          //             : Icon(Icons.star_border),
                          //       ),
                             IconButton(
                              icon: Icon(
                        
                                favImg.isFavorite ? Icons.favorite : Icons.favorite_border,
                                size: 35.0,
                              ),
                              color: Colors.red,
                              onPressed: () {
                                favImg.toggleFavoriteStatus(
                                  docs[index]['id'],
                                 
                                );
                              },
                            ),
                          ),
                        ),
                      ),
                    ),
                  ),
                  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
                    crossAxisCount: 2,
                    childAspectRatio: 3 / 2,
                    crossAxisSpacing: 1,
                    mainAxisSpacing: 5,
                  ),
                );
            }
          );
        }
  }

favimg.dart

 class FavImg with ChangeNotifier {

  final String imageUrl;
  final String id;
  bool isFavorite;

  FavImg({

    @required this.imageUrl,
    @required this.id,
    this.isFavorite = false,
  });
 void toggleFavoriteStatus(String id) {
  
    isFavorite = !isFavorite;
    notifyListeners();
  }
}

错误是:在此代码中,当我单击图像图标时,所有图像的图标都被选为收藏夹。

4

0 回答 0