如何解决如何使用 Provider 请求或更新服务器? #Dart #Flutter
向整个社区问好;当我发帖时,我会寻求您的帮助以从提要中获取更新;在这种情况下,具体来说,我有一个社交网络的代码,其中使用 Provider,我想传递一个小部件,包括给一个帖子的喜欢的初始和未来数据。当显示应用程序的时间线时,每个帖子都会正确读取到该时刻收到的点赞数,我的问题是如果我点赞帖子,我可以将数据上传到服务器(getStream),但我不一旦上传喜欢的内容,不知道如何在小部件中更新它。代码如下:
这是我要更新的小部件:
class LikesCommentsShareIcons extends StatefulWidget {
final Activity activity;
const LikesCommentsShareIcons({Key key,this.activity}) : super(key: key);
@override
_LikesCommentsShareIconsState createState() => _LikesCommentsShareIconsState();
}
class _LikesCommentsShareIconsState extends State<LikesCommentsShareIcons> {
bool click = false;
int likes;
int comments;
@override
Widget build(BuildContext context) {
final activityProvider = Provider.of<ActivityProvider>(context);
int likes = activityProvider.likes;
int comments = activityProvider.comments;
Color color = click ? Theme.of(context).colorScheme.tomatoRed : Theme.of(context).primaryColor;
return Consumer<ActivityProvider>(
key: widget.key,builder: (context,notifier,_) {
return Column(
children: [
ReactionCounters(
activity: activityProvider.activity,color: color,likes: '$likes',comments: '$comments',),const Divider(
color: Colors.black54,height: 5,Padding(
padding: const EdgeInsets.symmetric(vertical: 10),child: Row(
crossAxisAlignment: CrossAxisAlignment.center,mainAxisAlignment: MainAxisAlignment.spaceAround,children: [
GestureDetector(
onTap: () async {
if (click == false) {
click = true;
await FeedService.postReaction(context,kind: 'like',activityId: widget.activity.id);
} else if (click == true) {
click = false;
}
setState(() {});
},child: !click
? FadeInDown(
duration: const Duration(milliseconds: 500),from: 1,child: const Icon(
CupertinoIcons.heart,)
: ElasticIn(
duration: const Duration(milliseconds: 500),//from: 5,child: Icon(
CupertinoIcons.heart_solid,color: Theme.of(context).colorScheme.tomatoRed,)),GestureDetector(onTap: () {},child: const Icon(CupertinoIcons.chat_bubble)),const Icon(CupertinoIcons.paperplane),],CommentList(
comments: widget.activity.latestReactions['comment'],activityId: widget.activity.id,)
],);
});
}
}
所以我有我的 Provider 类,它导入一个名为 Activity 的模型:
class ActivityProvider with ChangeNotifier {
Activity activity;
int comments;
int likes;
int dislike;
ActivityProvider(this.activity) {
comments = activity.reactionCounts['comment'] ?? 0;
likes = activity.reactionCounts['like'] ?? 0;
dislike = activity.reactionCounts['dislike'] ?? 0;
}
Activity get activityProvider => this.activity;
set activityProvider(Activity activityProvider) {
activityProvider = activity;
notifyListeners();
}
我是这样实现的:
class ActivityContainer extends StatelessWidget {
final Activity activity;
ActivityContainer({@required this.activity});
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider<ActivityProvider>(create: (_) => new ActivityProvider(activity)),child: FeedsCardModel(
child: Column(
children: [
ActivityContent(
activity: activity,);
}
}
class ActivityContent extends StatelessWidget {
final Activity activity;
ActivityContent({@required this.activity});
@override
Widget build(BuildContext context) {
final type = activity.type;
//final subType = activity.subType;
return SingleTextPostCard(
activity: activity,);
}
}
我会感谢您帮助解决这些问题,并且仍在学习 Flutter。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。