列表 Cubit Flutter 中的 UpdateValue

2024-01-14

在应用程序中我使用的是 Cubit。 ItemData 从 firestore 获取。一切正常,但在列表中添加项目并更新 firestore 中的值(名称)后,列表中仍然是旧值。怎么解决呢?

 class TestPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          BlocBuilder<ItemCubit, ItemState>(
            cubit: ItemCubit(DataBase())..getItemData(item),
            builder: (context, state) {
              if (state is ItemData) {
                return Column(
                  children: [
                    Text(state.item.name),
                    RaisedButton(
                      onPressed: () {
                        Navigator.push(
                            context,
                            MaterialPageRoute(
                                builder: (context) => TestPage1(
                                      item: state.item,
                                    )));
                      },
                      child: Text('showPage'),
                    ),
                    RaisedButton(
                      onPressed: () {
                        context.bloc<TestCubit>().add(item);
                      },
                    )
                  ],
                );
              }
              return Container(
                child: Text('error'),
              );
            },
          )
        ],
      ),
    );
  }
}

为了在列表中添加项目,我正在使用另一肘 代码:

class AddCubit extends Cubit<AddState> {
  AddCubit() : super(AddInitial());
  List<Item> items = List<Item>();

  void addItem(Item item) {
    items.add(item);
    emit(LoadList(items));
  }
}

这是用于检索 TestPage1 中的项目列表的块:

  BlocBuilder<AddCubit, AddState>(builder: (context, state) {
          if (state is LoadList) {
            return Column(
              children: state.items.toSet().map((item) {
                return Card(
                  child: Text(item.name),
                );
              }).toList(),
            );
          }
        })

州代码:

class LoadList extends AddState {
  final List<Item> items;

  LoadList(this.items);
}

在 flutter 中,当你比较同一类的两个对象时,即使它们的值不同,你也总是相等的。除非您将在班级中使用相等方法。

具有相等方法的类代码

import 'package:equatable/equatable.dart';

class LoadList extends AddState {
  final List<Item> items;

  LoadList(this.items);
  @override
  List<Object> get props => [items];
}

第二件事是您应该使用复制而不是为新值创建新状态。稍后它会派上用场,并减少以后可能出现的错误数量。

状态类的完整代码

import 'package:equatable/equatable.dart';

class LoadList extends AddState {
  final List<Item> items;
  LoadList(this.items);

  LoadList copyWith({
    List<Item> items,
  }) {
    return LoadList(
      items: items?? this.items,
    );
  }

  @override
  List<Object> get props => [items];
}

然后对于您的 void 函数,您应该使用:

