使用 getx 控制器时,getter "some variable" 没有为类型 'Rx<some class>' 定义
The getter "some variable" isn't defined for the type 'Rx<some class>' while using getx controller
我正在尝试为我的项目实施 reactive getx 以实现更清晰的代码。
在控制器飞镖文件中,我有:
class ReadSinglePostController extends GetxController {
var posts = Post(
postID: 1,
userID: 0,
thumbnail: 'some base64string',
imageList: 'some base64string',
title: 'title',
description: 'description',
createdTime: DateTime.now())
.obs;//initialization and make the class Post observable
var postid = 0.obs; //initialize postid and make it observable
void updateID(var postID) {
postid = postID;
} //update the postid variable when a specific post is clicked in the post list
@override
void onInit() {
super.onInit();
readPost(postid);
}
Future readPost(var postID) async {
var result = await PostsDatabase.instance.readNote(postID);
posts = result;
}//function to read the detailed content of that specific post from database passing in the postid
}
然后在 UI 的主页上,我将所有 post 都放在一个网格中,我实现了此控制器以在特定 post 时更新 postid
] 被点击。单击 post 时,它会导航到 post 详细信息页面,并且在那个 UI 文件中,出现 error:
Error:The getter "thumbnail" isn't defined for the type 'Rx<Post>'.
当我使用 getter 'title', 'description' 等时出现同样的错误
代码如下:
class PostBody extends StatelessWidget {
PostBody({
Key? key,
}) : super(key: key);
final readSinglePostController = Get.put(ReadSinglePostController());
@override
Widget build(BuildContext context) {
return DefaultTextStyle(
style: Theme.of(context).textTheme.bodyText2!,
child: LayoutBuilder(
builder: (BuildContext context, BoxConstraints viewportConstraints) {
return SingleChildScrollView(
child: ConstrainedBox(
constraints: BoxConstraints(
minHeight: viewportConstraints.maxHeight,
),
child: GetX<ReadSinglePostController>(
builder: (controller) {
return ...
...
...
child: FadeInImage(
placeholder: MemoryImage(kTransparentImage),
image:
Utility.imageFromBase64String(
controller.posts.thumbnail)//Error:The getter "thumbnail" isn't defined for the type 'Rx<Post>'. and the same error comes up when I use getter 'title', 'description' and etc.
.image,
),...
伙计们,有什么线索吗?
IN Getx,Rx<T>
是 T
上的包装器。
这意味着当您调用 controller.posts
时,您将获得一个 Rx<Post>
.
反应类型的实例
现在,Rx<Post>
不会直接知道 Post
中有哪些成员,这就是您无法直接访问它们的原因。
相反,您必须首先从反应对象中获取 value
,它为您提供 Rx
正在包装的实际 Post
实例。从那里你可以访问你的实例变量。
controller.posts.value.thumbnail
这里,controller.posts.value
的类型是Post
。
我正在尝试为我的项目实施 reactive getx 以实现更清晰的代码。
在控制器飞镖文件中,我有:
class ReadSinglePostController extends GetxController {
var posts = Post(
postID: 1,
userID: 0,
thumbnail: 'some base64string',
imageList: 'some base64string',
title: 'title',
description: 'description',
createdTime: DateTime.now())
.obs;//initialization and make the class Post observable
var postid = 0.obs; //initialize postid and make it observable
void updateID(var postID) {
postid = postID;
} //update the postid variable when a specific post is clicked in the post list
@override
void onInit() {
super.onInit();
readPost(postid);
}
Future readPost(var postID) async {
var result = await PostsDatabase.instance.readNote(postID);
posts = result;
}//function to read the detailed content of that specific post from database passing in the postid
}
然后在 UI 的主页上,我将所有 post 都放在一个网格中,我实现了此控制器以在特定 post 时更新 postid
] 被点击。单击 post 时,它会导航到 post 详细信息页面,并且在那个 UI 文件中,出现 error:
Error:The getter "thumbnail" isn't defined for the type 'Rx<Post>'.
当我使用 getter 'title', 'description' 等时出现同样的错误
代码如下:
class PostBody extends StatelessWidget {
PostBody({
Key? key,
}) : super(key: key);
final readSinglePostController = Get.put(ReadSinglePostController());
@override
Widget build(BuildContext context) {
return DefaultTextStyle(
style: Theme.of(context).textTheme.bodyText2!,
child: LayoutBuilder(
builder: (BuildContext context, BoxConstraints viewportConstraints) {
return SingleChildScrollView(
child: ConstrainedBox(
constraints: BoxConstraints(
minHeight: viewportConstraints.maxHeight,
),
child: GetX<ReadSinglePostController>(
builder: (controller) {
return ...
...
...
child: FadeInImage(
placeholder: MemoryImage(kTransparentImage),
image:
Utility.imageFromBase64String(
controller.posts.thumbnail)//Error:The getter "thumbnail" isn't defined for the type 'Rx<Post>'. and the same error comes up when I use getter 'title', 'description' and etc.
.image,
),...
伙计们,有什么线索吗?
IN Getx,Rx<T>
是 T
上的包装器。
这意味着当您调用 controller.posts
时,您将获得一个 Rx<Post>
.
现在,Rx<Post>
不会直接知道 Post
中有哪些成员,这就是您无法直接访问它们的原因。
相反,您必须首先从反应对象中获取 value
,它为您提供 Rx
正在包装的实际 Post
实例。从那里你可以访问你的实例变量。
controller.posts.value.thumbnail
这里,controller.posts.value
的类型是Post
。