我有一个场景,我有一个按钮,在孙子小部件,更新一个变量和“发送”更新的变量给孩子。孩子使用它收到的变量,即在孩子小部件中的另一个变量中使用。孩子因此也更新一个变量,并将其推到父。我想知道是否有可能更新所有的变量,只需点击一个按钮,在孙子小部件。
这是我的孙子:
class GrandChild extends StatefulWidget {
Function(int) changeNumber;
GrandChild(this.changeNumber, {super.key});
@override
State<GrandChild> createState() => _GrandChildState();
}
class _GrandChildState extends State<GrandChild> {
int counter = 0;
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () {
setState(() {
++counter;
widget.changeNumber(counter);
});
},
child: const Text('Update all'));
}
}
这是我的孩子:
class Child extends StatefulWidget {
Function(int) updateParent;//I think this will be needed to update parent
Child(this.updateParent, {super.key});
@override
State<Child> createState() => _ChildState();
}
class _ChildState extends State<Child> {
int childCounter = 0;
int multiple = 1;
int amountInChild = 0;
fromGrandChild(int newChildCounter) {
setState(() {
childCounter = newChildCounter;
});
}
@override
Widget build(BuildContext context) {
amountInChild = childCounter * multiple;//this is what I need to update in parent
return GrandChild(fromGrandChild);
}
}
这里是Parent:
class Parent extends StatelessWidget {
Parent({Key? key}) : super(key: key);
int amountInParent = 0;
receiveFromChild(int newFromChld) {
amountInParent = newFromChld;
}
@override
Widget build(BuildContext context) {
return Container(
child: Column(
children: [
Child(receiveFromChild),
Text(amountInParent.toString())
],
),
);
}
}
我不希望在子项中包含另一个按钮来更新父项,只希望在子项中包含提升的按钮来更新所有位置。
我在孙子中使用了回调函数。
2条答案
按热度按时间tp5buhyn1#
我不确定我是否完全理解了你的问题,但我相信现在需要的就是在
fromGrandChild
中调用updateParent
。velaa5lx2#
实际上你可以做的是在parent中声明一个函数,然后把这个函数传给child,然后传给grandchild,在那里你可以更新任何你想要的值