参数类型 '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 第一个选项稍微干净一些
我有一个将“日期”作为最终参数的模型。
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 第一个选项稍微干净一些