我在路由中使用FutureBuilder
,该路由会在从数据库中获取数据后显示数据。
我发现,当我打开第二条路线时,即使本地路线不是当前路线,也称为本地路线的构建方法。但是,我希望如果本地路由不是当前路由,则build方法不会获取数据。
这是我尝试实现的代码:
class HomeRoute extends StatefulWidget { State<StatefulWidget> createState() => HomeRouteState(); }
class HomeRouteState extends State<HomeRoute> {
@override
Widget build(BuildContext context) => Scaffold(
//...
drawer: Drawer(
// There is a ListTile that can push SecondRoute
),
body: FutureBuilder(
future: _getData(),
builder: (BuildContext context, AsyncSnapshot snapshot) {/* ... */}
),
);
_getData() async {
if(/* this route is the current one */) {
// get data
}
}
}
答案 0 :(得分:0)
因此,基本上,您希望阻止主页build()
在不可见时被调用。这是您可以尝试的。
bool _isHomeVisible = true;
@override
Widget build(BuildContext context) {
return _isHomeVisible ? YourWidgetImplementation() : Container();
}
在进行导航之前,请执行此操作。
void _navigateToNewPage() {
_isHomeVisible = false; // going to new page, make it false
Navigator.push(...).then((_) {
_isHomeVisible = true; // coming back to home page, make it true
});
}