Flutter:如何避免在现有路线上推同一条路线

时间:2019-01-28 21:21:32

标签: flutter

我具有底部导航栏的视图,当您按下导航栏项目时,新的路线就会被推送到视图中。

 final navigatorKey = GlobalKey<NavigatorState>();

 @override
  Widget build(BuildContext context) => MaterialApp(
    home: Scaffold(
      key: _scaffoldKey,
      body: _buildBody(context),
      bottomNavigationBar: _buildBottomNavigationBar(context),
    ),
  );

 void routeToView(routeIndex) {
      navigatorKey.currentState.pushNamed(pagesRouteFactories.keys.toList()[routeIndex]);
  }

我想防止在当前视图上推送相同的路由。我想将当前路线与我们尝试推入的新路线进行比较,如果相同则忽略推入路线。

如果要尝试的路线与我相同,我想将视图滚动到顶部

任何想法。

2 个答案:

答案 0 :(得分:3)

  

NavigatorState没有公开用于获取路径的API   当前路线,并且Route不公开用于确定路线的API   路线的路径。路由可以是(通常是匿名的)。您可以   找出给定的路线是否在导航器堆栈的顶部   现在使用isCurrent方法,但这对于   您的用例。

https://stackoverflow.com/a/46498543/2554745

这是我能想到的最接近的解决方案:

Navigator.of(context).pushNamedAndRemoveUntil(
  "newRouteName",
  (route) => route.isCurrent
    ? route.settings.name == "newRouteName"
      ? false
      : true
    : true);

如果路由名称为“ newRouteName”,则会弹出当前路由,然后推送新的路由,否则不会弹出任何内容。

答案 1 :(得分:0)

这对我有用:

@component('mail::message')
     {{ $mailData['title'] }}

    The body of your message.

    @component('mail::button', ['url' => $mailData['url']])
        Button Text
    @endcomponent

    Thanks,<br>
    {{ config('app.name') }}
@endcomponent