如何从一个 StatelessWidget 向另一个传递和接收数据?
How to pass and receive data from a StatelessWidget to another?
当我开始学习 flutter 时,我正在利用我的知识用这个框架创建一个基本的计算器。
我在我的应用程序中发现了一个问题......那就是:如何将参数和信息从一个小部件传递到另一个小部件?特别是从一个无状态小部件到另一个。
我一直在不同的地方寻找,但我不明白我该怎么做以及它是如何工作的。
提前感谢所有能给我解释一下的人。
这是我正在使用的代码:
class CalcStructure extends StatelessWidget {
final List<String> rowOne = ['AC', 'Del', '%', '/'];
final List<String> rowTwo = ['7', '8', '9', '*'];
final List<String> rowThree = ['4', '5', '6', '-'];
final List<String> rowFour = ['1', '2', '3', '+'];
final List<String> rowFive = ['00', '0', '.', '='];
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height * 0.44,
color: Colors.red,
),
RowStructure(),
RowStructure(),
RowStructure(),
RowStructure(),
RowStructure(),
],
);
}
}
和RowStructure的class
class RowStructure extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Row(
children: <Widget>[
Container(
child: FlatButton(
onPressed: () => print('Pressed'),
child: Text('AC'),
),
width: MediaQuery.of(context).size.width * 0.25,
height: MediaQuery.of(context).size.height * 0.09,
),
Container(
child: FlatButton(
onPressed: () => print('Pressed'),
child: Text('AC'),
),
width: MediaQuery.of(context).size.width * 0.25,
height: MediaQuery.of(context).size.height * 0.09,
),
Container(
child: FlatButton(
onPressed: () => print('Pressed'),
child: Text('AC'),
),
width: MediaQuery.of(context).size.width * 0.25,
height: MediaQuery.of(context).size.height * 0.09,
),
Container(
child: FlatButton(
onPressed: () => print('Pressed'),
child: Text('AC'),
),
width: MediaQuery.of(context).size.width * 0.25,
height: MediaQuery.of(context).size.height * 0.09,
),
],
);
}
}
我的想法是将每个列表(rowOne、rowTow...)作为参数传递给另一个 class,这样我就可以重新使用代码...请帮帮我好吗?
谢谢
您只需通过构造函数将 data/value 从一个小部件 class 传递到另一个小部件:
class RowStructure extends StatelessWidget {
String text = "";
VoidCallback onTap;
RowStructure({ this.text, this.onTap });
@override
Widget build(BuildContext context) {
return Row(
children: <Widget>[
Container(
child: FlatButton(
onPressed: onTap,
child: Text(text),
),
当我开始学习 flutter 时,我正在利用我的知识用这个框架创建一个基本的计算器。 我在我的应用程序中发现了一个问题......那就是:如何将参数和信息从一个小部件传递到另一个小部件?特别是从一个无状态小部件到另一个。 我一直在不同的地方寻找,但我不明白我该怎么做以及它是如何工作的。
提前感谢所有能给我解释一下的人。
这是我正在使用的代码:
class CalcStructure extends StatelessWidget {
final List<String> rowOne = ['AC', 'Del', '%', '/'];
final List<String> rowTwo = ['7', '8', '9', '*'];
final List<String> rowThree = ['4', '5', '6', '-'];
final List<String> rowFour = ['1', '2', '3', '+'];
final List<String> rowFive = ['00', '0', '.', '='];
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height * 0.44,
color: Colors.red,
),
RowStructure(),
RowStructure(),
RowStructure(),
RowStructure(),
RowStructure(),
],
);
}
}
和RowStructure的class
class RowStructure extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Row(
children: <Widget>[
Container(
child: FlatButton(
onPressed: () => print('Pressed'),
child: Text('AC'),
),
width: MediaQuery.of(context).size.width * 0.25,
height: MediaQuery.of(context).size.height * 0.09,
),
Container(
child: FlatButton(
onPressed: () => print('Pressed'),
child: Text('AC'),
),
width: MediaQuery.of(context).size.width * 0.25,
height: MediaQuery.of(context).size.height * 0.09,
),
Container(
child: FlatButton(
onPressed: () => print('Pressed'),
child: Text('AC'),
),
width: MediaQuery.of(context).size.width * 0.25,
height: MediaQuery.of(context).size.height * 0.09,
),
Container(
child: FlatButton(
onPressed: () => print('Pressed'),
child: Text('AC'),
),
width: MediaQuery.of(context).size.width * 0.25,
height: MediaQuery.of(context).size.height * 0.09,
),
],
);
}
}
我的想法是将每个列表(rowOne、rowTow...)作为参数传递给另一个 class,这样我就可以重新使用代码...请帮帮我好吗?
谢谢
您只需通过构造函数将 data/value 从一个小部件 class 传递到另一个小部件:
class RowStructure extends StatelessWidget {
String text = "";
VoidCallback onTap;
RowStructure({ this.text, this.onTap });
@override
Widget build(BuildContext context) {
return Row(
children: <Widget>[
Container(
child: FlatButton(
onPressed: onTap,
child: Text(text),
),