问题标签 [freezed]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
344 浏览

flutter - 无法(反)序列化嵌套泛型类与 Dart 冻结和 json_serializable

我有一个类首先定义为:

其中 BConverter() 是一个 JsonConverter。到目前为止一切顺利,代码生成工作没有问题。

此时,我需要将 class First 添加到其他两个类中,如下所示:

在后两种情况下, json_serializable 部分的代码生成失败并出现错误:

The argument type 'List<First<dynamic>>' can't be assigned to the parameter type 'List<First<SomeClass>>'.

The argument type 'List<Second<dynamic>>' can't be assigned to the parameter type 'List<Second<SomeOtherClass>>'.

错误是在 .g.dart 文件中生成的:

我在这里想念什么?我究竟做错了什么?

0 投票
0 回答
115 浏览

flutter - Flutter 冷冻包装密封类方法

当我使用 Freezed 生成密封类时,如何向密封类添加方法?

例如:

我想向 StudentFetchSuccess 类添加一个函数。我不知道它是否可能,但即使你告诉我不可能,我也会很感激。

谢谢您的帮助 :)

0 投票
2 回答
2560 浏览

flutter - json_serializable - 将通用字段添加到冻结/json_serializable 类

如何使Freezed对象采用泛型类型?我想做这个:

我已经尝试@With.fromString('AdministrativeArea<House>')从文档中使用,但无法将其正确应用于此类。

错误之一:

lib/src/common/enums/tags/common/vegan_item_tag.freezed.dart:142:32:错误:位置参数太少:需要 2 个,给定 1 个。
$ $_VeganItemTagFromJson(json);

认为我可能在正确的轨道上,但它不再生成vegan_item_tag.g.dart文件:

0 投票
1 回答
3295 浏览

flutter - 被调用的构造函数不是 const 构造函数。尝试从构造函数调用中删除“const”。颤振如何解决?

当我尝试在 Flutter 中使用 Freezzed 包构建对象时出现此错误 错误截图

在此处输入图像描述

如果我尝试使用其他一些数据类型而不是 DateTime 我没有收到任何错误

在此处输入图像描述

如何解决这个问题?谢谢

发布规范.yaml

颤振版本:2.2.1

0 投票
0 回答
55 浏览

flutter - 使用 Hive 和继承实现冻结

我已经阅读了文档,但仍然无法理解它是如何与多态性一起工作的。

请参阅我希望实现的示例代码:

自从,

您不能将@With/@Implements 与冻结的类一起使用。冻结的类既不能扩展也不能实现。

实现这一目标的可能方法是什么?

0 投票
0 回答
72 浏览

flutter - Flutter 不可变实体和表单

我们正在 Flutter 中开发一个新的移动应用程序,我们的域层具有所有不可变的实体(我们使用的是 freezed 包),并使用 Riverpod 作为状态管理在层之间移动它们。

现在我们问自己如何编辑表单中的不可变实体。

我们为接收不可变实体的表单使用有状态小部件,直到现在,我们使用实体类中的所有字段填充了本地 Map<String, dynamic> 变量,并将表单字段与此 Map 链接。

验证数据后,我们创建了一个新的不可变实体并调用状态通知器上的方法来更新数据并传播状态。

Map<String, dynamic> 的问题在于它不是类型安全的,也不是 null 安全的,我们必须在每次访问地图以创建新实体时强制转换并检查所有内容。

有什么建议可以改进这个设计吗?

有人建议为我们实体类中将在表单上编辑的每个字段使用一个变量,但我发现它是多余的。

另一种方法是每次使用 Freezed 提供的 copyWith 在表单内更改字段时创建一个新实体,但我不确定它是否有效。

0 投票
0 回答
96 浏览

flutter - Flutter Freezed/json_serializable - 生成的 json 中缺少 runtimeType

由于某种原因,runtimeType在这个 Freezed 类的生成 json 中丢失了。它只是偶尔发生。见下图:

在此处输入图像描述

这会导致图像中的 switch case 掉到throw FallThroughError();,因为runtimeType不存在。

这是课程:

0 投票
0 回答
23 浏览

flutter - 在不同的构造函数中使用特定类型的联合会破坏缩短的 copyWith

如果这不符合规则,我很抱歉。但我认为这个问题需要一些解释,因为我自己不知道如何描述我什至是如何解决这个问题的。(TL;底部的 DR)

问题简介:

假设一个人正在使用各种形式的灯光。这些灯不一定共享相同的状态(亮度、色温……)。它们也可能没有相同数量的完整状态集。

