我创建了一个具有InkWell子级的窗口小部件,并且想在敲击InkWell子级时更改该窗口小部件的颜色。目前,我在InkWell类中有一个_pressed变量来控制小部件的颜色:
class ButtonA extends StatefulWidget {
ButtonA();
@override
State createState() => new ButtonAState();
}
class ButtonAState extends State<ButtonA> {
bool _pressed = false;
Widget build(BuildContext context){
return new Expanded(
child: new Material(
color: _pressed ? Colors.greenAccent : Colors.redAccent,
child: new InkWell(
onTap: () => (
this.setState((){
_pressed = true;
})),
),
),
),
}
在父级中,我只需导入ButtonA并按以下方式创建它:
new Button()
由于我希望链接到此轻敲行为的功能越来越多,我希望能够更改父类中的按钮颜色。我正在考虑将tap函数传递给Button类,以便具有类似以下内容:
class ButtonA extends StatefulWidget {
VoidCallback _tap;
ButtonA(this._tap);
@override
State createState() => new ButtonAState();
}
和InkWell将是:
child: new InkWell(onTap: () => _tap())
在父类中,我将有一个tap函数,用于操纵按钮的颜色并做其他事情。
我应该如何将按钮的状态传递给它的父按钮,以便我可以做类似的事情
this.colors = Colors.white
在父班?有可能吗?
答案 0 :(得分:0)
您可以执行以下操作:
class ButtonA extends StatefulWidget {
VoidCallback tap;
Color defaultColor;
Color pressedColor;
ButtonA({this.tap, this.pressedColor, this.defaultColor});
ButtonA();
@override
State createState() => new ButtonAState();
}
class ButtonAState extends State<ButtonA> {
bool _pressed = false;
Widget build(BuildContext context){
return new Expanded(
child: new Material(
color: _pressed ? widget.pressedColor : widget.defaultColor,
child: new InkWell(
onTap: () {
widget.tap();
this.setState((){
_pressed = true;
});
},
),
),
),
}
用法:
ButtonA(
tap: () {
//your logic from your parent
},
defaultColor: Colors.white,
pressedColor: Colors.blue
);