颤振:getx RxList 不是 运行 obx 生成器

flutter: getx RxList not run obx builder

我在我的项目中使用 getx。我有 RxList 并购买了 Obx 我在小部件上显示了我的数据:

  RxList<VocabularyModel> vocabs = RxList();

和小部件:

   return Scaffold(
      body: SafeArea(
        child: Obx(
          () => ListView.builder(
            // ignore: invalid_use_of_protected_member
            itemCount: controller.vocabs.value.length,
            itemBuilder: (context, index) {
              return Padding(
                padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 8),

在控制器中,我有方法删除 vocabs 中的对象:

  void changeToRememberState(int index) {
    final upateItem = vocabs.value[index].copyWith(remember: true);
    vocabs.value.removeAt(index);
    // repository.changeToRememberState(index, upateItem);
  }

但是当我从 vocabs 中删除对象时,Obx 构建器没有被触发?为什么?我从 RxList 中删除了一个元素,为什么 RxList 没有触发?

列表 默认为反应式 (Rx)。因此,如果您使用 RxList[].obs,则不应使用 .value 访问它。或者我应该说,你不应该忽略:invalid_use_of_protected_member。这就是为什么您的 Obx 在您删除时没有触发重建。因为您要删除基础 List 元素而不是从流中删除。

除非使用 Rx<List<VocabularyModel>>,否则不应使用 vocabs.value。 因此从 vocabs 中删除 .value 将解决重建问题。

  • 小部件:

    return Scaffold(
    body: SafeArea(
      child: Obx(
        () => ListView.builder(
          itemCount: controller.vocabs.length,
          itemBuilder: (context, index) {
            return Padding(
              padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 8),
    
  • 控制器:

    void changeToRememberState(int index) {
       final upateItem = vocabs[index].copyWith(remember: true);
       vocabs.removeAt(index);
      }