栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Flutter上禁用特定日期列表

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Flutter上禁用特定日期列表

这很大程度上取决于您从API获得的数据。我无法帮助您,但我可以提供谓词。

假设您已经从服务器中检索了包含一串字符串的json列表,并将其解析为DateTime对象(可能使用类似DateTime.parse的东西),那么它就相对简单了。

基本上,您需要检查每个日期(使用selectableDayPredicate),如果不在列表中,则返回true。

首先,您需要清理DateTime对象,因为它们可能包含小时,秒,毫秒等。并且您需要将它们设置为可以快速搜索的格式-
可能不是DateTime。DateTimes从技术上来说是可行的,因为它们确实具有hashCode实现,但是无论如何,您都必须创建仅包含年,月和日的新DateTime对象(因为技术上+1毫秒的日期时间与没有它的日期时间不同)。如果您真的想这样做,则可以更改

sanitizeDateTime
下面的函数以返回a
DateTime
getDateSet
返回a
Set<DateTime>
,但是我建议将它们制作为Strings,因为它们在集合中可以很好地工作并且很简单。


因此,您需要一个类似以下的函数:

String sanitizeDateTime(DateTime dateTime) =>"${dateTime.year}-${dateTime.month}-${dateTime.day}";

而且无论您在何处获得json,都希望使用该json对其进行格式化,然后将其插入到集合中。

Set<String> getDateSet(List<DateTime> dates) =>dates.map(sanitizeDateTime).toSet();

重要的是要有一组字符串而不是一个列表,因为selectableDayPredicate将运行很多次,并且如果每次执行时都要遍历整个不可选择日期的列表(这就是List

contains
所做的),则可能因为它很慢,所以要检查的日期数和不可选择的日期数
O(n*m)
在哪里-
而如果使用集合,则使用更有效的哈希计算,然后进行查找,结果为。这可以解释为过早的优化,但是在这种情况下,我认为这是一个值得的优化。
n``m``contains``O(n)

一旦有了一组不可选择的日期,您只需要在谓词中对它们进行检查即可。

class .... {  Set<String> unselectableDates; // assuming this is set somewhere  ....    onTap: () {      showDatePicker(        ...        selectableDayPredicate: (DateTime val) {          String sanitized = sanitizeDateTime(val);          return !unselectableDates.contains(sanitized);        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/413869.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号