如何在其构建方法中检测路线是否为当前路线

时间:2019-01-19 05:04:06

标签: dart flutter

我在路由中使用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
    }
  }
}

1 个答案:

答案 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
  });
}