例如,一个基本灯可能只有亮度,即一组状态,并且该组仅包含亮度。但是也可能有一个大灯,上面有4个聚光灯,可以分别控制亮度和色温。这 4 个聚光灯连接到一个对象,并且共享一些属性(名称、全局切换、对连接到设备的传感器的访问,...)

如果现在想使用冻结的类,可以将它们实现为 4 个不同的灯,但我希望它们位于单个实体下。所以假设 Lights 现在是“物理”实体,而 LightState 是可以在它们上更改的。

基本型号:

我们可以对它们进行如下建模;

与此类似的东西将在整个应用程序中运行良好。他们甚至共享他们的第一个“状态”,这意味着 light.state 在所有对象上都是可能的。

问题:

LightState 本身就是一个联合体,它包含几个不同的属性集合,而灯光应该只有一个这样的集合!因此,我们可能会跳到一个解决方案,而不是使用 LightState,例如:

现在,这将实现介绍中提到的两种灯,并且效果很好,除了我需要的一件事:深度复制的较短版本!

这行得通。

这没有。

CopyWith 根本不显示“状态”,这可能是因为“ColorTemperatureLightState”在技术上是一个抽象类,我猜这些根本没有相同的功能。

我为什么在乎?为什么不以不同的方式解决它?

好吧,对于我想保持冻结状态的人来说,地图功能之类的东西真的很好用。我不能不小心错过一些光的表现,因为它强加给我。它还有助于将更新分成多个流,因为并非所有实体都以相同的方式与应用程序通信。

使用带有继承的分层方法也有其自身的问题。例如,我想避免对 UI 层中的实体进行函数调用,而是希望将更改过程保留给应用程序层或简单地传递更改后的副本。

问题

有没有一种干净的方法来解决这个问题?

例如,是否有不同的方法将联合的特定类型用作另一个构造函数的参数,从而使 copyWith 保持不变?

我也对完全不同的解决方案的提议持开放态度。如果我不得不为这些课程扔掉冰冻的东西,我会的。如上所述,我目前不知道基于 UI 层中的输入更改应用程序层中的对象的干净方法 - 没有 - 基本上将功能映射到 UI。

因此,继续使用轻量级示例,我想避免在 UI 中调用诸如“setBrightness”、“turnOn/toggle”之类的设置器。但是我必须一次更改许多不同的属性。

TL;DR:我想在某个冻结类的构造函数中使用特定类型的冻结联合作为参数。然而,这破坏了 deep copyWith 的缩短版本。

0 投票
0 回答
101 浏览

linux - ubuntu 20.04中突然无响应的暗蓝屏

最近,我在笔记本电脑上从 Windows 10 切换到了 Ubuntu 20.04。我的笔记本电脑是带有 16 GB ram 256 GB SSD 和 1TB HDD 的 acer nitro 5。我在我的ssd中安装了ubuntu。我使用 500MB 用于 efi 分区,8GB 用于交换分区,125GB 用于根分区,102GB 用于主分区。我使用磁盘在 /home/dev/Data(D) 和 /home/dev/Data(E) 创建了两个硬盘分区。

发布日志文件时出现了一些问题。因此,我正在共享文件的链接。(var/log/syslog、var/log/kern.log、var/log/dmesg)这些文件包含崩溃前后时间段的信息。坠机发生在 18:30:00 和 19:05:00 左右的某个地方。

https://drive.google.com/drive/u/3/folders/1-JZRLaAcDxVNJJLyI4vJJrFR2yqd28bV

系统监视器

固态 硬盘

过了一会儿,我注意到我没有权限在我的硬盘分区中写入和删除。所以我修改了权限。我还安装了一些软件,如 google chrome、vs code、nqq 等。

由于我安装了ubuntu,系统突然崩溃而没有任何警告。出现暗蓝色屏幕。整个系统停止响应。它随时随机发生。没有警告。所以我别无选择,只能使用电源键强行关闭它。当我重新启动系统时,它工作正常。它每天发生一次或两次。我搜索了这个问题,我找到了说过热可能是问题的答案。但它只是在我切换到 ubuntu 后才开始。在此之前一切正常。

有人可以帮我解决问题吗?提前致谢。

0 投票
0 回答
149 浏览

flutter - 用 freeze 定义多态 copyWith 方法

有没有办法用冻结定义多态 copyWith 方法?我现在正在做这样的事情,但我不想重复自己......