在我的Flutter项目中,我试图通过使用FutureBuilder来实现按钮单击事件。基本上,当单击按钮时,它应该获取数据并显示在表格中。所以我的按钮onPressed事件处理如下:
onPressed: () async{
if (_formKey.currentState.validate()) {
_formKey.currentState.save();
var p = double.parse(loanAmount);
var r = double.parse(interestRate);
var n = int.parse(monthes);
Api api = new Api();
new FutureBuilder<List>(
future: api.calculateEmi(p, r, n),
builder: (BuildContext buildContext, AsyncSnapshot<List> snapshot) {
if (!snapshot.hasData) {
return Center(child: CircularProgressIndicator());
} else {
print( snapshot.data);
return new SingleChildScrollView(
padding: const EdgeInsets.all(8.0),
child: DataTableWidget(listOfColumns: snapshot.data.map(
(e)=>{
'Month': e['Month'],
'Principal': e['Principal'],
'InterestP': e['InterestP'],
'PrinciplaP': e['PrinciplaP'],
'RemainP': e['RemainP']
}).toList()
),
);
}
}
);
}
}
Api调用正在工作,并且调用了calculateEmi方法并返回了数据(地图列表),但是视图只是未更新,并且根本没有表格出现,我在构建器部分使用了断点,但是它从未成功我在哪里做错了,有人可以帮忙吗?谢谢。
答案 0 :(得分:0)
FutureBuilder
需要插入到flutter小部件树中的某个位置。仅仅创建一个新的FutureBuilder
并不能告诉flutter如何处理它。
我猜想您是想将您创建的FutureBuilder
放在onPressed
方法的父窗口小部件中。如果只需要在按下按钮时才显示它,可以使用bool
来决定是否显示FutureBuilder
。
例如。
Widget build(context) {
if(buttonPressed) {
return FutureBuilder(
...
);
}
else {
return Container();
}
}