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