我想从CustomDialog更改HomeScreen的正文,这是另一个类。我怎样才能做到这一点 ?无论如何我都尝试过,但是我做不到。
这是主文件
import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(home: HomeScreen(),));
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
@override
Widget build(BuildContext context) {
return SafeArea(child:Column(
children: <Widget>[
Text( Global.number.toString() ),
RaisedButton(child: Text("Click"),
onPressed: (){
showDialog(context: context,builder: (context){
return CustomDialog();
});
},)
],
));
}
}
这是另一个要存储全局变量的文件
class Global {
static double number = 10.0;
}
该文件用于对话框
class CustomDialog extends StatefulWidget {
@override
_CustomDialogState createState() => _CustomDialogState();
}
class _CustomDialogState extends State<CustomDialog> {
@override
Widget build(BuildContext context) {
return Dialog(child: FlatButton(
child: Icon(Icons.add_circle,size: 30,),
onPressed: (){
setState(() {
Global.number++;
});
},
),);
}
}
答案 0 :(得分:0)
您可以将setState
的{{1}}方法向下传递到HomeScreen
。我已经根据您在下面提供的代码分享了一个完整的工作示例。
CustomDialog
如您所见,我为import 'package:flutter/material.dart';
void main() => runApp(MaterialApp(home: HomeScreen(),));
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
void state() {
setState((){});
}
@override
Widget build(BuildContext context) {
return SafeArea(child:Column(
children: <Widget>[
Text( Global.number.toString() ),
RaisedButton(child: Text("Click"),
onPressed: (){
showDialog(context: context,builder: (context){
return CustomDialog(state);
});
},)
],
));
}
}
class Global {
static double number = 10.0;
}
class CustomDialog extends StatefulWidget {
final Function state;
CustomDialog(this.state);
@override
_CustomDialogState createState() => _CustomDialogState();
}
class _CustomDialogState extends State<CustomDialog> {
@override
Widget build(BuildContext context) {
return Dialog(child: FlatButton(
child: Icon(Icons.add_circle,size: 30,),
onPressed: (){
Global.number++;
widget.state();
},
),);
}
}
创建了一个方法参数,并在更改CustomDialog
之后调用了该方法。我为Global.number
函数
setState
在void state() {
setState((){});
}
中并将该方法作为参数传递给HomeScreen
。
答案 1 :(得分:-1)
state
中的set
您CustomDialog
是……the state of the dialog
,而不是主屏幕。
要通知主屏幕某些数据已更改,您可以使用ChangeNotifierProvider
在主屏幕和对话框的通用super
小部件中提供此数据,在主屏幕中订阅数据,然后访问对话框中的数据并进行更改,然后主屏幕将自动重建。
请查看Simple app state management以获得更多详细信息。