Flutter 为什么我的飞架背扣总是回根?
如果我有成堆的屏幕:A->B->C,当我按下模拟器上的后退按钮或按下脚手架上的后退按钮时,我总是返回A,而不是B。为什么?如何修复它?我在地图上搜索 这是我如何推和弹出。这些代码被简化为只显示push/pop和屏幕构建功能Flutter 为什么我的飞架背扣总是回根?,flutter,navigation,Flutter,Navigation,如果我有成堆的屏幕:A->B->C,当我按下模拟器上的后退按钮或按下脚手架上的后退按钮时,我总是返回A,而不是B。为什么?如何修复它?我在地图上搜索 这是我如何推和弹出。这些代码被简化为只显示push/pop和屏幕构建功能 void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return Ma
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: UserListPage()
);
}
}
class UserListPage extends StatefulWidget {
@override
_UserListPageState createState() => _UserListPageState();
}
class _UserListPageState extends State<UserListPage> {
...
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("User list")),
body: Builder(builder: (context) {
InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SessionListPage(userId: users[index].id)
),
child: ...
})
}),
);
}
...
}
class SessionListPage extends StatefulWidget {
final int userId;
SessionListPage({ this.userId }) : super();
@override
_SessionListPageState createState() => _SessionListPageState();
}
class _SessionListPageState extends State<SessionListPage> {
...
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("Session list")),
body: Builder(builder: (context) {
InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => DrawingPage(userId: widget.userId, sessionId: sessions[index].id)
),
child: ...
})
}),
);
}
...
}
class DrawingPage extends StatefulWidget {
final int userId;
final int sessionId;
DrawingPage({ this.userId, this.sessionId }) : super();
@override
_State createState() => _State();
}
class _State extends State<DrawingPage> {
@override
Widget build(BuildContext context) {
return Scaffold(appBar: AppBar(title: Text("Enter the Number")),
body: Builder(builder: (context) {
InkWell(
onTap: () { Navigator.pop(context); } // here it returns straight to UserListPage instead of SessionListPage
child: ...
})
}
));
}
}
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
视觉密度:视觉密度。自适应平台密度,
),
主页:UserListPage()
);
}
}
类UserListPage扩展StatefulWidget{
@凌驾
_UserListPageState createState()=>\u UserListPageState();
}
类_UserListPageState扩展状态{
...
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:文本(“用户列表”),
正文:生成器(生成器:(上下文){
墨水池(
onTap:(){
导航器。推(
上下文
MaterialPage路由(生成器:(上下文)=>SessionListPage(用户id:users[index].id)
),
孩子:。。。
})
}),
);
}
...
}
类SessionListPage扩展StatefulWidget{
最终int用户标识;
SessionListPage({this.userId}):super();
@凌驾
_SessionListPageState createState()=>_SessionListPageState();
}
类_SessionListPageState扩展状态{
...
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(标题:文本(“会话列表”),
正文:生成器(生成器:(上下文){
墨水池(
onTap:(){
导航器。推(
上下文
MaterialPageRoute(生成器:(上下文)=>DrawingPage(userId:widget.userId,sessionId:sessions[index].id)
),
孩子:。。。
})
}),
);
}
...
}
类DrawingPage扩展StatefulWidget{
最终int用户标识;
最后一次会议d;
DrawingPage({this.userId,this.sessionId}):super();
@凌驾
_State createState()=>_State();
}
类_状态扩展状态{
@凌驾
小部件构建(构建上下文){
返回脚手架(appBar:appBar(标题:文本(“输入编号”)),
body:Builder(Builder:(上下文){
墨水池(
onTap:(){Navigator.pop(context);}//在这里它直接返回到UserListPage而不是SessionListPage
孩子:。。。
})
}
));
}
}
我注意到的一件事是,对于提供给push和pop的上下文,是来自Builder,而不是来自Widget build函数的上下文。它有任何影响吗
请从所有位置删除super();
请从所有位置删除super();
杨,工作正常。请查看下面的链接
Young,它工作正常。请查看下面的链接
你检查了我的代码吗?你好@NikhilVadoliya。我检查了你的代码,它包含基本的颤振启动代码和“按钮”演示。你确定你给了我正确的链接吗?这个链接过期了,我将分享它。你检查了我的代码吗?你好@NikhilVadoliya。我检查了你的代码,它包含基本的颤振启动代码“按钮”演示。你确定你给了我正确的链接吗?此链接已过期,whyI将共享它