Flutter:如何使用导航器堆栈中的数据恢复屏幕
Flutter : How to recover a screen with data in the Navigator stack
我正在做一个销售应用,我在其中使用抽屉通过导航器命令在屏幕之间移动,发现以下情况
1 - 打开应用程序时,它会进入进行销售的主屏幕
2 - 我select两个产品要卖
3 - 在我离开包含这两种产品的销售屏幕并转到客户屏幕后立即
4 - 现在我需要回到销售屏幕,已经 selected 的两个产品应该还在
好的,在第 4 部分中,使用键返回单元格 phone 它 returns 一个屏幕并转到此销售屏幕(那里有两个产品),但是如果我进入抽屉并 select 进入销售屏幕的选项,我如何在堆栈的开头搜索此屏幕而不是创建一个新的销售屏幕(没有这两种产品时它是空的)。我想要这个,因为如果堆栈顶部只有一个屏幕,没问题,用户按下返回即可,但如果顶部有 5 或 6 个屏幕,这对用户必须返回所有内容,在背面按几次,以免丢失销售屏幕上已经制作的内容。是否有任何导航器命令可以执行此操作?我已经在寻找一些东西,但没有找到对我有帮助的东西。
抽屉密码
@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()));
}
)],
);
}
}
我正在做一个销售应用,我在其中使用抽屉通过导航器命令在屏幕之间移动,发现以下情况
1 - 打开应用程序时,它会进入进行销售的主屏幕
2 - 我select两个产品要卖
3 - 在我离开包含这两种产品的销售屏幕并转到客户屏幕后立即
4 - 现在我需要回到销售屏幕,已经 selected 的两个产品应该还在
好的,在第 4 部分中,使用键返回单元格 phone 它 returns 一个屏幕并转到此销售屏幕(那里有两个产品),但是如果我进入抽屉并 select 进入销售屏幕的选项,我如何在堆栈的开头搜索此屏幕而不是创建一个新的销售屏幕(没有这两种产品时它是空的)。我想要这个,因为如果堆栈顶部只有一个屏幕,没问题,用户按下返回即可,但如果顶部有 5 或 6 个屏幕,这对用户必须返回所有内容,在背面按几次,以免丢失销售屏幕上已经制作的内容。是否有任何导航器命令可以执行此操作?我已经在寻找一些东西,但没有找到对我有帮助的东西。
抽屉密码
@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()));
}
)],
);
}
}