【问题标题】:How to send a map between flutter widgets?如何在颤振小部件之间发送地图?
【发布时间】:2020-02-29 06:26:25
【问题描述】:

我正在尝试将地图发送到另一个屏幕。第二屏的构造函数如下。

class Sell extends StatefulWidget {
  Map<String, int> cart = {};

  Sell({@required cart}); 
  @override
  _SellState createState() => _SellState();
}

这是页面,调用第二个屏幕的构造函数但我无法发送这样的参数。


class _MyHomePageState extends State<MyHomePage> {

  Map<String, int> cart = {};

           \\\
 List pages = [
    Sell(cart: cart,), //this is the error <--Only static members can be accessed in initializers.dart(implicit_this_reference_in_initializer)


           \\\

}
  ];

这是第一页的源代码

class _MyHomePageState extends State<MyHomePage> {
  int currentPage = 0;
  Map<String, int> cart = {};

  List pages = [
    Sell(cart: cart,),
    Cart(),
    Report(),
    Dashboard(),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(

        ),

        body: Center(
          child: pages.elementAt(currentPage),
        ),
        bottomNavigationBar: FancyBottomNavigation(
          tabs: [
            TabData(iconData: Icons.attach_money, title: "Sell"),
            TabData(iconData: Icons.shopping_cart, title: "Basket"),
            TabData(iconData: Icons.assessment, title: "Reports"),
            TabData(iconData: Icons.dashboard, title: "Dashboard"),

          ],
          onTabChangedListener: (position) {
            setState(() {
              currentPage = position;
            });
          },
        ));
  }
}

我在这里错过了什么?

【问题讨论】:

  • 在initState方法中初始化page变量
  • 您是否尝试将参数发送到另一个屏幕?

标签: flutter dart


【解决方案1】:

您需要再次将地图传递给 SellState,如下所示

class Sell extends StatefulWidget {
  Map<String, int> cart = {};

  Sell({@required cart}); 
  @override
  _SellState createState() => _SellState(cart);
}

并在 SellState 中加入

class SellState extends State<Sell> {
  Map<String, int> cart = {};

  SellState(this.cart); 

  @override
  _SellState createState() => _SellState(cart);
}

也可以直接调用

widget.cart

在 SellState 类中

【讨论】:

    【解决方案2】:

    您必须避免初始化购物车,因为它在创建 Sell 对象时已初始化,并且您必须在调用参数时添加“this”关键字。

     class Sell extends StatefulWidget {
      final Map<String, int> cart;
    
      Sell({@required this.cart}); 
      @override
      _SellState createState() => _SellState();
    }
    

    【讨论】:

    • 请提供一些解释,方便其他用户理解。
    • 谢谢@johannchopin 我添加了一些解释。
    猜你喜欢
    • 2019-05-05
    • 2021-10-03
    • 1970-01-01
    • 2020-07-13
    • 2019-11-25
    • 2019-02-22
    • 1970-01-01
    • 2018-06-21
    • 2021-06-11
    相关资源
    最近更新 更多