尝试在“未来”构建器中使用“喜欢的按钮”以及下面的许多其他小部件,
onPressed: () {
if (aleadyLiked.length > 0) {
unlike(profileId);
} else {
like(profileId);
}
setState(() {});
},
这就是我未来的构建者的开始方式,
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: getProfile(profileId),
builder: (context, snapshot) {
=======Other widgets here======
}
问题 on按下了类似的图标按钮,我正在执行setState(),这将导致整个Future构建器重新加载,是否有一种方法可以更新Like按钮和Like计数,我当时在考虑使用一些客户端计数器逻辑来回调实际的数据库更新。请帮忙。
可以实现initState()上的加载配置文件部分,但是如何处理更新和反映“喜欢”,是否可以仅重新加载“喜欢”按钮区域?
答案 0 :(得分:0)
您不应该这样获得用户配置文件,但是您可以做的是,您可以在initState中获取用户配置文件,并且在不加载数据之前,您可以显示任何内容的加载器。
类似这样的事情...
User _user;
Future<User> getUserProfile(profileId) async{
///Todo : Implementation of get User Profile
}
@override
void initState() {
// TODO: implement initState
super.initState();
getUserProfile("userId").then((user){
setState(() {
_user =user;
});
})
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: this._user == null ? CircularProgressIndicator() : UserWidget(),
);
}
答案 1 :(得分:0)
这就是我最终实现它的方式,
void initState() {
getProfile(profileId).then((user){
setState(() {
_profile =user;
_counter =_profile.profilelikes.length;
_isAlreadyLiked=_profile.allreadyliked.length > 0;
});
});
super.initState();
}
而OnPressed()是
onPressed: () {
if (_isAlreadyLiked) {
unlike(profileId);
setState(() {
_counter--;
_isAlreadyLiked=false;
});
} else {
like(profileId);
setState(() {
_counter++;
_isAlreadyLiked=true;
});
}
},
缺点:其他用户的喜欢只会在Wiget重新加载上体现出来,暂时对我来说还可以。