Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 我应该如何在另一个异步函数中使用异步未来列表?_Flutter_Asynchronous_Dart - Fatal编程技术网

Flutter 我应该如何在另一个异步函数中使用异步未来列表?

Flutter 我应该如何在另一个异步函数中使用异步未来列表?,flutter,asynchronous,dart,Flutter,Asynchronous,Dart,我正在尝试使用异步方法从网站获取url列表。 在获得URL列表后,我尝试在另一个异步方法中使用URL 以下是获取URL的示例: void\u getData()异步{ 最后答复= 等待http.get('https://www.whateverurl'); 打印(响应状态码); documentdocument=parser.parse(response.body); final-elements2=document.getElementsByClassName('image-card-wrap

我正在尝试使用异步方法从网站获取url列表。 在获得URL列表后,我尝试在另一个异步方法中使用URL

以下是获取URL的示例:

void\u getData()异步{
最后答复=
等待http.get('https://www.whateverurl');
打印(响应状态码);
documentdocument=parser.parse(response.body);
final-elements2=document.getElementsByClassName('image-card-wrapper');
设置状态(){
//获取链接,如/tiger/catalina等。
urlList=elements2.map((元素)异步{
url='1〕https://www.whateverurl' +
元素。getElementsByTagName('a')[0]。属性['href'];
打印(element.getElementsByTagName('a')[0].attributes['href']);
返回url;
}).toList();
等待(url列表);;
});
}
这是成功的。我可以拿到名单。我无法解决的是:我试图在另一个异步函数中使用此url列表来获取每个项目的特定技术信息

\u tryFetch(列表URL)异步{
字符串e='';
for(URL中的变量项){
试一试{
final response2=等待http.get(item);
documentdocument2=parser.parse(response2.body);
final elements=document2.getElementsByClassName('sqs-block-content');
elements.forEach((element){
if(element.getElementsByTagName('li').isNotEmpty){
列表a=element.getElementsByTagName('li');
印刷品(a.长度);
对于(变量i=0;i
在我的脚手架中,当尝试在ListView.builder中使用此teksniskInfo[index]时; 它抛出错误:未来字符串不是字符串的子字符串…

我试图添加一个按钮来使用_tryFetch()函数。我一按按钮它就工作了。但问题是,当我第一次导航到页面时,它抛出了我提到的错误

总结,;如何在另一个future函数中使用future列表?

前言

  • async和await关键字支持异步编程,允许您编写类似于同步代码的异步代码

  • 每个标记为
    async
    的函数返回未来

  • 因此,在另一个异步函数中使用异步函数(返回Future)的方法是等待函数的结果

    Future<String> foo() => ...;
    
    Future<void> bar() {
      final String = await foo();
    }
    
    ...
    await bar(); //somewhere else    
    ...
    
    您可以通过在异步结果之后调用
    setState
    来缓解这一问题

    void _getData() async {
      ...
      await _tryFetch();
      ...
      setState((){});
    }
    
    现在,您需要等待列表中的每个未来(最后等待)

    List urlist=elements2.map((元素)异步{。。。
    _tryFetch(列表URL)异步{
    字符串e='';
    for(URL中的变量项){
    试一试{
    final response2=wait http.get(wait item);//每个都是您需要等待的未来
    
    但是不需要将
    async
    匿名函数映射到(…)

    结果将是
    List urlist=elements2.map((element){…
    ,无需等待每个列表项

    请随时联系我的评论

    前言

  • async和await关键字支持异步编程,允许您编写类似于同步代码的异步代码

  • 每个标记为
    async
    的函数返回未来

  • 因此,在另一个异步函数中使用异步函数(返回Future)的方法是等待函数的结果

    Future<String> foo() => ...;
    
    Future<void> bar() {
      final String = await foo();
    }
    
    ...
    await bar(); //somewhere else    
    ...
    
    您可以通过在异步结果之后调用
    setState
    来缓解这一问题

    void _getData() async {
      ...
      await _tryFetch();
      ...
      setState((){});
    }
    
    现在,您需要等待列表中的每个未来(最后等待)

    List urlist=elements2.map((元素)异步{。。。
    _tryFetch(列表URL)异步{
    字符串e='';
    for(URL中的变量项){
    试一试{
    final response2=wait http.get(wait item);//每个都是您需要等待的未来
    
    但是不需要将
    async
    匿名函数映射到(…)

    结果将是
    List urlist=elements2.map((element){…
    ,无需等待每个列表项


    请随时在评论中与我联系

    尝试将wait添加到urlist.wait\u tryFetch(wait urlist);或者删除elements2.map中的异步尝试将wait添加到urlist.wait\u tryFetch(wait urlist);或者删除elements2.map中的异步