Flutter 颤振:如何用导航器堆栈中的数据恢复屏幕

Flutter 颤振:如何用导航器堆栈中的数据恢复屏幕,flutter,dart,navigation-drawer,Flutter,Dart,Navigation Drawer,我正在制作一个销售应用程序,在这个程序中,我使用Navigator命令使用抽屉在屏幕之间移动,并发现以下情况 1-打开应用程序时,它会进入进行销售的主屏幕 2-我选择了两种产品进行销售 3-在我离开包含这两种产品的销售屏幕后,立即转到客户屏幕 4-现在我需要回到销售屏幕,已经选择的两种产品应该仍然存在 好的,在第4部分中,使用键返回手机,它返回一个屏幕并转到这个销售屏幕(有两个产品),但是如果我进入抽屉并选择转到销售屏幕的选项,我如何在堆栈的开头搜索这个屏幕,而不是创建一个新的销售屏幕(如果没有

我正在制作一个销售应用程序,在这个程序中,我使用Navigator命令使用抽屉在屏幕之间移动,并发现以下情况

1-打开应用程序时,它会进入进行销售的主屏幕

2-我选择了两种产品进行销售

3-在我离开包含这两种产品的销售屏幕后,立即转到客户屏幕

4-现在我需要回到销售屏幕,已经选择的两种产品应该仍然存在

好的,在第4部分中,使用键返回手机,它返回一个屏幕并转到这个销售屏幕(有两个产品),但是如果我进入抽屉并选择转到销售屏幕的选项,我如何在堆栈的开头搜索这个屏幕,而不是创建一个新的销售屏幕(如果没有这两个产品,则为空)我之所以要这样做,是因为如果堆栈顶部只有一个屏幕,没问题,用户按返回键就可以了,但如果顶部有5或6个屏幕,用户必须返回所有屏幕,在背面按几次,以避免丢失销售屏幕上已经制作的内容,这是一个巨大的磨损。是否有ny navigator命令执行此操作?我已经查找了一些内容,但没有找到对我有帮助的内容

出票人代码

 @override
  Widget build(BuildContext context) {
    Size size = MediaQuery.of(context).size;
    return MultiLevelDrawer(
            backgroundColor: Color(0xfff0f3f4),
            rippleColor: Colors.white,
            subMenuBackgroundColor: Color(0xfff0f3f4),
            divisionColor: Colors.grey,
            header: Container(
              height: size.height * 0.25,
              child: Center(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                  Image.asset(
                  "Imagens/ACMIL_CIRCULAR.png",
                  width: 100,
                  height: 100,
                ),
                SizedBox(
                  height: 10,
                ),
                Text("Usuario : Iury")
              ],
            )),
            ),
            children: [
            MLMenuItem(
                leading: Icon(Icons.person),
                trailing: Icon(Icons.arrow_right),
                content: Text(
                  "Cadastro",
                ),
                subMenuItems: [
                  MLSubmenu(
                      onClick: () {
                        Navigator.of(context).pop();
                        Navigator.of(context).push(MaterialPageRoute(builder: (context) => ClientePesquisa("",0,"",0)));
                      },
                      submenuContent: Text("Cliente")),
                  MLSubmenu(onClick: () {
                        Navigator.of(context).pop();
                        Navigator.of(context).push(MaterialPageRoute(builder: (context) => ProdutoPesquisa(0,"",0,0,"")));
                  }, 
                  submenuContent: Text("Produto")),
                  MLSubmenu(onClick: () {
                        Navigator.of(context).pop();
                        Navigator.of(context).push(MaterialPageRoute(builder: (context) => VendedorPesquisa(0,"",0)));
                  }, 
                  submenuContent: Text("Vendedor")),
                  MLSubmenu(onClick: () {
                        Navigator.of(context).pop();
                        Navigator.of(context).push(MaterialPageRoute(builder: (context) => CondPGTOPesquisa("","","","")));
                  }, 
                  submenuContent: Text("Cond. de Pagamento")),
                  MLSubmenu(onClick: () {
                        Navigator.of(context).pop();
                        Navigator.of(context).push(MaterialPageRoute(builder: (context) => FormaPGTOPesquisa(0,"")));
                  }, 
                  submenuContent: Text("Forma de Pagamento")),
                ],
                onClick: () {}),
            MLMenuItem(
              leading: Icon(Icons.local_grocery_store),
              content: Text("Pré-Venda"),
              onClick: () {
                Navigator.of(context).push(MaterialPageRoute(builder: (context) => PedidoVenda()));
              },
            ),
            MLMenuItem(
              leading: Icon(Icons.settings),
              content: Text("Configuração"),
              onClick: () {
                Navigator.of(context).push(MaterialPageRoute(builder: (context) => Configuracao()));
              }
            )],
          );
  }
}
@覆盖
小部件构建(构建上下文){
Size Size=MediaQuery.of(context).Size;
回程多级抽屉(
背景颜色:颜色(0xfff0f3f4),
rippleColor:Colors.white,
子菜单背景颜色:颜色(0xfff0f3f4),
颜色:颜色。灰色,
标题:容器(
高度:size.height*0.25,
儿童:中心(
子:列(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
影像资产(
“Imagens/ACMIL_CIRCULAR.png”,
宽度:100,
身高:100,
),
大小盒子(
身高:10,
),
文本(“Usuario:Iury”)
],
)),
),
儿童:[
MLMenuItem(
引导:图标(Icons.person),
尾随:图标(图标。向右箭头),
内容:文本(
“卡达斯特罗”,
),
子菜单项:[
MLM子菜单(
onClick:(){
Navigator.of(context.pop();
Navigator.of(context).push(MaterialPageRoute(builder:(context)=>ClientePesquisa(“,0,”,0));
},
子菜单内容:文本(“客户”),
MLS子菜单(onClick:(){
Navigator.of(context.pop();
Navigator.of(context).push(MaterialPageRoute(builder:(context)=>ProdutoPesquisa(0,“,0,0,”));
}, 
子菜单内容:文本(“Produto”),
MLS子菜单(onClick:(){
Navigator.of(context.pop();
Navigator.of(context).push(MaterialPageRoute(builder:(context)=>VendedorPesquisa(0,“,0));
}, 
子菜单内容:文本(“卖方”),
MLS子菜单(onClick:(){
Navigator.of(context.pop();
Navigator.of(context.push(MaterialPageRoute(builder:(context)=>CondPGTOPesquisa(“,”,“,”,”));
}, 
子菜单内容:文本(“Cond.de Pagamento”),
MLS子菜单(onClick:(){
Navigator.of(context.pop();
Navigator.of(context).push(MaterialPageRoute(builder:(context)=>FormaPGTOPesquisa(0,“”));
}, 
子菜单内容:文本(“Pagamento格式”),
],
onClick:(){}),
MLMenuItem(
领先:图标(图标。本地杂货店),
内容:文本(“PréVenda”),
onClick:(){
Navigator.of(context.push(MaterialPageRoute(builder:(context)=>PedidoVenda());
},
),
MLMenuItem(
前导:图标(图标.设置),
内容:文本(“配置”),
onClick:(){
Navigator.of(context).push(MaterialPageRoute(builder:(context)=>Configuracao());
}
)],
);
}
}

你要找的是一种叫做状态管理的东西。正如一位用户已经解释了为什么像Flutter这样的框架会让管理状态变得困难,你可以在你的帖子下面阅读他们的评论

有许多状态管理解决方案,但最常用的两种是:

  • 现在,几乎99%的时间都归结于个人偏好以及你最喜欢哪种变体


    如果你想阅读更多关于每种变体的内容,你可以阅读一些关于媒体的优秀指南。

    这是你的家庭作业:,尽情享受吧。几乎所有东西都是一个小部件,因此状态管理有点挑战性。由于小部件本身大多是短暂的,并不意味着在页面上保持状态,你需要一种方法来保持状态te/variable,在Widgets之外。Uros链接是一个很好的起点,可以查看流行的状态管理软件包。非常感谢您的关注,为了完成我的任务,请更好地研究这一部分