列表 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 的相关文章

  • Dart:如何在本机扩展中创建流

    在我的本机扩展中 我需要将整数流式传输到我的 Dart 控制台应用程序 在概念上非常相似 标准输入 如何创建向控制台应用程序公开的本机 Dart Stream 对象 我尝试为您创建一个示例并将其放在 github 上 https githu
  • 将“Map>”转换为“Map>”

    我想投一个Map
  • 如何在 Flutter 中删除/减少 CheckboxListTile 的文本和复选框之间的空间?

    如何减少 删除下图中 CheckboxListTile 和文本之间的空间 看来以下行仅删除了周围的空间 CheckboxListTile title Text Account number not available contentPadd
  • 在 dart 的 MultipartRequest 中添加授权标头

    我在用多部分请求 https pub dartlang org documentation http latest http MultipartRequest class html在 Dart 中以便将文件上传到 API 但是我需要在我的请
  • Dart 流 .asBroadcastStream 内存泄漏

    在我们的 Flutter 应用程序中 我们存在内存泄漏和流未关闭的情况 我们追踪源代码如下 Rx combineLatest asBroadcastStream RxDart的结果 combineLatest 是单订阅流 添加 asBroa
  • 更改语言 Flutter 的按钮

    我正在 Flutter 中构建一个应用程序 到目前为止 我正在使用 JSON 国际化 其中应用程序的语言基于用户手机中默认的语言 它工作得很好 但我想给用户有机会在不更改手机系统语言设置的情况下更改语言 只需单击按钮 然后应用程序即可更改语
  • 打开键盘会导致有状态小部件重新初始化

    我在 Stable 分支中使用 Flutter 1 2 1 为了说明我的问题 假设我有页面 A 和 B A 使用以下命令导航到 BNavigator pushB 使用以下命令导航回 ANavigator pop 两者都是有状态的小部件 当我
  • Flutter 中的 Android 许可证

    4 天前一切正常 我进行了更新 许可证停止通过 我到目前为止所做的事情 检查了工具过时的东西 gt 不起作用 flutter doctor android licenses gt 不起作用 sdkmanager licenses gt 不起
  • 颤振预览图标在代码完成时显示损坏的资源图像

    当我第一次安装 flutter 和 dart 扩展时 图标预览工作正常 但是当我在没有 wi fi 的环境中开发时 图标预览损坏了 不确定这是问题所在 我尝试重新安装所有与 flutter 和 dart 相关的扩展 但问题仍然存在 如果有任
  • Android Gradle 问题 - Flutter / Dart

    我的 Gradle 同步有问题 我使用 IntelliJ 和 Android Studio 构建 Flutter Dart 应用程序 我添加了 2 个新的依赖项 现在 Gradle 出现了问题 在 Android Studio 中一切正常
  • 如何修复 webview_flutter 中的白屏?

    运行 webview flutter 示例应用程序 https github com flutter plugins tree master packages webview flutter example https github com
  • NestedScrollView 与 ListView 中的粘性选项卡

    布局按预期工作 但以下情况除外 当我滚动一页时 第二页也会滚动 没有那么多 但足以掩盖第一个项目 我可以想象它与 NestedScrollView 有关 但我不知道如何继续 import package flutter material d
  • Flutter编译错误:必须返回非空值,因为返回类型“String”不允许为空 - displayString

    我的测试无法在我的 Flutter 项目引用的仅 Dart 项目中编译和运行 我收到以下错误消息 Failed to precompile test test pub cache hosted pub dartlang org analyz
  • Flutter Spotify Api 身份验证

    我需要在使用 Spotify api 的 Flutter 应用程序中对用户进行身份验证 我使用 flutter web auth 打开 WebView 并让用户在那里登录 我无法返回应用程序 在 Spotify 仪表板中 我将回调 Uri
  • 如何在 Flutter Provider 中删除 StreamController 中的数据?

    我正在使用provider来构建我的应用程序 因此数据被添加到StreamController中 每次刷新我的应用程序时 它都会调用API 然后将数据推送到StreamController 问题是如何在替换之前删除数据新的那一个 contr
  • 自定义卡片形状 Flutter SDK

    我在 Flutter 上使用 GridView 开发了一个应用程序 GridView 项目是卡片 默认卡片形状是半径为 4 的矩形 我知道 Card Widget 有 shape 属性 并且它需要 ShapeBorder 类 但我无法找到如
  • flutter 中 sqlite 中的多个参数

    我想知道如何将多个参数传递给 sqllite 中的原始查询 我的代码如下 query async get a reference to the database Database db await DatabaseHelper instan
  • 扑。应用程序不会崩溃并发送崩溃报告

    我已经集成了Firebase Crashlytics在我的应用程序中 我正在测试 Android 应用程序 我强迫崩溃来检查它 if true List arr throw arr 1 2 我的问题是应用程序不会崩溃 我只是在日志中得到这个
  • 如何展平列表?

    我怎样才能轻松地压平List在达特 例如 var a 1 2 3 a b c true false true var b 1 2 3 a b c true false true 我该如何转向a into b 即变成一个List包含所有这些值
  • Flutter 网络图像作为 Google 地图标记

    我想在屏幕上的谷歌地图上添加网络图像作为标记 API确实支持一个功能Bitmapdescriptor fromBytes 但是 我不知道如何将它与网络图像一起使用 BitmapDescriptor fromBytes byteData 首先

随机推荐

  • 如何获取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