【问题标题】:Future method calling api sometimes returns null sometimes not调用 api 的未来方法有时返回 null 有时不返回
【发布时间】:2020-08-03 04:18:28
【问题描述】:

在这个方法中,输出如下:

我/颤动(2928):200

我/颤动(2928):空

I/flutter (2928):[“图像”实例]

这也导致我的 FutureBuilder 中的 snapshot.data 为空。知道为什么会发生这种情况吗?

Future<List<Images>> getData( File f ) async {

List<Images> list;

// String link = "https://clothest.herokuapp.com/";
String link ="https://us-central1-velvety-rookery-274308.cloudfunctions.net/function-1";
var stream = new http.ByteStream(DelegatingStream.typed(f.openRead()));
var length = await f.length();
var postUri = Uri.parse(link);
var request = new http.MultipartRequest("POST", postUri);
var multipartFileSign = new http.MultipartFile('File', stream, length,
    filename: basename(f.path));
request.files.add(multipartFileSign);
request.headers.addAll({"content-type": "application/json"});
var response = await request.send();

print(response.statusCode); //200 OK

if (response.statusCode == 200){
  response.stream.transform(utf8.decoder).listen((value) {

          var data = json.decode(value);
          var rest = data["Items"] as List;

          list = rest.map<Images>((json) => Images.fromJson(json)).toList();

          print(list.toString());


  });

}
print(list.toString());
return list;

}

【问题讨论】:

    标签: api flutter future


    【解决方案1】:

    所以我设法通过使用另一个包而不是 HTTP 包来解决这个问题。 Dios 包是最好的关于 HTTP 请求的包。更新代码:

    Future<List<Images>> getData( File f ) async {
      List<Images> lst=[];
      String link ="https://us-central1-velvety-rookery-274308.cloudfunctions.net/function-1";
      Dio dio = new Dio();
      FormData formdata = new FormData(); // just like JS
      formdata.add('File', new UploadFileInfo(f, basename(f.path)));
      await dio.post(link, data: formdata, options: Options(
        method: 'POST',
        responseType: ResponseType.JSON // or ResponseType.JSON
    )).then((response) {
      print(response);
      if(response.statusCode==200){ //OK
         var responseBody = response.data;  //Map
         var rest = responseBody["Items"] as List;
         //print(rest);
         lst = rest.map<Images>((json) => Images.fromJson(json)).toList();   //instances of 'Images' object
         //print(lst);
      }
    }
    
    
    
    ).catchError((error) => print(error));
    
    return lst;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多