Flutter 如何摆脱';未来<;动态>';在飞舞/飞镖中?

Flutter 如何摆脱';未来<;动态>';在飞舞/飞镖中?,flutter,dart,Flutter,Dart,我有以下代码 import 'package:http/http.dart' as http; import 'dart:convert'; import 'dart:async'; main(){ var list = logic(); removeOne(list); } logic() async{ final result = await http.get('https://invidio.us/api/v1/search?q=tech+lead'); final

我有以下代码

import 'package:http/http.dart' as http;
import 'dart:convert';
import 'dart:async';

main(){
  var list = logic();
  removeOne(list);
}


logic() async{
  final result = await http.get('https://invidio.us/api/v1/search?q=tech+lead');
  final data = json.decode(result.body);
  final myList = [];
  data.forEach((e) {    
    myList.add({"title": e['title'], 'videoId': e['videoId'], 'duration': e['lengthSeconds'], "date": e['publishedText']});
    print(myList);
  });
  return myList;
}

removeOne(aList){
  aList.removeLast();
  print(aList);
}

当我运行它时,我得到以下错误

Unhandled exception:
NoSuchMethodError: Class 'Future<dynamic>' has no instance method 'removeLast'.
Receiver: Instance of 'Future<dynamic>'
Tried calling: removeLast()
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
#1      removeOne (file:///Users/macpro/Desktop/minimaltube/logic.dart:23:9)
#2      main (file:///Users/macpro/Desktop/minimaltube/logic.dart:7:3)
#3      _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:305:19)
#4      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12)
未处理的异常:
NoSuchMethodError:类“Future”没有实例方法“removeLast”。
接收者:“未来”的实例
已尝试调用:removeLast()
#0 Object.noSuchMethod(省道:核心补片/对象补片。省道:51:5)
#1删除一个(file:///Users/macpro/Desktop/minimaltube/logic.dart:23:9)
#2主要(file:///Users/macpro/Desktop/minimaltube/logic.dart:7:3)
#3_星状。(省道:隔离补片/隔离补片。省道:305:19)
#4 _RawReceivePortImpl._handleMessage(dart:隔离补丁/隔离补丁。dart:172:12)
如何摆脱
var列表
成为
“未来”
?我希望它成为一个var,这样我以后就可以访问它,这样
removeOne(list)
就可以完成它的工作。

main()async{
main() async {

List<String> list = await logic<String>();
removeOne(list);

}


Future<List<T>>logic<T>() async{
      final result = await http.get('https://invidio.us/api/v1/search?q=tech+lead');
      final data = json.decode(result.body);
      final myList = [];
      data.forEach((e) {    
      myList.add({"title": e['title'], 'videoId': e['videoId'], 'duration': 
      e['lengthSeconds'], "date": e['publishedText']});
      print(myList);
  });
 return myList;
}

removeOne(aList){
  aList.removeLast();
  print(aList);
}
列表=等待逻辑(); 移除一个(列表); } Futurelogic()异步{ 最终结果=等待http.get('https://invidio.us/api/v1/search?q=tech+铅'; 最终数据=json.decode(result.body); 最终myList=[]; 数据.forEach((e){ 添加({“title”:e['title'],'videoId':e['videoId'],'duration': e['lengthSeconds'],“date”:e['publishedText']}); 印刷品(myList); }); 返回myList; } removeOne(列表){ aList.removeLast(); 印刷品; }
未来尚未解决,必须先解决,以便您可以将返回的数据用作列表

编译器在main方法中一步一步地运行,在未来被解析(仍然是未来)之前,它被分配给变量列表,然后在我们将未来传递给函数“removeOne(list)”时移到下一行

要解决未来问题,可以在函数调用后添加一个.then(),以便它等待未来,并在未来到来时将其转换为所需的数据类型

按如下所示替换main中的代码:

logic().then((list) => removeOne(list));
main() async {
 var list = await logic();
 removeOne(list);
}
或者,您可以使用另一种方法,使完整的主方法异步,这是有争议的,有些人说这不是一个好的做法。具体如下:

logic().then((list) => removeOne(list));
main() async {
 var list = await logic();
 removeOne(list);
}
var list=wait logic()