当一个statefulwidget中的按钮被点击时,可以通过回调函数的方式在另一个statefulwidget中设置setState。
首先,在第一个statefulwidget中定义一个回调函数,用于处理按钮点击事件。该回调函数将在按钮被点击时被调用,并将需要更新的状态作为参数传递给第二个statefulwidget。
class FirstWidget extends StatefulWidget {
@override
_FirstWidgetState createState() => _FirstWidgetState();
}
class _FirstWidgetState extends State<FirstWidget> {
bool _isButtonClicked = false;
void _handleButtonClick() {
setState(() {
_isButtonClicked = true;
});
}
@override
Widget build(BuildContext context) {
return RaisedButton(
onPressed: _handleButtonClick,
child: Text('Click Me'),
);
}
}
然后,在第二个statefulwidget中接收回调函数,并在需要更新的地方调用setState来更新状态。
class SecondWidget extends StatefulWidget {
final Function setStateCallback;
SecondWidget({this.setStateCallback});
@override
_SecondWidgetState createState() => _SecondWidgetState();
}
class _SecondWidgetState extends State<SecondWidget> {
bool _isButtonClicked = false;
void _updateState() {
setState(() {
_isButtonClicked = widget.setStateCallback();
});
}
@override
Widget build(BuildContext context) {
return RaisedButton(
onPressed: _updateState,
child: Text('Update State'),
);
}
}
最后,在父widget中将第一个statefulwidget和第二个statefulwidget组合在一起,并将回调函数传递给第二个statefulwidget。
class ParentWidget extends StatefulWidget {
@override
_ParentWidgetState createState() => _ParentWidgetState();
}
class _ParentWidgetState extends State<ParentWidget> {
bool _isButtonClicked = false;
bool _handleButtonClick() {
setState(() {
_isButtonClicked = true;
});
return _isButtonClicked;
}
@override
Widget build(BuildContext context) {
return Column(
children: [
FirstWidget(),
SecondWidget(setStateCallback: _handleButtonClick),
],
);
}
}
这样,当第一个statefulwidget中的按钮被点击时,会触发回调函数,然后在第二个statefulwidget中调用setState来更新状态。
领取专属 10元无门槛券
手把手带您无忧上云