使用 Obx,得到这个错误:[Get] 检测到 GetX 使用不当

Posted

技术标签:

【中文标题】使用 Obx,得到这个错误:[Get] 检测到 GetX 使用不当【英文标题】:Using Obx, got this error: [Get] the improper use of a GetX has been detected 【发布时间】:2021-07-16 00:05:16 【问题描述】:

请帮助我。我做错什么了?我收到错误: [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 的正确方法是什么?什么是正确的代码?

感谢您的帮助。

【问题讨论】:

您需要提供完整的代码/数据才能重现错误。顺便说一句,GetX 优先与无状态小部件一起使用。 【参考方案1】:

您的控制器变量似乎没有一个是可观察的(例如,isLoading)。它们不是 Rx 类型,而是普通的 dart 类型。 Obx 或 GetX 仅用于 observables(.obs) 或 Rx 变量。它们就像 StreamBuilder。

因此,如果您不使用可观察对象,则无需使用 Obx 或 GetX。或者你可以让你的变量可观察。

【讨论】:

就是这样!谢谢。一旦我使用 obs,我的问题就解决了

以上是关于使用 Obx,得到这个错误:[Get] 检测到 GetX 使用不当的主要内容,如果未能解决你的问题,请参考以下文章

你如何得到每个定时器的计数值?飞镖

图像中的线检测

我正在使用 Getx 进行状态管理,当我将数据添加到服务器时,它不会在列表视图中出现更新的数据,直到热重启而列表视图位于 Obx 中

Facebook Buck:BUILD FAILED:没有检测到原生平台。可能没有正确配置Android NDK

我无法刷新屏幕

Golang弃用go get工具