Flutter 颤振-使用.popintil返回数据
我一直在使用Flutter 颤振-使用.popintil返回数据,flutter,dart,navigator,Flutter,Dart,Navigator,我一直在使用Navigator.pop并轻松地将数据传回一个屏幕。但是,如果使用Navigator.popUntil,将对象传递回目标屏幕的可接受方式是什么?没有。这也是没有意义的,因为结果应该返回到推送路由的路由 如果确实必须这样做,请使用多个pop调用: // Widget of Route A: String resultOfC = await Navigator.push(context, routeB); // Widget of Route B: String resultOfC
Navigator.pop
并轻松地将数据传回一个屏幕。但是,如果使用Navigator.popUntil
,将对象传递回目标屏幕的可接受方式是什么?没有。这也是没有意义的,因为结果应该返回到推送路由的路由
如果确实必须这样做,请使用多个pop
调用:
// Widget of Route A:
String resultOfC = await Navigator.push(context, routeB);
// Widget of Route B:
String resultOfC = await Navigator.push<String>(context, routeC);
Navigator.pop(context, resultOfC); // pass result of C to A
// Widget of Route C:
Navigator.pop(context, 'my result'); // pass result to B
//路由A的小部件:
String resultOfC=await Navigator.push(上下文,routeB);
//路线B的小部件:
String resultOfC=await Navigator.push(上下文,routeC);
Navigator.pop(上下文,resultOfC);//将C的结果传递给A
//路线C的小部件:
Navigator.pop(上下文“我的结果”);//把结果传给B
您可以使用路由设置中的参数
将数据传回特定的路由
例如:
//在MaterialApp中
材料聚丙烯(
onGenerateRoute:(设置){
开关(设置.名称){
案例“/”:
返回物料路线(
设置:路由设置(名称:“/”,参数:Map()),/(1)
建设者:()=>主页()
);
}
}
)
//在主页中
Navigator.of(context.push)(MaterialPage路由(生成器:(\u)=>StuffPage())
.然后{
final arguments=ModalRoute.of(context).settings.arguments作为映射;
最终结果=参数['result'];
};
//在填充页中
Navigator.of(context.popintil)((route){
如果(route.settings.name=='/')){
(route.settings.arguments作为映射)['result']='something';
返回true;
}否则{
返回false;
}
});
注意:您必须初始化参数
否则它将为空,这就是(1)的目的。我已经回答了这个问题,这可能会帮助您@Zulfiqar。看起来您正在将数据发送到一个级别。但要求是通过多个级别返回。您希望返回多少屏幕?多大(或什么类型)您想要传递的数据?没有通用的答案,根据以上问题的答案考虑一些解决方法。看看这是否有助于在视图中显示这些数据,而popUntil
则不会。因此,如果我们也能够popUntil并传递数据,那会更好。是的,还有其他方法。我想知道OP试图做什么。这可能是一个概念问题,他如何使用导航器。这一定是一个公认的答案。我认为它在每种情况下都能工作。干得好@hunghd路由设置(名称:“/”,参数:Map())
这是最重要的一行代码,一旦我弹回来,我需要清除参数。有什么办法吗?