Flutter - 弹出直到屏幕没有路由

Ely*_*nad 1 dart flutter flutter-navigation

我有一个 Flutter 应用程序,它的启动方式如下:

void main() async {

  // Check if user is logged in

  runApp(
    MaterialApp(
      home: (isLoggedIn) ? MainPage() : PageLogin(),
    ),
  );
}
Run Code Online (Sandbox Code Playgroud)

我的主页(和我的登录页面)只是 2 个常规的有状态小部件。

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

  @override
  _MainPageState createState() => _MainPageState();
}
Run Code Online (Sandbox Code Playgroud)

假设我还有 2 个页面,就像 MainPage :PageOnePageTwo
当我点击 上的按钮时MainPage,它会带我去PageOne,而当我点击 上的按钮时PageOne,它也会带我去PageTwo
我使用以下方式去找他们:

Navigator.of(context).push(
  MaterialPageRoute(
    builder: (context) => PageOne(), // Or PageTwo
  ),
);
Run Code Online (Sandbox Code Playgroud)

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

这只是一个例子,但在真正的应用程序上,我的后页不止 2 页MainPage,所以我不能只使用pushReplacement或 一种棘手的方法来实现这一点。

我怎样才能回去MainPage

Taz*_*Taz 7

您需要添加这样的设置


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',
  ),
);
Run Code Online (Sandbox Code Playgroud)

你可以用这个

 Navigator.of(context).popUntil(ModalRoute.withName('MainPage'));
Run Code Online (Sandbox Code Playgroud)


Taz*_*Taz 7

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