【问题标题】:Initializing Lists to Avoid Potential Errors初始化列表以避免潜在错误
【发布时间】:2021-06-05 00:11:38
【问题描述】:

这个函数

List<int> _calculateTrips() {
    List<int> trips = [];
    trips = List.generate(
      30,
      (index) {
        var counter = 0;
        var aDay = DateTime.now().subtract(Duration(days: index));
        for (var aWalk in walks) {
          if ((aDay.month == aWalk.month) && (aDay.day == aWalk.day)) {
            counter++;
          }
        }
        trips.add(counter);
      },
    );
    return trips;
  }

创建错误The body might complete normally, causing null to be returned, but the return type is a potentially non-nullable type.Try adding either a return or a throw statement at the end. 我有点难以理解该消息,因为(a)我认为我在函数开头初始化了列表,并且(b)我认为我最后有一个 return 语句。

【问题讨论】:

    标签: list flutter dart


    【解决方案1】:

    问题在于您传递给List.generate() 的函数。它需要一个E Function(int),其中E 是元素的类型,例如:

    final evenNumbers = List.generate(10, (index) {
      return index * 2;
    });
    

    您的问题来自trips.add(counter):

    List<int> trips = [];
    trips = List.generate(30, (index) {
      final trip = calculateTrip(index);
      trips.add(trip);
    })
    

    内部函数必须是 int Function(int)(即接受 int 并返回 int 的函数),因为您的列表是 List&lt;int&gt;

    但是,您的内部函数永远不会返回任何内容。

    只需将trips.add(counter); 替换为return counter; 即可解决此错误。您可能还想稍微重构一下您的函数:

    List<int> _calculateTrips() => List.generate(30, (index {
      var counter = 0;
      var aDay = DateTime.now().subtract(Duration(days: index));
      for (var aWalk in walks) {
        if ((aDay.month == aWalk.month) && (aDay.day == aWalk.day)) {
          counter++;
        }
      }
      return counter;
    });
    

    【讨论】:

    • 非常有用。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-08-27
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2022-12-06
    • 2015-02-28
    • 1970-01-01
    相关资源
    最近更新 更多