I am using getx as my statemanagment for my flutter app. But I am having difficulties by updating the values in a list. So I have a usermodel with a parameter of isFollowing. When I click on a button the isFollowing variable shall change and the color should be updated. But it is not happening. I am using Obx as my widget, as I already injected the state at the beginning. It is all working fine with fetching the data and displaying it on the frontend. But when I wanna change the values in my list, it is not updating. My minimal reproducible example
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;
}
}
}
Model
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"],
);
View
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
))
);
}
}
userslist.value= users;
touserlist.addAll(users)
– Demoteuserlist.value = users
touserlist(users)
and passListView.builder
a unique key it worked for me – Demote