dart 正文可能正常完成,导致返回“null”,但返回类型"FutureOr〈List< Article>>“可能是不可为null的类型,

hi3rlvi2  于 2022-12-28  发布在  其他
关注(0)|答案(1)|浏览(256)

我试着用www.example.com做一个新闻应用程序newsapi.org,但是得到了The body might complete normally, causing 'null' to be returned, but the return type, 'FutureOr<List<Article>>', is a potentially non-nullable type. Try adding either a return or a throw statement at the end.
误差

getArticle()

我读过很多有同样问题的ppl,他们中的大多数被告知要添加return或throw,我已经这样做了,但错误仍然出现。
下面是我代码

import 'dart:convert';
import 'package:http/http.dart';
import 'package:medreminder/NewsArticle/models/article_models.dart';

class ApiService {



  final endPointUrl = "https://newsapi.org/v2/top-headlines?country=us&apiKey=cacee27fff544eb39d5fb29b28ca3788"; 

  Future<List<Article>> getArticle() async{
    Response res = await get(Uri.parse(endPointUrl));

    if(res.statusCode==200){
      Map<String, dynamic> json = jsonDecode(res.body);

      List<dynamic> body = json['articles'];

      List<Article> articles = body.map((dynamic item) => Article.fromJson(item)).toList();
    }else{
      throw("Cant get the News");
    }
  }
}

让我知道如果你们需要看到我的其他代码如果必要的话。谢谢你们

xtupzzrd

xtupzzrd1#

如错误所述:
尝试在末尾添加return或throw语句。
你需要return一些东西。在你的例子中,它是List<Article>
我读过很多有同样问题的人,他们中的大多数被告知要添加return或throw,我已经这样做了,但错误仍然出现。
这可能是因为您在if/else语句 * 中 * 添加了return语句,所以如果您的条件不满足,那么您仍然可能不会返回任何内容。
要避免该错误,代码应如下所示(null safe):

Future<List<Article>?> getArticle() async{
    Response res = await get(Uri.parse(endPointUrl));

    if(res.statusCode==200){
      Map<String, dynamic> json = jsonDecode(res.body);

      List<dynamic> body = json['articles'];

      List<Article> articles = body.map((dynamic item) => Article.fromJson(item)).toList();
      return articles;
    }else{

      return null;
    }

  }

现在,这个函数可以为空-这意味着如果响应为200,它将返回articles,否则,它将返回null

相关问题