Flutter与Getx开发:如何将UI层获取的postID参数传递给Getx控制器?
Getx控制器传递postID实现方案
你当前逻辑的核心问题是:onInit仅会在控制器首次初始化时执行1次,你写的updateID方法仅更新了postid的值,没有触发重新拉取对应post数据的逻辑,只要补全触发逻辑或者用路由传参的方式就能解决,两种常用实现方式如下:
方式1:UI点击时直接调用控制器方法(适合同页切换帖子加载的场景)
你可以直接修改updateID方法,ID更新后自动触发数据拉取:
updateID(var postID) { postid.value = postID; print('im print ${postid.value}'); // 新增这行,ID更新后自动拉取对应帖子内容 readPost(postid.value); }
之后在UI层点击帖子的回调中,直接调用该方法传入你点击拿到的postID即可:
GestureDetector( onTap: () { // 获取控制器实例 final controller = Get.find<ReadSinglePostController>(); // 替换为你点击列表项拿到的真实postID int clickedPostId = 5; controller.updateID(clickedPostId); }, child: PostListItem() )
方式2:路由传参(适合点击帖子跳转到详情页的场景)
如果是点击列表跳转到单独的帖子详情页,可以直接用Getx自带的路由传参能力传递postID:
- 列表页跳转时携带参数:
// clickedPostId为你点击拿到的真实帖子ID Get.to(const PostDetailPage(), arguments: clickedPostId);
- 修改控制器的
onInit方法,读取路由传递的参数拉取数据:
@override void onInit() { super.onInit(); // 读取路由携带的postID postid.value = Get.arguments as int; readPost(postid.value); }
可选优化点
你当前初始化posts时设置了默认的占位数据,如果不需要可以改成可空类型,避免无效数据展示:
Rx<Post?> posts = null.obs;
内容的提问来源于stack exchange,提问作者BigPP
相关产品推荐
相关产品推荐