void addItem(Item item) {
    items.add(item);
    emit(state.copyWith(items: items);
 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

列表 Cubit Flutter 中的 UpdateValue 的相关文章

随机推荐

  • 如何获取Infinispan缓存中数据的大小,替代ehcache的calculateInMemorySize?

    我正在从 ehcache 迁移到 infinispan 在ehcache中我们有 net sf ehcache Cache calculateInMemorySize 来计算内存大小 如何计算 infinispan 中的内存大小 托马斯是对
  • Android Studio 是否有层次结构查看器或布局检查器?

    我尝试在这里搜索但找不到答案 我正在寻找一种方法来启动层次结构查看器 http developer android com tools help hierarchy viewer html从 Android Studio 中启动 而不必在命
  • openGL:带有着色器的线条

    如何使用着色器创建一条线 可能是彩色的 我正在使用可编程管道 并且我是 openGL 的初学者 我找不到有关如何使用着色器绘制线条的示例 我想我必须将 VAO 顶点数组对象 加载到着色器中 但是然后呢 我应该使用哪些功能以及如何使用 首先
  • 从 Shell 脚本 /bin/sh 运行 FFMPEG

    我正在尝试设置一个 Shell 脚本以在自动化监视文件夹中工作 除了运行 Shell 脚本部分之外 一切正常 本质上 当文件出现在监视文件夹中时 它会运行调用 FFMPEG 的 shell 脚本 然后将文件移动到存档文件夹以安全保存 然而现
  • 基于 Cognito ID 的 S3 文件夹访问 IAM 策略

    我创建了一个 IAM 策略来允许 Cognito 用户写入我的 S3 存储桶 但我想根据他们的 Cognito ID 将它们限制为文件夹 我已按照亚马逊的说明进行操作here http docs aws amazon com IAM lat
  • 在我的 DbHelper 类的 oCreate 中插入记录时,递归调用 getDatabase

    当我尝试在从 SQLiteOpenHelper 扩展的 DbHelper 类的 onCreate 方法中插入记录时 将会出现此错误 我发现了一些类似的主题 Android getDatabase 递归调用 https stackoverfl
  • python 函数默认参数只计算一次? [复制]

    这个问题在这里已经有答案了 我是一个Python初学者 正在阅读 Python教程 它说如果我们有一个函数 def f a L L append a return L print f 1 print f 2 print f 3 这将打印 1
  • JavaScript 验证足以保证我的表单安全吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在建立一个网站 我对登录 注册页面上的表格有疑问 我在登录页面上有一些标准的 javascript 验证 我的问题是 如果禁用了 javas
  • 如何在Android Q中从Uri获取图像的实际路径?

    我正在使用相机拍照并从图库中进行选择 之后进行压缩以减小文件大小 我正在使用getRealPathFromURI 获取实际图像路径的方法 但在 Android Q 中MediaStore Images Media DATA已弃用 fun g
  • QML 中是否有来自 TreeView 的本机数据模型?

    QT 文档暗示 QAbstractItemModel 的任何实现都可以用于 TreeView 这些模型通常是用C 编写的 目前还不方便 那么是否有可以在树视图中使用的原生 QML 模型 我可以从 C 设置 QStandardItemMode
  • 如何将列表中的位置绑定到该元素的属性?

    我有一个ObservableList
  • MySQL 错误:“列‘columnname’不能是 FULLTEXT 索引的一部分”

    最近 我将一堆列更改为 utf8 general ci 默认的 UTF 8 排序规则 但是当尝试更改特定列时 我收到了 MySQL 错误 Column node content cannot be part of FULLTEXT inde
  • Ruby 中的 Java CLASSPATH 相当于什么?

    我想从任何地方运行 ruby 程序 我想我已经明白它是RUBYLIB 但我无法让它发挥作用 你能举例说明吗 您需要操纵加载路径 LOAD PATH 这是用完成的 I directories 目录之间用 在类 Unix 系统上并且由 在 DO
  • 如何在caret包中的指定网格中随机搜索?

    我想知道是否可以在预定义的网格中使用随机搜索 例如 我的网格有alpha and lambda for glmnet方法 alpha介于 0 和 1 之间 并且lambda介于 10到10之间 我想使用随机搜索5次来随机尝试这个范围内的点
  • Angular 2 场遮蔽

    我想屏蔽一个字段 例如 有 10 位数字的电话号码 123 123 1234 我需要以 xxx xxx 1234 的方式屏蔽 另外 在提交页面时 我需要将原始变量 123 123 1234 发送到服务 任何帮助将不胜感激 Thanks 这是
  • swagger-ui 和 spring webflux 出现 404 错误

    我正在使用 Spring Webflux 开发 REST 服务 并且我想使用 Swagger2 为我的 API 生成文档 我发现 Webflux 仅支持 Swagger2 版本 3 0 0 快照 这是我的配置 java 11 maven 3
  • 模拟器:警告:本机不支持快速启动/快照

    我开始学习android 但还没有取得任何进展 我按照说明下载了 android studio 并尝试设置 AVD 我正在使用带有 java 1 8 0 51 的 Mac Air macOS High Sierra 当我启动 AVD 时 事
  • 爬山算法简单例子

    我对爬山算法有点困惑 我想 运行 该算法 直到我找到该树中的第一个解决方案 a 是初始状态 h 和 k 是最终状态 并且它表示状态附近的数字是启发值 这是树 我的问题 我正在尝试在树上爬山 所以好吧 我们开始 a gt f gt g 然后完
  • Java什么时候有了JIT编译器?

    Java 何时首次获得用于生产代码的 JIT 编译器 http java sun com features 2000 06 time line html http java sun com features 2000 06 time lin
  • 列表 Cubit Flutter 中的 UpdateValue

    在应用程序中我使用的是 Cubit ItemData 从 firestore 获取 一切正常 但在列表中添加项目并更新 firestore 中的值 名称 后 列表中仍然是旧值 怎么解决呢 class TestPage extends Sta