我正在创建一个具有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/