Dart:RESTful服务用正确的数据响应,但没有对象被添加到列表中

Dart:RESTful服务用正确的数据响应,但没有对象被添加到列表中,dart,future,Dart,Future,有关守则: ... void main() { DateFormat df = DateFormat('yyyy-MM-dd'); List<DateTime> blockedDays = []; blockedDays.add(DateTime.now()); // <-- This works perfectly getBlockedDays().then((value) => value.forEac

有关守则:

    ...
    void main() {
      DateFormat df = DateFormat('yyyy-MM-dd');
      List<DateTime> blockedDays = [];
      blockedDays.add(DateTime.now()); // <-- This works perfectly

      getBlockedDays().then((value) => value.forEach((element) {
          print(element);

          blockedDays.add(element); // This doesn't
      }));

      print(blockedDays.length); // returns 1, because of first add (see above)
      ...
。。。
void main(){
DateFormat df=DateFormat('yyyy-MM-dd');
列表blockedDays=[];
blockedDays.add(DateTime.now());//value.forEach((元素){
印刷品(元素);
blockedDays.add(元素);//这不是
}));
print(blockedDays.length);//返回1,因为第一次添加(见上文)
...
结果输出如下所示:

一,

2020-11-26 00:00:00.000

2020-11-27 00:00:00.000

2020-11-28 00:00:00.000

2020-11-30 00:00:00.000

2021-04-08 00:00:00.000

2021-04-09 00:00:00.000

2021-04-10 00:00:00.000

2021-04-17 00:00:00.000

2021-05-22 00:00:00.000

2021-05-23 00:00:00.000

列表长度应大于1


欢迎任何提示。

由于您使用的是
then()
,因此
getBlockedDays()
的返回类型似乎是
Future
。这意味着
then
回调将异步执行。
main()的其余部分
之前执行过,因为它是同步的。您可能需要创建一个
异步
函数。有关更多详细信息,请参阅。

由initState触发的异步方法完成了此操作。 谢谢
Robert

你好,米克尔,谢谢。我熟悉推荐源代码的内容,但我的目的是获取一个“同步”值。我使用了“then”,因为我了解文档,该值将在getBlockedDays完成时提供。我想在颤振小部件(DatePicker)的initState()中使用它准备/提供阻止天数的列表以通过selectableDayPredicate禁用天数。我尝试了FutureBuilder,但由于经验不足而失败。除非您可以将
getBlockedDays()
synchronous打开,否则无法同步返回值。您可以尝试在initState中使用匿名异步方法:
()async{/*code here*/}();
。您还应该能够使用状态管理解决方案来执行此操作。查看您是否不知道它是什么。