flutter - Flutter 在构造函数中定义 DateTime 的默认值
问题描述
我有下面的状态,想在构造函数中设置 DateTime 的默认值。我想将当前日期作为默认日期,但我不确定这是否可能,因为它需要保持不变。
该DateTime.now()
功能或例如DateTime.utc(1989, 11, 9)
也不起作用,但是否有另一种方法来分配默认日期时间?
class CreateDidState {
final String firstname;
final String lastName;
final String email;
final String phoneNumber;
final DateTime dateOfBirth;
final String sex;
final String address;
final String city;
final String state;
final String postalCode;
final String country;
CreateDidState(
{this.firstname = "",
this.lastName = "",
this.email = "",
this.phoneNumber = "",
this.dateOfBirth = DateTime.now(), //The default value of an optional parameter must be constant.
this.sex = "",
this.address = "",
this.city = "",
this.state = "",
this.postalCode = "",
this.country = ""});
}
解决方案
问题是它DateTime.now()
不是一个常量,这是有道理的,因为常量意味着可以在编译程序时确定该值,因此DateTime
如果此构造函数被标记,我们将获得编译程序时的值const
。
正如您得到的错误所告诉的那样,您必须使用一个常量评估值作为默认值。但是我们可以在这里做一个小技巧:
class CreateDidState {
final String firstname;
final String lastName;
final String email;
final String phoneNumber;
final DateTime dateOfBirth;
final String sex;
final String address;
final String city;
final String state;
final String postalCode;
final String country;
CreateDidState(
{this.firstname = "",
this.lastName = "",
this.email = "",
this.phoneNumber = "",
DateTime? dateOfBirth,
this.sex = "",
this.address = "",
this.city = "",
this.state = "",
this.postalCode = "",
this.country = ""})
: this.dateOfBirth = dateOfBirth ?? DateTime.now();
}
我们在这里所做的是将参数声明dateOfBirth
为可空值 ( DateTime?
)。由于命名参数的默认值是,null
这意味着我们不需要指定任何默认值。
但是我们仍然希望类字段dateOfBirth
是一个不可为空的值。所以我已经this.
从参数中删除了,所以这个构造函数参数与类变量无关。
然后,我将以下代码添加到构造函数的类初始化程序部分(此代码作为创建对象的一部分运行,并且允许使用值初始化类变量):
: this.dateOfBirth = dateOfBirth ?? DateTime.now();
这意味着我们希望类变量dateOfBirth
(我们this.
用来告诉两个具有相同名称的变量分开)具有表达式的值dateOfBirth ?? DateTime.now()
。
这??
意味着我们返回左侧的值,除非该值为null
。如果null
,我们将值返回到右侧。所以如果dateOfBirth
是null
(如果我们不给参数一个值,因为null
它是默认值,就会发生这种情况)我们使用由DateTime.now()
.
推荐阅读
- html - 为什么我的页脚在导航栏而不是底部?
- python - 分别读取多个 CSV 并在 Python 中将它们并行保存到数据帧字典中
- nuget - NuGet 包依赖源文件未嵌入到项目中
- .net-core - 如何使用 Saml2 将 .NET Core API 管理为现有 IdentityProvider 的 ServiceProvider?
- android-fragments - Button onclicklistener not fired in Fragment
- snowflake-cloud-data-platform - Snowflake 中的传统星型模式与宽表性能比较
- sql - 更清洁/更有效的方式仅拉到前 10%
- ggplot2 - 在 Shiny 应用程序中使用时,ggplot2 中的美学问题
- php - 如何在 realod 夹具后不自动增加 id?
- powerbi - DAX 累积 (YTD) 度量