flutter - Flutter FutureBuilder 无法从方法中获得未来
问题描述
在颤振应用程序中,我实现了简单的搜索视图,用户可以从网络服务器搜索单词,我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;
}
}
并单击离子按钮进行搜索:
void _search() {
if (_searchController.text.length <= 0) {
}else{
_searchPost();
}
}
解决方案
您缺少return
第一个 if 中的语句
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),
),
);
}
推荐阅读
- javascript - 如何使用返回 Promises 的 NAPI 创建异步函数
- php - Windows 上的 Zend_config.h
- http - 当单击按钮以查看更改时,必须重新加载应用程序 (Flutter)
- linux - ps/pgrep 找不到运行脚本缺少 #!/bin/bash
- sql - SQL Server 中时间前导零
- java - 构建每天查询数据库并发送通知的调度程序的最佳方法是什么?
- c++ - 在复数中正确写入和打印精度(cout)的 C++ 问题?
- sql - 如何截断 sys.conversation_endpoints
- heroku - Heroku 术语“heroku”未被识别为 cmdlet 的名称
- php - 电子邮件发送失败:SMTP connect() 失败。https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting