[英]Flutter: How to pass parameter to FutureBuilder future instance?
为了防止重建,我在FutureBuilder
使用了未来实例_futureInstance
:
var _futureInstance;
Future _loadData() async {
// ...
}
@override
void initState() {
super.initState();
_futureInstance = _loadData();
}
@override
Widget build(BuildContext context) {
body: FutureBuilder(
future: _futureInstance,
// ...
)
}
效果很好,现在如果_loadData
方法有一个参数,例如_loadData(int i)
,我如何将参数i
传递给_futureInstance
?
我用另一种方式解决了这个问题,使用MaterialApp.onGenerateRoute
。
作为这个答案: 颤振:从 Widget 状态的 initState 中的导航器获取传递的参数
我在initState
方法中获取参数:
@override
void initState() {
super.initState();
_futureInstance = _loadData(widget.parameter_key);
// ...
在build
,代码不会改变:
@override
Widget build(BuildContext context) {
body: FutureBuilder(
future: _futureInstance,
// ...
)
}
这样, _loadData
方法_loadData
可以使用各种参数,调用setState
时不会重新_loadData
widget。
@override
void initState() {
super.initState();
_futureInstance = (int i) => _loadData(i);
}
@override
Widget build(BuildContext context) {
body: FutureBuilder(
future: _futureInstance(1), // pass your number here
// ...
)
}
不确定 _futureInstance 的用途,也许您不需要定义实例?
Future _loadData(val) async {
// ...
}
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
body: FutureBuilder(
future: _loadData(1),
// ...
)
}
我会这样接近
var _lastInt = 0;
var _lastFuture;
Future _loadData(int i) async {
if(_lastInt!=i||_lastFuture==null){
//do work
_lastInt = i;
_lastFuture = ;
}
return _lastFuture;
}
@override
Widget build(BuildContext context) {
body: FutureBuilder(
future: _loadData(1),
// ...
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.