flutter - 使用 Obx,得到这个错误:[Get] 检测到 GetX 使用不当
问题描述
请帮我。我做错了什么?我收到错误:
[Get] the improper use of a GetX has been detected.
这是代码:
class MealRecipesItem extends StatefulWidget {
const MealRecipesItem({
Key? key,
@required this.gender,
this.item,
}) : super(key: key);
final int? gender;
final Data? item;
@override
_MealRecipesItemState createState() => _MealRecipesItemState(item?.id);
}
class _MealRecipesItemState extends State<MealRecipesItem> {
final itemId;
_MealRecipesItemState(this.itemId) {
Get.put(RecipeDetailController(), tag: itemId);
}
@override
Widget build(BuildContext context) {
var controller = Get.find<RecipeDetailController>(tag: itemId);
_toggleFavorite() {
controller.toggleFavorite(widget.item?.databaseId);
}
return Material(
child: InkWell(
onTap: _toggleFavorite,
child: Container(
child: Obx(() { // ====**** ERROR IN THIS LINE ****====
if (controller.isLoading) {
return CircularProgressIndicator();
}
if (controller.resultToggleFavorite?.isUserFavorite ?? false) {
return Icon(
Icons.favorite,
);
}
return Icon(
Icons.favorite_border,
);
}),
),
),
);
}
}
在我的情况下使用 Obx 的正确方法是什么?什么是正确的代码?
谢谢你的帮助。
解决方案
您的控制器变量似乎没有一个是可观察的(例如,isLoading
)。它们不是 Rx 类型,而是普通的 dart 类型。Obx 或 GetX 仅用于 observables(.obs) 或 Rx 变量。它们就像 StreamBuilder。
因此,如果您不使用可观察对象,则无需使用 Obx 或 GetX。或者你可以让你的变量可观察。
推荐阅读
- android - 如何将文本对齐到我想要对齐的任何位置?
- javascript - 向 JS 原型添加函数时的风格约定
- ios - 如何在对象上声明属性?
- c++ - 将泛型函数及其参数传递给元函数
- bash - 如果文件相同,脚本中的 cp 更改访问和更改但不修改?
- java - 将 POJO 列表转换为 JAVA 中的 YAML 文件
- ms-access - 以编程方式取消 Access 中正在运行的查询
- c# - Salesforce Rest API 补丁操作 - 错误请求
- python - Python:对 .wav 文件进行 FFT
- haskell - 在 Haskell 中使用高阶函数(过滤器、映射、折叠)而不是模式匹配有什么优势吗?