在 Flutter 中跨页面移动数据
Posted
技术标签:
【中文标题】在 Flutter 中跨页面移动数据【英文标题】:Moving data across pages in Flutter 【发布时间】:2020-11-20 11:10:37 【问题描述】:我希望能够将数据从一个屏幕传输到另一个屏幕。我现在所拥有的确实有效,但我希望能够在其中添加图标 AppBar 只会转到第二页,不带任何参数。现在我有这个:
第一页
这是第一页上的图标,用于将列表磁贴参数添加到购物车屏幕(并且仅添加 ,它不会推送购物车屏幕,即 应该在下面的应用栏中完成。
child: IconButton(
icon: Icon(Icons.add),
onPressed: () => MaterialPageRoute(
builder: (context) =>
Cart(person.name, person.surname),
)),
在脚手架下面,我在 AppBar 中有这个,这个图标应该只推动购物车屏幕,而不是任何其他值。
IconButton(
icon: Icon(Icons.add_shopping_cart, color: Colors.white),
//this will be the cart window ontap, change icon to something better
onPressed: () => Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) =>
Cart(//there should be arguments here, but I just want to go to Cart screen, the arguments were added in the first icon))),
这个 Cart 类需要参数(来自第二页,如 personName、personSurname),但我只想能够推送 第二个屏幕,那里没有任何参数。它是应用栏中的小购物车图标。
第二页
这是第二页(sudo 购物车屏幕),它应该只接受第一页的参数。
class Cart extends StatefulWidget
final String personName;
final String personSurname;
Cart(this.personName, this.personSurname);
@override
_CartState createState() => _CartState();
class _CartState extends State<Cart>
@override
Widget build(BuildContext context)
return Scaffold(
appBar: AppBar(
title: Text('Cart'),
centerTitle: true,
),
body: Center(
child: Container(
child: Text('$widget.personName, $widget.personSurname'))),
);
我的问题是我想为购物车提供 2 个单独的功能。第一个是在第一个图标的第一页上 只将我想要的任何参数添加到购物车,第一页应用栏中的第二个图标只是推动购物车屏幕。
在第二个屏幕中,我只想从第一页推送任何数据。
【问题讨论】:
我认为您的问题自相矛盾?如果我理解正确,您只想导航到带有第二个图标的购物车页面,但不携带任何数据?只有将参数保存在第一页时才有意义,例如setState() 并将带有第二个 ItemButton 的参数传递到第二页。请更好地解释,以便我们为您提供帮助。 基本上第一个图标按钮应该将该数据添加到“购物车”屏幕(在这种情况下来自列表图块的数据),第二个图标按钮应该只路由到如果有意义的话,该屏幕(第二个,购物车屏幕)。 【参考方案1】:试试这样:
-
在上面声明两个变量:
String name = '';
String surname = '';
-
将您的数据分配给他们:
child: IconButton(
icon: Icon(Icons.add),
onPressed: ()
name = person.name;
surname = person.surname;
,
-
并将它们用作参数:
IconButton(
icon: Icon(Icons.add_shopping_cart, color: Colors.white),
onPressed: () => Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => Cart(name, surname))
),
【讨论】:
以上是关于在 Flutter 中跨页面移动数据的主要内容,如果未能解决你的问题,请参考以下文章