在飞镖中使用可为空字段分配值的更好方法
Better way to assign a value with nullable field in dart
有更好的方法吗?
Assignment(
dueAt: json['due_at'] == null ?
null :
DateTime.parse(json['due_at']).toLocal()
)
Assignmentclass中的属性“dueAt”可以为空,我需要解析json['due_at']的字符串到 DateTime,但 json['due_at'] 也可以为 null。
现在不是真正的问题,但看起来很吵而且重复。
在这种特殊情况下,您可能希望使用 tryParse
而不是 parse
。如果 dueAt
是 DateTime?
类型,您可以简单地调用:
Assignment( dueAt: DateTime.tryParse(json['due_at'])?.toLocal() );
请注意,对于 任何 无效日期字符串(无论是 null 还是格式不正确的字符串),tryParse
都会 return null。这可能是也可能不是所需的行为,具体取决于您的预期用途。
首先,看起来您正在手动编写 JSON 序列化代码。如果你让图书馆来做这件事,你的生活会更轻松,更不容易出错。 json_serializable
非常简单而强大,100% 值得研究。
但是,这种模式在 json 代码之外仍然很常见。
您还可以考虑为 Object?
编写一个扩展方法,它的行为类似于 Kotlin 标准库的 let
函数 (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/let.html)
然后,您可以使用 Dart 的 ?.
语法来处理其余的逻辑:
// extension on T rather than Object? to maintain type information
extension Example<T> on T {
R let<R>(R Function(T) function) => function(this);
}
这只是将给定函数应用于 this
,它本身并不是非常有用,但允许使用 ?.
:
final DateTime? dueAt = json['due_at']?.let(DateTime.parse);
如果 json['due_at']
的计算结果为 null
,则 ?.
运算符短路,并且 dueAt
设置为 null
。否则,它的计算结果为 DateTime.parse(json['due_at'])
.
或者,您可以只使用 package:kt_dart
将大部分 Kotlin 标准库移植到 Dart
有更好的方法吗?
Assignment(
dueAt: json['due_at'] == null ?
null :
DateTime.parse(json['due_at']).toLocal()
)
Assignmentclass中的属性“dueAt”可以为空,我需要解析json['due_at']的字符串到 DateTime,但 json['due_at'] 也可以为 null。
现在不是真正的问题,但看起来很吵而且重复。
在这种特殊情况下,您可能希望使用 tryParse
而不是 parse
。如果 dueAt
是 DateTime?
类型,您可以简单地调用:
Assignment( dueAt: DateTime.tryParse(json['due_at'])?.toLocal() );
请注意,对于 任何 无效日期字符串(无论是 null 还是格式不正确的字符串),tryParse
都会 return null。这可能是也可能不是所需的行为,具体取决于您的预期用途。
首先,看起来您正在手动编写 JSON 序列化代码。如果你让图书馆来做这件事,你的生活会更轻松,更不容易出错。 json_serializable
非常简单而强大,100% 值得研究。
但是,这种模式在 json 代码之外仍然很常见。
您还可以考虑为 Object?
编写一个扩展方法,它的行为类似于 Kotlin 标准库的 let
函数 (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/let.html)
然后,您可以使用 Dart 的 ?.
语法来处理其余的逻辑:
// extension on T rather than Object? to maintain type information
extension Example<T> on T {
R let<R>(R Function(T) function) => function(this);
}
这只是将给定函数应用于 this
,它本身并不是非常有用,但允许使用 ?.
:
final DateTime? dueAt = json['due_at']?.let(DateTime.parse);
如果 json['due_at']
的计算结果为 null
,则 ?.
运算符短路,并且 dueAt
设置为 null
。否则,它的计算结果为 DateTime.parse(json['due_at'])
.
或者,您可以只使用 package:kt_dart
将大部分 Kotlin 标准库移植到 Dart