Flutter (颤振)使用FutureBuilder的ListView.builder不工作
我正在尝试使用Flutter (颤振)使用FutureBuilder的ListView.builder不工作,flutter,dart,Flutter,Dart,我正在尝试使用ListView.builder在FutureBuilder中显示ListView中的项目。我的FutureBuilder的future函数如下所示: _fetchListItems() async { wait() async { number = await db.getNumber(userId); } await wait(); List rawFavouriteList = await db.getList(number); setStat
ListView.builder
在FutureBuilder
中显示ListView
中的项目。我的FutureBuilder
的future
函数如下所示:
_fetchListItems() async {
wait() async {
number = await db.getNumber(userId); }
await wait();
List rawFavouriteList = await db.getList(number);
setState((){
rawFavouriteList.forEach((item){
_faouriteList.add(Model.map(item));
}});
return _faouriteList;
}
FutureBuilder(
future: _fetchListItems(),
builder:(context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return Center(child: CircularProgressIndicator());
} else {Container( child: ListView.builder(
itemCount: _faouriteList.length,
scrollDirection: Axis.horizontal,
itemBuilder: (BuildContext context, int index) {
return Text(
'${_faouriteList[index].title}');
}));}})
FutureBuilder(
future: _fetchListItems(),
builder:(context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return Center(child: CircularProgressIndicator());
} else {
return Container(
child: ListView.builder(
itemCount: _faouriteList.length,
scrollDirection: Axis.horizontal,
itemBuilder: (BuildContext context, int index) {
return Text('${_faouriteList[index].title}');
}
)
);
}
}
)
我的FutureBuilder
如下所示:
_fetchListItems() async {
wait() async {
number = await db.getNumber(userId); }
await wait();
List rawFavouriteList = await db.getList(number);
setState((){
rawFavouriteList.forEach((item){
_faouriteList.add(Model.map(item));
}});
return _faouriteList;
}
FutureBuilder(
future: _fetchListItems(),
builder:(context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return Center(child: CircularProgressIndicator());
} else {Container( child: ListView.builder(
itemCount: _faouriteList.length,
scrollDirection: Axis.horizontal,
itemBuilder: (BuildContext context, int index) {
return Text(
'${_faouriteList[index].title}');
}));}})
FutureBuilder(
future: _fetchListItems(),
builder:(context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return Center(child: CircularProgressIndicator());
} else {
return Container(
child: ListView.builder(
itemCount: _faouriteList.length,
scrollDirection: Axis.horizontal,
itemBuilder: (BuildContext context, int index) {
return Text('${_faouriteList[index].title}');
}
)
);
}
}
)
以下断言被抛出building FutureBuilder(肮脏,状态:
I/颤振(24728):_FutureBuilderState#f12a3):
I/flatter(24728):生成函数返回null。
I/flatter(24728):有问题的小部件是:FutureBuilder
I/flatter(24728):构建函数不能返回null
引发了另一个异常:生成函数返回null
注意:
我试图从initState
调用\u fetchListItems()
,但没有使用FutureBuilder
,这对我也不起作用
以下是该案例的链接:
请告诉我是否应该使用
FutureBuilder
或initState
等待List
加载其数据。以及如何使其工作,因为这些方法似乎都不适用于我:(对于您的案例,没有必要使用setState,请尝试以下方法:
获取异步函数
_fetchListItems() async {
number = await db.getNumber(userId);
List rawFavouriteList = await db.getList(number);
List _faouriteList = rawFavouriteList.map((item)=>Model.map(item)).toList();
return _faouriteList;
}
FutureBuilder
FutureBuilder(
future: _fetchListItems(),
builder: (context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return Center(child: CircularProgressIndicator());
} else {
Container(
child: ListView.builder(
itemCount: snapshot.data.length,
scrollDirection: Axis.horizontal,
itemBuilder: (BuildContext context, int index) {
return Text('${snapshot.data[index].title}');
}));
}
});
据我所知,您的fetch
\u fetchListItems
方法不是问题所在
您的错误消息非常清楚,“生成函数返回null”。在本例中,返回null的方法是作为生成器参数传递给FutureBuilder
的匿名函数。您只是缺少else案例中的return
关键字,因为您只是创建容器的实例,而没有返回它
大概是这样的:
_fetchListItems() async {
wait() async {
number = await db.getNumber(userId); }
await wait();
List rawFavouriteList = await db.getList(number);
setState((){
rawFavouriteList.forEach((item){
_faouriteList.add(Model.map(item));
}});
return _faouriteList;
}
FutureBuilder(
future: _fetchListItems(),
builder:(context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return Center(child: CircularProgressIndicator());
} else {Container( child: ListView.builder(
itemCount: _faouriteList.length,
scrollDirection: Axis.horizontal,
itemBuilder: (BuildContext context, int index) {
return Text(
'${_faouriteList[index].title}');
}));}})
FutureBuilder(
future: _fetchListItems(),
builder:(context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return Center(child: CircularProgressIndicator());
} else {
return Container(
child: ListView.builder(
itemCount: _faouriteList.length,
scrollDirection: Axis.horizontal,
itemBuilder: (BuildContext context, int index) {
return Text('${_faouriteList[index].title}');
}
)
);
}
}
)
我不知道您的代码是否存在任何其他问题,但这应该可以解决您询问的特定错误消息。您可以显示您的函数\u bowlerIconFetch()
?@EdHuamani这是一个输入错误。\u fetchListItems()
仅限。没有\u bowlerIconFetch
。我已经更新了代码。这是一个愚蠢的错误。我感到很尴尬。如果你不指出,我会发疯,也不会很快找到它。谢谢:)没问题!发生在我们所有人身上。我已经删除了setState
我想知道使用rawFavoriteList.forEach((项){u faouriteList.add(Model.map(项));})您建议的代码>而不是\u faouriteList=rawFavoriteList.map((项)=>Model.map(项)).toList()代码>也请考虑回答这个问题:我相信你对你的答案有很好的理解。