簡體   English   中英

從Flutter中其他類的按鈕單擊中調用類的setState()方法

[英]Call setState() method of class from a button click of other class in Flutter

我的主頁上有一個抽屜,可以根據選定的抽屜項目更改支架的主體,現在我需要通過點擊片段中的按鈕來更改主體,並使用參數將主類的setState()方法調用為更新屏幕。 我怎樣才能做到這一點?
這是我的腳手架的身體:

body: _getDrawerItemWidget(_selectedDrawerIndex));

當選擇一個抽屜項目時,將根據以下代碼調用setState()並填充主體:

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

但是現在我需要通過CardMgmt類中的按鈕來執行此操作。

讓我給出一種超級簡單的方法,每當我想更改另一個類/窗口小部件的狀態時都使用:

定義一個全局變量,然后在您要稍后更改的小部件的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小部件內容將自動更改。

您可以使用回調函數來實現。

在父窗口小部件中,您將創建子窗口小部件,並將回調作為參數傳遞:

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

希望能幫助到你。 祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM