故障排除Flutter Weather Widget中的错误-“日期时间?”'参数类型

rdrgkggo  于 2023-05-29  发布在  Flutter
关注(0)|答案(1)|浏览(233)

我准备了一个基于小部件https://pub.dev/packages/weather的方法,它从以下位置检索数据:https://openweathermap.org/current

bool isNight(Weather weather) {
    return DateTime.now().isAfter(weather.sunset) || DateTime.now().isBefore(weather.sunrise);
  }

不幸得到一个错误
错误:参数类型“DateTime?无法将“”分配给参数类型“DateTime”,因为“DateTime?'可为空,而'DateTime'不可为空。'DateTime'来自'dart:core'。return DateTime.now().isAfter(weather.sunset)||System. out. println();
我能做错什么?
准备一个逻辑门的类型是否实际是夜间

56lgkhnf

56lgkhnf1#

isAfter和isBefore接受DateTime类型作为参数,但weather.sunset和weather.日出是DateTime?类型。您需要在该行之前检查weather.sunset和weather.日出是否为null。

if (weather.sunset==null || weather.sunrise==null) return false; //or throw an exception.
return DateTime.now().isAfter(weather.sunset) || DateTime.now().isBefore(weather.sunrise);

因为你已经检查了weather.sunset和weather.日出是否为null,所以在下一行它们不能为null,所以Dart会将它们的类型提升为DateTime。如果你确定weather.sunset和weather.日出永远不会为空,你可以添加!在他们面前,如果没有检查。但如果它们为null,应用程序将崩溃。

return DateTime.now().isAfter(weather.sunset!) || DateTime.now().isBefore(weather.sunrise!);

阅读更多关于它在这里:https://dart.dev/null-safety/understanding-null-safety

相关问题