一尘不染

Flutter FutureBuilder不断被称为

flutter

我正在经历有趣的行为。我在有状态的小部件中有一个FutureBuilder。如果我一个人返回FutureBuilder,一切正常。我的API仅被调用一次。但是,如果我添加了额外的逻辑,并在两个小部件之间进行选择-
我可以在chrome中看到我的API被调用了数十次。我知道该build方法可以随时执行,但是这种额外的逻辑如何完全破坏Future的行为呢?

这是api调用一次的示例。

@override
  Widget build(BuildContext context) {
    return FutureBuilder(..);
}

这是api如果someBooleanFlag被多次调用的示例false

@override
  Widget build(BuildContext context) {
    if(someBooleanFlag){
      return Text('Hello World');
    }
    else{
    return FutureBuilder(..);
}

谢谢


阅读 340

收藏
2020-08-13

共1个答案

一尘不染

即使您的代码最初工作时,您仍然不能正确执行它,正确的方法是:

// Create instance variable
Future myFuture;

@override
void initState() {
  super.initState();

  // assign this variable your Future
  myFuture = getFuture();
}

@override
Widget build(BuildContext context) {
  if (someBooleanFlag) {
    return Text('Hello World');
  } else {
    return FutureBuilder(
      future: myFuture, // use it like this
      ...
    );
  }
}
2020-08-13