(扑)使用FutureBuilder的ListView.builder无法正常工作

时间:2019-06-20 22:41:44

标签: flutter dart

我正在尝试在re = "^([+-]?%d*%.?%d+)%.?$" v = {'123', '23.45', '.45', '-123', '-273.15', '-.45', '+516', '+9.8', '+.5', -- regular matches '34.', '+2.', '-42.', --only matched by prolematic last optional dot '.', '-.', '+.', ' ', '', --expected no matches '.12.', '+.3.', '-.1.', --false positives (strictly speaking) '+1.23.45' -- no matches } for i, v in ipairs(v) do n = v:match (re) print (n) end 内使用ListViewListView.builder中显示项目。我的FutureBuilder的{​​{1}}函数如下所示:

future

我的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(dirty,state:   我/颤振(24728):_FutureBuilderState#f12a3):   I / flutter(24728):构建函数返回null。   I / flutter(24728):令人讨厌的小部件是:FutureBuilder   I / flutter(24728):构建函数绝不能返回null

     

引发了另一个异常:构建函数返回null。

注意:

我试图从FutureBuilder打电话给 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}'); }));}}) ,但没有使用_fetchListItems(),这对我也不起作用。

以下是该情况的链接:(Flutter/Dart) Two async methods in initState not working

请让我知道我应该使用initState还是FutureBuilder等待FutureBuilder加载数据。以及如何使它起作用,因为似乎没有一种方法对我有用:(

2 个答案:

答案 0 :(得分:0)

对于您的情况,不必使用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}');
              }));
    }
  });

答案 1 :(得分:0)

据我所知,您的获取_fetchListItems方法不是问题。

您的错误消息非常清楚,“构建函数返回null”。在这种情况下,返回null的方法是作为构建器参数传递给FutureBuilder的匿名函数。您只是在else案例中缺少了return关键字,因为您只是在创建Container的实例,而不返回它。

类似这样的东西:

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}');                                           
                    }
                )
            );
         }
     }
)

我不知道您的代码是否还有其他问题,但这应该可以解决您所询问的特定错误消息。