【问题标题】:Flutter - Pop until a screen without routeFlutter - 弹出直到没有路线的屏幕
【发布时间】:2020-05-29 00:17:27
【问题描述】:

我有一个这样启动的 Flutter 应用程序:

void main() async {

  // Check if user is logged in

  runApp(
    MaterialApp(
      home: (isLoggedIn) ? MainPage() : PageLogin(),
    ),
  );
}

我的 MainPage(和我的 LoginPage)只是 2 个常规的 Stateful Widget。

class MainPage extends StatefulWidget {
  MainPage({Key key, this.selectedPageDefault = 0}) : super(key: key);

  @override
  _MainPageState createState() => _MainPageState();
}

假设我还有 2 个页面,就像 MainPage 一样:PageOnePageTwo
当我点击MainPage 上的一个按钮时,它会将我带到PageOne,当我点击PageOne 上的一个按钮时,它会将我带到PageTwo
我去他们使用:

Navigator.of(context).push(
  MaterialPageRoute(
    builder: (context) => PageOne(), // Or PageTwo
  ),
);

现在,当我点击PageTwo 中的按钮时,我想返回MainPage
我可以使用Navigator.of(context).popUntil(...),但是它需要使用路由,我没有使用路由去MainPage

这只是一个示例,但在实际应用中,MainPage 之后的页面不止 2 页,因此我不能只使用pushReplacement 或一种棘手的方式来实现这一点。

我怎样才能回到MainPage

【问题讨论】:

    标签: flutter dart flutter-navigation


    【解决方案1】:

    使用这个Navigator.of(context).popUntil((route) => route.isFirst)

    【讨论】:

      【解决方案2】:

      你需要像这样添加设置

      
      Navigator.of(context).push(
        MaterialPageRoute(
          builder: (context) => MainPage(),
          settings : RouteSettings()..name = 'MainPage',
        ),
      );
      Navigator.of(context).push(
        MaterialPageRoute(
          builder: (context) => PageOne(),
          settings : RouteSettings()..name = 'PageOne',
        ),
      );
      Navigator.of(context).push(
        MaterialPageRoute(
          builder: (context) => PageTwo(),
          settings : RouteSettings()..name = 'PageTwo',
        ),
      );
      

      你可以用这个

       Navigator.of(context).popUntil(ModalRoute.withName('MainPage'));
      

      【讨论】:

      • 您能告诉我如何在我的main() 函数中使用它们吗?我应该在MaterialApphome 属性中设置导航器功能而不是我的页面吗?
      • @Elynad 如果你的页面肯定是第一个堆栈,你可以使用这个'Navigator.of(context).popUntil((route) => route.isFirst)'
      • 效果很好,谢谢@Taz!将您的评论写为答案,我会将其标记为已接受的答案。
      • 使用 RouteSettings(name:'PageTwo' ) 而不是 RouteSettings()..name = 'PageTwo' 因为名称是最终变量
      猜你喜欢
      • 2020-03-06
      • 2019-12-15
      • 2020-12-11
      • 1970-01-01
      • 2021-03-22
      • 2020-11-08
      • 1970-01-01
      • 2018-09-01
      • 2020-11-30
      相关资源
      最近更新 更多