如何解决Getx Flutter - 更新列表中的项目不是反应性的
我使用 getx 作为我的 flutter 应用程序的状态管理。但是我在更新列表中的值时遇到了困难。所以我有一个参数为 isFollowing 的用户模型。当我点击一个按钮时,isFollowing 变量会改变,颜色也会更新。但它并没有发生。我使用 Obx 作为我的小部件,因为我已经在开始时注入了状态。获取数据并在前端显示它一切正常。但是当我想更改列表中的值时,它没有更新。我的最小可重现示例
HomeController
class HomeController extends GetxController {
var userslist = List<User>().obs;
@override
void onInit() {
fetchUsers();
super.onInit();
}
void fetchUsers() async {
var users= await ApiService().getapidata('${usersurl}feed');
if (users!= null) {
userslist.value= users;
}
}
}
模型
class User {
User({
this.id,this.user_name,this.profile_picture,this.isFollowing,});
int id;
String user_name;
String profile_picture;
bool isFollowing;
factory User.fromJson(Map<String,dynamic> json) => User(
id: json["id"],user_name: json["user_name"],profile_picture: json["profile_picture"],isFollowing: json["is_following"],);
查看
class HomeScreen extends StatelessWidget {
final HomeController homeController = Get.put(HomeController());
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
physics: ScrollPhysics(),child: Obx(
() => ListView.builder(
shrinkWrap: true,physics: NeverScrollableScrollPhysics(),itemCount: homeController.usersList.length,itemBuilder: (context,index) {
return UserWidget(homeController.usersList[index],index);
},),);
}
}
UserWidget
class UserWidget extends StatelessWidget {
final User user;
final int index;
UserWidget (this.user,this.index);
@override
Widget build(BuildContext context) {
return InkWell(
onTap : ()=> user.isFollowing = true // When I click on this the container it shall be updated to yellow
child: Obx( () => Container(
decoration: const BoxDecoration(color: user.isFollowing ? Colors.yellow : Colors.black ),// Here is the update I wanna make
))
);
}
}
解决方法
在您的 fetchUsers 方法中而不是使用
userslist.value= users;
使用
userslist.assignAll(users);
,
请为此使用 GetBuilder。
onTap : (){
user.isFollowing = true // When I click on this the container it shall be updated to yellow
controller.update()
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。