#flutter #dart #flutter-layout #flutter-web
#flutter #дротик #flutter-layout #flutter-web
Вопрос:
У меня есть родительский StatefulWidget и дочерний StatefulWidget. Я хочу вызвать функцию родительского виджета, то goToPreviousItem
есть из дочернего виджета.
Родительский класс
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});
}
}
Дочерний класс
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",
),
),
);
}
}
Как я могу это сделать?
Ответ №1:
- Создайте
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", ), ), ); } }
- Передайте функцию
goToPreviousItem
в качестве параметра из родительского виджета в дочерний виджет.Child(function: goToPreviousItem);
- Получите доступ к своей функции, используя
widget.function(2)
внутри дочернего виджета.
Ответ №2:
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",
),
),
);
}
}