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()也请考虑回答这个问题:我相信你对你的答案有很好的理解。