我正在创建一个具有TextField的页面,当用户在其中输入3+字符时,我会从数据库中获取包含插入文本的行。在我提供的示例中,我通过获取一个列表来模拟这一点。在此列表显示给用户之后,用户可以点击其中的一行以转到另一页。

gist example

我的问题是,当我点击一行MaterialPageRoute WidgetBuilder运行两次时,这是日志:

---------- onTap ----------
---------- MaterialPageRoute ----------
---------- SecondPage build ----------
---------- MaterialPageRoute ----------
---------- SecondPage build ----------

有人可以解释这种现象以及如何解决吗?

谢谢。

最佳答案

我也遇到过同样的问题。这是因为您没有向FutureBuilder添加任何条件。因此,当您使用setState()时,它将在下一次调用。

您可以使用Future函数中的标志来解决它,以便仅首次调用它。例如:

bool flag = true;
flag?FutureBuilder(
future: getData(),
builder: (BuildContext context, AsyncSnapshot snap){
  if(snap.connectionState != ConnectionState.done){
     return Center(child: CircularProgressIndicator(),);
  }else{
     return populate();
  }
},
):Container();
 Future getData()async{
    flag = false;
    return await fetchFromDatabase();
 }

关于dart - Flutter MaterialPageRoute WidgetBuilder运行两次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52605402/

10-09 21:56