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()代码>