参数类型 'Object' 无法赋值给参数类型 'Timestamp' - Flutter

The argument type 'Object' can't be assigned to the parameter type 'Timestamp' - Flutter

我有一个将“日期”作为最终参数的模型。

class WalletTransaction extends Equatable {
    final String id;
    final String amount;
    final String description;
    final bool isDepense;
    final Timestamp date;

  WalletTransaction(
     {required this.id,
     required this.date,
     required this.amount,
     required this.isDepense,
     required this.description});

我想传递这个模型的一个实例class所以我做了一个空检查运算符来检查变量是否为空

AddWalletTransactions(
    new WalletTransaction(
        amount: amount ?? "00",
        date: date ?? Timestamp.fromDate(DateTime.now()),
        isDepense: isDepense ?? true,
        description: description ?? "",
        )
        )

但是它在 Timestamp.fromDate(DateTime.now()) 中给了我这个问题:

The argument type 'Object' can't be assigned to the parameter type 'Timestamp'.

错误(可能)在于您的 date 对象。我还假设您使用的是 firestore.

中的 Timestamp

在 Dart 中,?? 运算符如果为非空则在左侧求值,否则在右侧求值。

但是,在计算该表达式的静态类型时,只能选择双方都有效的类型。例如:

class Animal {}
class Dog extends Animal {}

final a = dog ?? Animal();
// a has a static type of Animal

final b = 'world' ?? 'hello';
// b has a static type of String

final c = Scaffold() ?? 'hello';
// c has a static type of Object

一般来说,Dart 会选择双方匹配的最具体的类型。在 Dog/Animal 示例中,Object 也是 a 的有效静态类型,但 Animal 也是如此,而 Animal 更具体,因此 Animal 被选中。

在您的示例中,您使用:

date ?? Timestamp.fromDate(DateTime.now());

Timestamp.fromDate(...) 的静态类型是 Timestamp,并且(我假设)date 的静态类型是 DateTime

这两种类型根本不相关,因此对两者都有效的最具体类型是 Object,因此 Dart 为该表达式提供静态类型 Object.

如果您想从可能为空或不为空的日期创建 Timestamp,只需将 ?? 移动到 Timestamp:

date: Timestamp.fromDate(date ?? DateTime.now())

或者您可以使用具有 2 个 Timestamp 个实例的三元运算符:

date: date == null ? Timestamp.now() : Timestamp.fromDate(date)

IMO 第一个选项稍微干净一些