【发布时间】:2019-04-26 02:08:36
【问题描述】:
我在有状态小部件中有一个 listview.builder,并且我为该项目 (ImageCard) 创建了一个单独的有状态小部件。 在 ImageCard 小部件中,当我单击它时,我有一个喜欢按钮,它的颜色变为红色(喜欢),灰色(不喜欢)。 问题是当我向下滚动并返回时,颜色始终为灰色,这意味着没有保存任何状态! 如何通知父有状态小部件保持状态?
父状态小部件
@override
Widget build(BuildContext context) {
return _buildListView(models, _scrollController);
}
Widget _buildListView(
List<PhotoModel> models, ScrollController scrollController) {
return Container(
child: ListView.builder(
controller: scrollController,
itemCount: models.length,
itemBuilder: (context, int index) {
if (index == models.length - 1) {
return SpinKitThreeBounce(
color: Colors.purple,
size: 30.0,
);
} else {
return ImageCard(
models[index].regularPhotoUrl,
models[index].mediumProfilePhotoUrl,
models[index].name,
models[index].color);
}
}));
}
子状态小部件
class ImageCard extends StatefulWidget {
final String imageUrl, userProfilePic, userName, color;
ImageCard(this.imageUrl, this.userProfilePic, this.userName, this.color);
@override
_ImageCardState createState() => _ImageCardState();
}
class _ImageCardState extends State<ImageCard> {
bool isLiked = false, isFollowing = false;
@override
Widget build(BuildContext context) {
return new Card( ....
void _onLikedBtnClicked() {
setState(() {
if (isLiked)
isLiked = false;
else {
isLiked = true;
}
});
}
【问题讨论】:
-
那么您在 ImageCard 中的哪个位置保存了
isLiked属性?它是指color属性吗? -
它显示在我的代码中,我将它保存在状态类中
-
如果 isLiked 为真,我将 btn 的颜色设置为红色
标签: dart flutter flutter-layout