Flutter 如何在flatter中将变量从一个类传递到另一个类

Flutter 如何在flatter中将变量从一个类传递到另一个类,flutter,dart,Flutter,Dart,我在这个类中设置了numOfItems,我想在另一个类AddToCart中使用它,但是我无法成功地传递变量。。这是一个示例代码,请告诉我如何做到这一点,我似乎无法理解它,我想知道的是在我设置了state之后将数据传递给另一个类的最佳方式 static int numOfItems = 1; @override Widget build(BuildContext context) { return Row( children: <Widget>[

我在这个类中设置了numOfItems,我想在另一个类AddToCart中使用它,但是我无法成功地传递变量。。这是一个示例代码,请告诉我如何做到这一点,我似乎无法理解它,我想知道的是在我设置了state之后将数据传递给另一个类的最佳方式

  static int numOfItems = 1;
  @override
  Widget build(BuildContext context) {
    return Row(
      children: <Widget>[
        buildOutlineButton(
          icon: Icons.remove,
          press: () {
            if(numOfItems > 1){
              setState(() {
                numOfItems--;
              });
            }
          },
        ),
        Padding(
          padding: const EdgeInsets.symmetric(horizontal: kDefaultPaddin / 2),
          child: Text(
            //"01",
            numOfItems.toString().padLeft(2, "0"),
            style: Theme.of(context).textTheme.headline,
          ),
        ),
        buildOutlineButton(
            icon: Icons.add,
            press: () {
              setState(() {
                numOfItems++;
              });
            }),
      ],
    );
  }

  SizedBox buildOutlineButton({IconData icon, Function press}) {
    return SizedBox(
      width: 32,
      height: 32,
      child: OutlineButton(
        padding: EdgeInsets.zero,
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(10),
        ),
        onPressed: press,
        child: Icon(icon),
      ),
    );
  }
}```


here is the second class where I want to use the numOfItems in the second class, how can I access the variable in this class.

```class AddToCart extends StatelessWidget {
  const AddToCart({
    Key key,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    Size size = MediaQuery.of(context).size;
    return Padding(
      padding: const EdgeInsets.symmetric(vertical: kDefaultPaddin),
      child: Row(
        children: <Widget>[
          Container(
            margin: EdgeInsets.only(right:kDefaultPaddin),
            height:50,
            width: size.width * 0.3,
            decoration: BoxDecoration(
              border: Border.all(color:primaryColorDark),
              borderRadius: BorderRadius.circular(18),
            ),
            child: IconButton(
              icon: SvgPicture.asset(
                "assets/icons/add_to_cart.svg", color: primaryColorDark,), //svgPicture.asser
              onPressed: () {
                // on press of the cart button
              },
            ),
          ),
          Expanded(
            child: SizedBox(
              height:50,
              child: FlatButton(
                shape: RoundedRectangleBorder(
                    borderRadius: BorderRadius.circular(18)
                ),
                color: primaryColor,
                onPressed: (){
                  addProductToCart(context);

                },
                child: Text(
                    "Buy Now".toUpperCase(),
                    style: TextStyle(
                      fontSize: 17,
                      fontWeight: FontWeight.bold,
                      color: Colors.white,
                    )
                ),
              ),
            ),
          )
        ],
      ),
    );
  }

  void addProductToCart(BuildContext context) {
   
    String quantityToSend = numOfItems
  }
}
}```

What I want to know is the best way to pass data after I have setState to the other class.. 
static int numOfItems=1;
@凌驾
小部件构建(构建上下文){
返回行(
儿童:[
buildOutlineButton(
图标:Icons.remove,
新闻界:(){
如果(numOfItems>1){
设置状态(){
numOfItems--;
});
}
},
),
填充物(
填充:常量边集。对称(水平:kDefaultPaddin/2),
子:文本(
//"01",
numOfItems.toString().padLeft(2,“0”),
风格:Theme.of(context).textTheme.headline,
),
),
buildOutlineButton(
图标:Icons.add,
新闻界:(){
设置状态(){
numOfItems++;
});
}),
],
);
}
SizedBox buildOutlineButton({IconData图标,函数按}){
返回大小框(
宽度:32,
身高:32,
孩子:大纲按钮(
填充:EdgeInsets.zero,
形状:圆形矩形边框(
边界半径:边界半径。圆形(10),
),
按:按,
子:图标(图标),
),
);
}
}```
这里是第二个类,我想在第二个类中使用numOfItems,如何访问这个类中的变量。
```类AddToCart扩展了无状态小部件{
康斯塔德托卡特({
关键点,
}):super(key:key);
@凌驾
小部件构建(构建上下文){
Size Size=MediaQuery.of(context).Size;
返回填充(
填充:常量边集。对称(垂直:kDefaultPaddin),
孩子:排(
儿童:[
容器(
页边距:仅限边集(右:kDefaultPaddin),
身高:50,
宽度:size.width*0.3,
装饰:盒子装饰(
边框:边框。全部(颜色:primaryColorDark),
边界半径:边界半径。圆形(18),
),
孩子:我的钮扣(
图标:SvgPicture.asset(
“assets/icons/add_to_cart.svg”,颜色:primaryColorDark,//svgPicture.asser
已按下:(){
//按下购物车按钮
},
),
),
扩大(
孩子:大小盒子(
身高:50,
孩子:扁平按钮(
形状:圆形矩形边框(
边界半径:边界半径。圆形(18)
),
颜色:原色,
已按下:(){
addProductToCart(上下文);
},
子:文本(
“立即购买”。toUpperCase(),
样式:TextStyle(
尺寸:17,
fontWeight:fontWeight.bold,
颜色:颜色,白色,
)
),
),
),
)
],
),
);
}
void addProductToCart(构建上下文){
字符串quantityToSend=numOfItems
}
}
}```
我想知道的是在我将state设置到另一个类之后传递数据的最佳方式。。

如果您只需要这个变量“If it widget”,只需使用class
x
的名称,然后使用
然后使用
静态变量的名称

i、 e
x.numOfItems

如果这是另一个屏幕,并且您希望将数据传递到此屏幕,您可以这样做

class SecondScreen{
var anyVariable;
XScreen(this.anyVariable);
.......
......
}

onTap: () {
        Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => SecondScreen(anyVariable :numOfItems),
          ),
        );
      },

您可以使用
构造函数
传递变量
示例:
屏幕1:


此文档显示如何将数据发送到另一个屏幕:AddToCart是另一个屏幕,还是您将在屏幕上显示的另一个小部件?如果是另一个屏幕,您可以使用第一条评论中提供的链接,如果不是,并且您正在谈论另一个小部件,只需生成另一个构造函数参数con AddToCart来接收int numOfItems,您可以在内部使用它。是的,它是另一个小部件,但我分别创建了一个小部件文件夹,因此每个小部件都位于不同的.dart文件中,我只是在主页上打了个电话。。
class _TabsPageState extends State<TabsPage> {
  int args = 3;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: FlatButton(
          color: Colors.blueAccent,
          child: Text('Navigate to home', style: TextStyle(color: Colors.white),),
          onPressed: () {
            print('123');
            Navigator.pushReplacement(context, MaterialPageRoute(builder: (_) => Tab2Page(args)));
          },
        ),
      ),
    );
  }
}
class Tab2Page extends StatelessWidget {
  final int args;

  Tab2Page(this.args);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text(args.toString()),
      ),
    );
  }
}