颤振如何从异步功能获取数据

VitorAraújo

我在处理这个问题上非常困难。我调用了一个异步函数,该函数将从SQLite获取一些信息,但是我似乎无法获取它。它只是呈现一个空白屏幕,在其中应该是一个列表视图。

List allItems = new List();


Future<void> pegaDados() async{
  var itens = await geraCardapio();

  for (var i = 0; i < itens.length; i++) {
    print((itens[i].toMap()));
    allItems.add(itens[i].toMap());
  }

}

print(pegaDados());


  return ListView.builder(
    itemCount: allItems.length,
    itemBuilder: (context, index) {
      return ListTile(
        leading: Image.asset("assets/"+ allItems[index]['imagem'], fit: BoxFit.contain,),
        title: Text(allItems[index]['pedido']),
        trailing: Text(allItems[index]['valor']),
      );
    },
  );

非常感谢你。

感谢两个回答了这个问题的人,我设法得到了解决方案(使用这两个解决方案,我都设法得到了这个小科学怪人)

    Future<dynamic> pegaDados() async{
  var allItems = await geraCardapio();

  return allItems.map((allItems) => allItems.toMap());
}



return FutureBuilder(
      future: pegaDados(),
      builder: (context, snapshot){
        if(snapshot.connectionState == ConnectionState.done){
          print(snapshot.data);
          var objeto = [];

          for (var i in snapshot.data) {
            objeto.add(i);
          }

          print(objeto);
          return Container(
              child: ListView.builder(
            itemCount: objeto.length,
            itemBuilder: (context, index) {
              return ListTile(
                leading: Image.asset("assets/"+ objeto[index]['imagem'], fit: BoxFit.contain,),
                title: Text(objeto[index]['pedido']),
                trailing: Text(objeto[index]['valor'].toString()),
              );
            },
              ),
          );
        }
        else if(snapshot.hasError){
          throw snapshot.error;
        }
        else{
          return Center(child: CircularProgressIndicator());
        }
      },
    );

感谢Mohammad Assem NasserEliya Cohen的帮助!

穆罕默德·阿塞姆·纳赛尔

您首先应该了解什么是Future操作(Future在您的情况下功能)。以后的操作是需要时间才能执行并稍后返回结果的操作。为了解决这个问题,我们使用了异步函数

异步功能可让您的程序在执行当前操作时继续执行其他操作。Dart使用Future对象(Futures)来表示异步操作的结果为了处理这些操作,我们可以使用async / await,但是不可能在小部件上集成async和await。因此,处理小部件中的期货非常棘手。为解决此问题,Flutter提供了一个名为的小部件FutureBuilder

在中FutureBuilder,它调用Future函数来等待结果,并在生成结果后立即调用我们在其中构建窗口小部件builder函数

应该是这样的:

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  List allItems = new List();

  Future<List> pegaDados() async{
    var items = await geraCardapio(); // TODO: Add this function to this class

    for (var i = 0; i < items.length; i++) {
      print((items[i].toMap()));
      allItems.add(items[i].toMap());
    }
  return items;
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(title: Text('Demo')),
      body: FutureBuilder(
        future: pegaDados(),
        builder: (context, snapshot){
          if(snapshot.connectionState == ConnectionState.done){
            return Container(
                child: ListView.builder(
              itemCount: snapshot.data.length,
              itemBuilder: (context, index) {
                return ListTile(
                  leading: Image.asset("assets/"+ snapshot.data[index]['imagem'], fit: BoxFit.contain,),
                  title: Text(snapshot.data[index]['pedido']),
                  trailing: Text(snapshot.data[index]['valor']),
                );
              },
                ),
            );
          }
          else if(snapshot.hasError){
            throw snapshot.error;
          }
          else{
            return Center(child: CircularProgressIndicator());
          }
        },
      ),
    );
  }
}

这是一个简短视频链接,将以FutureBuilder简洁的方式进行说明。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

颤振如何通过for循环在文本小部件中显示数组数据

来自分类Dev

颤振中的异步验证仍然存在问题

来自分类Dev

颤振-点击/触摸区域如何工作?

来自分类Dev

如何比较颤振中的时间?

来自分类Dev

如何用颤振罗盘找到方向?

来自分类Dev

颤振如何在按下后执行功能

来自分类Dev

颤振和块异步产量

来自分类Dev

颤振中stacktrace输出中的<异步悬挂>

来自分类Dev

颤振如何处理异步/等待中的错误

来自分类Dev

如何在颤振中缠绕异步功能和同步功能

来自分类Dev

如何在颤振中断开电话?

来自分类Dev

颤振拉起以从api提取数据

来自分类Dev

如何使容器在颤振中垂直居中?

来自分类Dev

颤振,阴影裁剪系统如何工作?

来自分类Dev

颤振如何通过for循环在文本小部件中显示数组数据

来自分类Dev

如何禁用颤振开关

来自分类Dev

飞镖/颤振:隔离的顶级功能的异步行为

来自分类Dev

如何从控制器层获取devicePixelRatio?-颤振

来自分类Dev

颤振索引Json数据

来自分类Dev

颤振和火焰-无法将视差效果移动到单独的类别[颤振新功能]

来自分类Dev

如何正确固定颤振中的行距

来自分类Dev

异步功能完成后颤振setState()

来自分类Dev

如何在颤振中管理状态?

来自分类Dev

如何在颤振中将数据从 TextFormField 传递到 List?

来自分类Dev

如何使用 Cloud Firestore 从颤振中的数据快照中获取特定值?

来自分类Dev

如何在颤振中更改分页数据表的颜色?

来自分类Dev

我在从 laravel api 获取数据时遇到问题(颤振)

来自分类Dev

我如何从不同的页面获取数据并使用颤振中的共享首选项将该数据呈现到另一个页面中

来自分类Dev

如何在颤振中从毫秒获取时间

Related 相关文章

热门标签

归档