Flutter/Dart - 向前传递上下文以便 Navigator.pop 返回两个上下文?
Flutter/Dart - Pass Context Forward in order to Navigator.pop two Contexts back?
我需要能够弹出两个页面。当我使用命名路由动态创建页面时,这是不切实际的。那么有没有一种方法可以将上下文从原始页面传递到目标页面?
在我原来的页面上;
Navigator.push(
context,
MaterialPageRoute(builder: (originalcontext) => SecondRoute()),
);
然后在 SecondRoute 的页面上我有:
Navigator.push(
context,
MaterialPageRoute(builder: (originalcontext) => ThirdRoute()),
);
然后在 ThirdRoute 页面上,我想跳回原始页面 - 绕过 SecondRoute 页面。
Navigator.pop(originalcontext);
您可以这样定义 SecondRoute
:
class SecondRoute extends StatelessWidget
{
final BuildContext originalContext;
//other properties
SecondRoute({this.originalContext}); //Initialize other properties
//Now use the 'originalContext'
}
同样你可以定义你的 ThirdRoute
.
现在通过 originalContext
,
Navigator.push(
context,
MaterialPageRoute(builder: (originalcontext) => SecondRoute(originalContext:originalcontext)),
);
编辑 : 原题已编辑
第一种方法:
试试这个:
Navigator.of(context).popUntil((route) => route.isFirst)
把上面的代码放在你的
ThirdRoute()
第二种方法:
把这个放在你的SecondRoute()
Navigator.pushReplacement(context, MaterialPageRoute(builder: (BuildContext context) => ThirdRoute()));
而不是普通的 Navigator.push(...);
然后在你的 ThirdRoute()
上添加这个
Navigator.of(context).pop();
我需要能够弹出两个页面。当我使用命名路由动态创建页面时,这是不切实际的。那么有没有一种方法可以将上下文从原始页面传递到目标页面?
在我原来的页面上;
Navigator.push(
context,
MaterialPageRoute(builder: (originalcontext) => SecondRoute()),
);
然后在 SecondRoute 的页面上我有:
Navigator.push(
context,
MaterialPageRoute(builder: (originalcontext) => ThirdRoute()),
);
然后在 ThirdRoute 页面上,我想跳回原始页面 - 绕过 SecondRoute 页面。
Navigator.pop(originalcontext);
您可以这样定义 SecondRoute
:
class SecondRoute extends StatelessWidget
{
final BuildContext originalContext;
//other properties
SecondRoute({this.originalContext}); //Initialize other properties
//Now use the 'originalContext'
}
同样你可以定义你的 ThirdRoute
.
现在通过 originalContext
,
Navigator.push(
context,
MaterialPageRoute(builder: (originalcontext) => SecondRoute(originalContext:originalcontext)),
);
编辑 : 原题已编辑
第一种方法: 试试这个:
Navigator.of(context).popUntil((route) => route.isFirst)
把上面的代码放在你的
ThirdRoute()
第二种方法:
把这个放在你的SecondRoute()
Navigator.pushReplacement(context, MaterialPageRoute(builder: (BuildContext context) => ThirdRoute()));
而不是普通的 Navigator.push(...);
然后在你的 ThirdRoute()
上添加这个
Navigator.of(context).pop();