【问题标题】:flutter: getx RxList not run obx builder颤振:getx RxList 未运行 obx builder
【发布时间】:2021-10-06 23:54:59
【问题描述】:

我在我的项目中使用 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),

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

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

但是当我从词汇中删除对象时,Obx builder 没有被触发?为什么?我从 RxList 中删除了一个元素,为什么 RxList 不触发?

【问题讨论】:

    标签: flutter flutter-getx


    【解决方案1】:

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

    除非你使用Rx&lt;List&lt;VocabularyModel&gt;&gt;,否则你不应该使用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);
        }
      

    【讨论】:

      猜你喜欢
      • 2021-10-07
      • 2022-01-05
      • 2021-11-19
      • 2021-07-14
      • 2020-04-17
      • 1970-01-01
      • 2021-11-07
      • 2021-12-07
      • 2019-09-01
      相关资源
      最近更新 更多