[英]How to call parent widget function from child widget in Flutter
I have a Parent StatefulWidget and Child StatefulWidget.我有一个父 StatefulWidget 和子 StatefulWidget。 I want to call a function of parent widget ie
goToPreviousItem
from the child widget.我想从子小部件调用父小部件的 function 即
goToPreviousItem
。
Parent Class父 Class
class Parent extends StatefulWidget {
@override
_ParentState createState() => _ParentState();
}
class _ParentState extends State<Parent> {
String item = 0;
@override
Widget build(BuildContext context) {
return ChildClass();
}
goToPreviousItem(value){
setState(() {item = value});
}
}
Child Class儿童 Class
class Child extends StatefulWidget {
@override
_ChildState createState() => _ChildState();
}
class _ChildState extends State<Child> {
@override
Widget build(BuildContext context) {
return Container(
child: FlatButton(
color: Color(0XFFEFEFEF),
textColor: primaryColor,
disabledColor: Colors.grey,
disabledTextColor: Colors.black,
padding: EdgeInsets.symmetric(
vertical: 15.0, horizontal: 10.0),
onPressed: () => goToPreviousItem(2),
child: Text(
"Update",
),
),
);
}
}
How can I do that?我怎样才能做到这一点?
Create a Function
type parameter inside your child widget.在您的子小部件中创建一个
Function
类型参数。
class Child extends StatefulWidget { Function function; Child({this.function}); @override _ChildState createState() => _ChildState(); } class _ChildState extends State<Child> { @override Widget build(BuildContext context) { return Container( child: FlatButton( color: Color(0XFFEFEFEF), textColor: primaryColor, disabledColor: Colors.grey, disabledTextColor: Colors.black, padding: EdgeInsets.symmetric( vertical: 15.0, horizontal: 10.0), onPressed: () => widget.function(2), child: Text( "Update", ), ), ); } }
Pass the function goToPreviousItem
as a parameter from the parent widget to child widget.将 function
goToPreviousItem
作为参数从父窗口小部件传递给子窗口小部件。
Child(function: goToPreviousItem);
Access your function using widget.function(2)
inside the child widget.使用子小部件内的
widget.function(2)
访问您的 function。
typedef parentFunctionCallback = void Function(String value);
class Parent extends StatefulWidget {
@override
_ParentState createState() => _ParentState();
}
class _ParentState extends State<Parent> {
String item = 'data';
@override
Widget build(BuildContext context) {
return ChildClass(goToPreviousItem);
}
goToPreviousItem(String value){
setState(() {item = value;});
}
}
class ChildClass extends StatefulWidget {
const ChildClass(this.parentfunc);
/// ToDo
final parentFunctionCallback parentfunc;
@override
_ChildState createState() => _ChildState();
}
class _ChildState extends State<ChildClass> {
@override
Widget build(BuildContext context) {
return Container(
child: FlatButton(
color: Color(0XFFEFEFEF),
textColor: primaryColor,
disabledColor: Colors.grey,
disabledTextColor: Colors.black,
padding: EdgeInsets.symmetric(
vertical: 15.0, horizontal: 10.0),
onPressed: () => widget.parentfunc('mail'),
child: Text(
"Update",
),
),
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.