Flutter - 弹出直到没有路线的屏幕
Flutter - Pop until a screen without route
我有一个这样启动的 Flutter 应用程序:
void main() async {
// Check if user is logged in
runApp(
MaterialApp(
home: (isLoggedIn) ? MainPage() : PageLogin(),
),
);
}
我的 MainPage(和我的 LoginPage)只是 2 个常规的 Stateful Widgets。
class MainPage extends StatefulWidget {
MainPage({Key key, this.selectedPageDefault = 0}) : super(key: key);
@override
_MainPageState createState() => _MainPageState();
}
假设我还有 2 个页面,就像 MainPage 一样:PageOne
和 PageTwo
.
当我单击 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
?
您需要添加这样的设置
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'));
使用这个Navigator.of(context).popUntil((route) => route.isFirst)
我有一个这样启动的 Flutter 应用程序:
void main() async {
// Check if user is logged in
runApp(
MaterialApp(
home: (isLoggedIn) ? MainPage() : PageLogin(),
),
);
}
我的 MainPage(和我的 LoginPage)只是 2 个常规的 Stateful Widgets。
class MainPage extends StatefulWidget {
MainPage({Key key, this.selectedPageDefault = 0}) : super(key: key);
@override
_MainPageState createState() => _MainPageState();
}
假设我还有 2 个页面,就像 MainPage 一样:PageOne
和 PageTwo
.
当我单击 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
?
您需要添加这样的设置
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'));
使用这个Navigator.of(context).popUntil((route) => route.isFirst)