在 DateTime.parse() 中允许空字符串

Posted

技术标签:

【中文标题】在 DateTime.parse() 中允许空字符串【英文标题】:Allowing null String in DateTime.parse() 【发布时间】:2021-07-30 18:18:38 【问题描述】:

我正在尝试将包含日期的字符串格式化为不同的日期格式。我从 Firestore 文档中获取数据。当我将数据拉入我的颤振应用程序的 UI 时,我想将其转换为 DateTime 类型,以便我可以以不同的方式格式化它。 编辑我添加了建议的编辑。

if (trxnProvider.sellerDisclosure24a != null && trxnProvider.sellerDisclosure24a != "") 
                final String? sellerDisclosure24a = trxnProvider.sellerDisclosure24a;
                _dt = DateTime.parse(sellerDisclosure24a);
                sellerDisclosure24aController.text = DateFormat('EE,  MM-dd-yyyy').format(_dt) ?? "";
               else 
                sellerDisclosure24aController.text = "";
              

但是,我在这一行收到以下错误

_dt = DateTime.parse(trxnProvider.sellerDisclosure24a);

参数类型“字符串?”不能分配给参数类型“字符串”。 (文档) 'sellerDisclosure24a' 指的是一个属性,所以它不能被推广。见http://dart.dev/go/non-promo-property (trxn_provider.dart:55)。

我已经尝试添加两个“?”和 ”!”但我仍然得到错误。我该如何处理这个空安全问题?如您所见,我正在检查数据是否存在。

【问题讨论】:

【参考方案1】:

只需创建trxnProvider.sellerDisclosure24a 的本地副本并使用它来代替:

// A local copy!
final String? sellerDisclosure24a = trxnProvider.sellerDisclosure24a;

if (sellerDisclosure24a != null && sellerDisclosure24a != "") 
  _dt = DateTime.parse(sellerDisclosure24a);
  sellerDisclosure24aController.text = DateFormat('EE,  MM-dd-yyyy').format(_dt) ?? "";
 else 
  sellerDisclosure24aController.text = "";

【讨论】:

感谢您的快速回复,但我仍然遇到同样的错误。 您可以edit your question 更新您的代码吗? @LostTexan 您必须将final String? sellerDisclosure24a outside 添加到 if 语句中,而不是在里面。此外,当您应该使用 sellerDisclosure24a 时,您仍在 if 条件中使用 trxnProvider.sellerDisclosure24a。仔细阅读我的回答。

以上是关于在 DateTime.parse() 中允许空字符串的主要内容,如果未能解决你的问题,请参考以下文章

在 CodeIgniter 中允许 URL 中的任何字符

cookie 中允许使用哪些字符?

XML 属性中允许使用哪些字符?

如何在 CodeIgniter URL 中允许 URI 编码字符?

GET 参数中允许的字符

如何限制文本框中允许的字符数?