繁体   English   中英

Flutter:如何将参数传递给 FutureBuilder 未来实例?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM