Flutter 和 Getx:如何将参数从 UI 传递给 Getx 控制器?
Flutter and Getx: How to Pass parameters from UI to Getx controller?
我有这个 Getx 控制器用于从数据库中读取 Post 的内容:
class ReadSinglePostController extends GetxController {
var isLoading = true.obs;
var posts = Post(
postID: 1,
userID: 0,
thumbnail: 'thumbnail',
imageList: 'imageList',
title: 'title',
description: 'description',
createdTime: DateTime.now())
.obs; //yes this can be accessed
var postid = 2.obs; //I want this value to change when I click a post in the UI
@override
void onInit() {
super.onInit();
readPost(postid);
}
updateID(var postID) {
postid.value = postID;
print('im print ${postid.value}');
}//should update postid when a post is clicked in the UI
Future readPost(var postID) async {
try {
isLoading(true);
var result = await PostsDatabase.instance.readPost(postID);
posts.value = result;
} finally {
isLoading(false);
}
}
}
但我现在面临的问题是:要从数据库中读取特定的 Post,我需要 postID
参数。而且你可以想象,当我点击UI中的特定Post时可以记录这个参数,但是我如何将那个参数传递给这个Getx控制器呢?或者也许我做错了整件事?
您可以在 Ui 上使用您的控制器实例。
例如,在您调用控制器的小部件上:
final ReadSinglePostController _controller = Get.put(ReadSinglePostController());
//and when you need to change you do like this:
_controller.updateID(newId);
在 updateID 方法中可以调用 load 方法:
updateID(var postID) {
postid.value = postID;
print('im print ${postid.value}');
readPost(postID);
}
对于可能正在使用obs的朋友,可以进行如下操作:
在控制器中,可以定义
var postid = 0.obs
然后从视图中添加
controller.postid.value = 20;
我有这个 Getx 控制器用于从数据库中读取 Post 的内容:
class ReadSinglePostController extends GetxController {
var isLoading = true.obs;
var posts = Post(
postID: 1,
userID: 0,
thumbnail: 'thumbnail',
imageList: 'imageList',
title: 'title',
description: 'description',
createdTime: DateTime.now())
.obs; //yes this can be accessed
var postid = 2.obs; //I want this value to change when I click a post in the UI
@override
void onInit() {
super.onInit();
readPost(postid);
}
updateID(var postID) {
postid.value = postID;
print('im print ${postid.value}');
}//should update postid when a post is clicked in the UI
Future readPost(var postID) async {
try {
isLoading(true);
var result = await PostsDatabase.instance.readPost(postID);
posts.value = result;
} finally {
isLoading(false);
}
}
}
但我现在面临的问题是:要从数据库中读取特定的 Post,我需要 postID
参数。而且你可以想象,当我点击UI中的特定Post时可以记录这个参数,但是我如何将那个参数传递给这个Getx控制器呢?或者也许我做错了整件事?
您可以在 Ui 上使用您的控制器实例。
例如,在您调用控制器的小部件上:
final ReadSinglePostController _controller = Get.put(ReadSinglePostController());
//and when you need to change you do like this:
_controller.updateID(newId);
在 updateID 方法中可以调用 load 方法:
updateID(var postID) {
postid.value = postID;
print('im print ${postid.value}');
readPost(postID);
}
对于可能正在使用obs的朋友,可以进行如下操作:
在控制器中,可以定义
var postid = 0.obs
然后从视图中添加
controller.postid.value = 20;