这是整个代码。我只是想让心形图标在被选为收藏时改变颜色,然后将保存的收藏项推送到保存的收藏页面。我不知道如何使用流生成器来做到这一点。
错误是:在此代码中,当我单击图像图标时,所有图像的图标都被选为收藏夹。
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();
}
}
错误是:在此代码中,当我单击图像图标时,所有图像的图标都被选为收藏夹。