我有一个屏幕小部件和一个自定义小部件。我想在按下自定义窗口小部件的按钮时更改屏幕窗口小部件的值。只是为了举例;
这是MyScreen小部件,它使用CustomWidget作为子级:
import './widgets/my_custom_widget.dart';
class MyScreen extends StatefulWidget {
@override
_MyScreen createState() => _MyScreenState();
}
class _MyScreen extends State<MyScreen> {
bool isChildButtonPressed = false;
@override
Widget build(BuildContext context) {
return Container(
child:MyCustomWidget());
}
}
这是MyCustomWidget
class MyCustomWidget extends StatefulWidget {
@override
_MyCustomWidget createState() => _MyCustomWidget();
}
class _MyCustomWidget extends State<MyCustomWidget> {
@override
Widget build(BuildContext context) {
return Container(
width:200,
height:200,
child: Row(children:[
FlatButton(child:Text("I am child button"),onPressed:(){
//what should I do here to change MyScreen isChildButtonPressed to true?
}),
]
)
);
}
}
上面的代码仅是我要实现的示例,但在我的应用中,我有一个较长的子窗口小部件多个按钮,并且我希望将窗口小部件存储在单独的文件中,但是我想更改父代的一些变量子控件的按钮被按下时的控件。
我可以做的是将父级变量声明为全局变量,然后使用ValueNotifier,但我认为这不是解决此问题的好方法,因为我只需要在一个屏幕上而不是整个应用程序中使用这些变量。
我认为我不能使用Provider软件包,因为它仅重建子窗口小部件而不重建父窗口小部件。
那你有什么建议?
谢谢
答案 0 :(得分:1)
您可以在 CustomWidget onFlatButtonPressed
中创建文件。该字段将为Callback Function或VoidCallBack,然后在您按下 CustomWidget 中的扁平按钮时调用该函数,并在** MyScreen *
赞
class MyScreen extends StatefulWidget {
@override
_MyScreenState createState() => _MyScreenState();
}
class _MyScreenState extends State<MyScreen> {
bool isChildButtonPressed = false;
@override
Widget build(BuildContext context) {
return Container(
child: MyCustomWidget(
onFlatButtonPressed: (){
setState(() {
//Write what you want to do here
});
},
),
);
}
}
class MyCustomWidget extends StatefulWidget {
final VoidCallback onFlatButtonPressed;
MyCustomWidget({@required this.onFlatButtonPressed});
@override
_MyCustomWidget createState() => _MyCustomWidget();
}
class _MyCustomWidget extends State<MyCustomWidget> {
@override
Widget build(BuildContext context) {
return Container(
width: 200,
height: 200,
child: Row(
children: [
FlatButton(child: Text("I am child button"), onPressed: widget.onFlatButtonPressed),
],
),
);
}
}