[英]Call void with SetState method under stateful widget class from another dart file in Flutter
[英]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.