在 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 中跨页面移动数据的主要内容,如果未能解决你的问题,请参考以下文章

Flutter中有没有办法通过滑动逐渐导航到页面

在flutter中使用getX打开页面时自动调整页面语言

如何清除flutter桌面应用程序数据,如flutter移动应用程序

Flutter:在浏览器中运行网页版时如何停止显示移动应用

Flutter学习-屏幕适配

Flutter 嵌套声明式导航