我的主页上有一个抽屉,可以根据选定的抽屉项目更改支架的主体,现在我需要通过点击片段中的按钮来更改主体,并使用以下命令调用主类的setState()方法:用于更新屏幕的参数。我该怎么办?
这是我的脚手架尸体:
body: _getDrawerItemWidget(_selectedDrawerIndex));
,当选择了一个抽屉项目时,将调用setState()并根据此代码填充主体:
_getDrawerItemWidget(int pos) {
switch (pos) {
case 0:
return new MainFragment();
case 1:
return new CardMgmt();
.........
}
}
但是现在我需要通过CardMgmt类中的按钮来执行此操作。
答案 0 :(得分:0)
让我给我一个超级简单的方法,只要我想更改另一个类/窗口小部件的状态,就可以使用:
定义一个全局变量,然后在您要稍后更改的小部件的State
类中使用此变量。然后,您可以从代码内的任何方法修改此变量的值,并且第一个类的状态将自动更改,而无需直接调用该类的setState()
方法。
这是一个例子:
int counter = 0 ;
class _AppState extends State<App> {
var numberOfItems = counter ;
return new MaterialApp(
title: 'Ads App',
home: new Text(counter),
);
}
如果您在代码中的任意位置更改了counter的值,则Text
小部件的内容将自动更改。
答案 1 :(得分:0)
您可以使用回调函数来实现它。
在父窗口小部件中,您将创建子窗口小部件,并将回调作为参数传递:
...
@override
Widget build(BuildContext context) {
return LoginPage(onSignedIn: _signedIn);
}
void _signedIn() {
setState(() {
});
}
在子小部件中,需要时调用此回调:
...
class LoginPage extends StatefulWidget {
LoginPage({this.onSignedIn});
final VoidCallback onSignedIn;
State<StatefulWidget> createState() => new _LoginPageState();
}
class _LoginPageState extends State<LoginPage> {
...
void callCallbackFunction() {
widget.onSignedIn();
}
...
希望有帮助。祝你好运!