Cod*_*tel 5 dart hybrid-mobile-app flutter getx flutter-getx
我使用 getx 作为我的 flutter 应用程序的状态管理。但是我在更新列表中的值时遇到了困难。所以我有一个参数为 isFollowing 的用户模型。当我点击一个按钮时,isFollowing 变量会改变,颜色也会更新。但它并没有发生。我使用 Obx 作为我的小部件,因为我已经在开始时注入了状态。获取数据并在前端显示它一切正常。但是当我想更改列表中的值时,它没有更新。我的最小可重复示例
家庭控制器
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
模型
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"],
);
Run Code Online (Sandbox Code Playgroud)
看法
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);
},
),
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
用户控件
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
))
);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 14
它对我有用。对反应列表进行更改后,添加示例:
if (users!= null) {
userslist.value= users;
userlist.refresh();
}
Run Code Online (Sandbox Code Playgroud)
在您的fetchUsers方法中而不是使用
userslist.value= users;
Run Code Online (Sandbox Code Playgroud)
使用
userslist.assignAll(users);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2762 次 |
| 最近记录: |