我在处理这个问题上非常困难。我调用了一个异步函数,该函数将从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());
}
},
);
您首先应该了解什么是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] 删除。
我来说两句