【问题标题】:Using Obx, got this error: [Get] the improper use of a GetX has been detected使用 Obx,得到这个错误:[Get] 检测到 GetX 使用不当
【发布时间】: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 优先与无状态小部件一起使用。

标签: flutter dart flutter-getx


【解决方案1】:

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

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

【讨论】:

  • 就是这样!谢谢。一旦我使用 obs,我的问题就解决了
猜你喜欢
  • 2021-12-14
  • 2022-01-02
  • 2021-10-07
  • 2021-05-28
  • 2022-08-04
  • 1970-01-01
  • 2022-10-17
  • 2021-11-11
  • 2021-09-15
相关资源
最近更新 更多