Flutter 为什么我的飞架背扣总是回根?

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

如果我有成堆的屏幕:A->B->C,当我按下模拟器上的后退按钮或按下脚手架上的后退按钮时,我总是返回A,而不是B。为什么?如何修复它?我在地图上搜索

这是我如何推和弹出。这些代码被简化为只显示push/pop和屏幕构建功能

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将共享它