从Flutter中其他类的按钮单击中调用类的setState()方法

时间:2019-02-10 11:23:51

标签: android callback dart flutter

我的主页上有一个抽屉,可以根据选定的抽屉项目更改支架的主体,现在我需要通过点击片段中的按钮来更改主体,并使用以下命令调用主类的setState()方法:用于更新屏幕的参数。我该怎么办?
这是我的脚手架尸体:

body: _getDrawerItemWidget(_selectedDrawerIndex));

,当选择了一个抽屉项目时,将调用setState()并根据此代码填充主体:

_getDrawerItemWidget(int pos) {
    switch (pos) {
      case 0:
        return new MainFragment();
      case 1:
        return new CardMgmt();
.........
}
}

但是现在我需要通过CardMgmt类中的按钮来执行此操作。

2 个答案:

答案 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();
}
...

希望有帮助。祝你好运!