Flutter FutureBuilder 无法从方法中获得 future

标签 flutter

在 flutter 应用程序中,我实现了简单的搜索 View ,用户可以从 web 服务器搜索单词,我的 http 方法用于调用和获取数据,我可以在 console 上打印结果>,但我无法将其显示到 listview 中。

可能布局:

Container(
  height: 70.0,
  child: Row(
    children: <Widget>[
      Flexible(
        flex: 1,
        child: Padding(
          padding: const EdgeInsets.only(left: 8.0),
          child: TextField(
              controller: _searchController,
              textAlign: TextAlign.start,
              keyboardType: TextInputType.text),
              textInputAction: TextInputAction.send,),
        ),
      ),
      InkWell(
        child: Container(
          height: 40.0,
          width: 40.0,
          child: Icon(Icons.send, size: 25.0, color: Colors.black),
        ),
        onTap:_search,
      ),
    ],
  ),
),
Expanded(
  child: FutureBuilder(
      future: _searchPost(),
      builder: (context, snapshot) {
        if(snapshot.hasData) {
          List<Contents> content = snapshot.data;
          ListView.separated(
            itemBuilder: (context, index) {
              return ListTile(
                title: Text(content[index].title),
                ),
                subtitle: Text(content[index].createdAt),
                ),
              );
            },
            itemCount: content.length,
            separatorBuilder: (context, index) {
              return Divider(height: 1.0);
            },
          );
        }else if (snapshot.hasError){
          print('error);
        }

        return Center(
          child: CircularProgressIndicator(
            valueColor: AlwaysStoppedAnimation(Colors.blue),
          ),
        );
      }),
)

http调用方式:

  Future<List<Contents>> _searchPost() async {
    final response = await http.get('${Constants.searchPosts}${_searchController.text}').timeout(Duration(seconds: 1));
    if(response.statusCode == 200){
      final responseString = json.decode(response.body) as List;
      List<Contents> res= responseString.map((j)=>Contents.fromJson(j)).toList();

      print(json.decode(response.body));//<-- work fine and show result in console
      return res;
    }else{
      return null;
    }
  }

然后点击 ionic 按钮进行搜索:

  void _search() {
    if (_searchController.text.length <= 0) {
    }else{
      _searchPost();
    }
  }

最佳答案

您在第一个 if 中缺少 return 语句

  if(snapshot.hasData) {
          List<Contents> content = snapshot.data;
          return ListView.separated(
            itemBuilder: (context, index) {
              return ListTile(
                title: Text(content[index].title),
                ),
                subtitle: Text(content[index].createdAt),
                ),
              );
            },
            itemCount: content.length,
            separatorBuilder: (context, index) {
              return Divider(height: 1.0);
            },
          );
        }else if (snapshot.hasError){
          print('error);
          return Container();
        } else {

        return Center(
          child: CircularProgressIndicator(
            valueColor: AlwaysStoppedAnimation(Colors.blue),
          ),
        );
        }

关于Flutter FutureBuilder 无法从方法中获得 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57594335/

相关文章:

flutter - 如何处理 Stream Controller Flutter

flutter - 使用 Flutter 加载屏幕时如何淡入小部件?

flutter - 如何添加线性百分比指标

dart - 如何将对象列表添加到 Firestore?

javascript - Flutter WebView blob pdf 下载

android - Flutter 拨动开关和共享首选项

android - 如何在Flutter中实现类似iOS的流畅页面过渡动画?

redux - "next"应该总是在 Redux 中间件中最后调用吗?

dart - 如何在 Dart 中获取字符串中的最后 n 个字符?

flutter - 如何修复对话框中的溢出问题?