1.通過 Context 獲取
context對象有一個(gè)findAncestorStateOfType()方法瘩燥,該方法可以從當(dāng)前節(jié)點(diǎn)沿著 widget 樹向上查找指定類型的 StatefulWidget 對應(yīng)的 State 對象。
如:
// 查找父級最近的Scaffold對應(yīng)的ScaffoldState對象
ScaffoldState _state = context.findAncestorStateOfType<ScaffoldState>()!
推薦 of 靜態(tài)方法
// 直接通過of靜態(tài)方法來獲取ScaffoldState
ScaffoldState _state=Scaffold.of(context);
// 打開抽屜菜單
_state.openDrawer();
2.通過 GlobalKey
注意:使用 GlobalKey 開銷較大酿联,如果有其他可選方案系馆,應(yīng)盡量避免使用它像鸡。另外粉渠,同一個(gè) GlobalKey 在整個(gè) widget 樹中必須是唯一的,不能重復(fù)胁镐。
1.給目標(biāo)StatefulWidget添加GlobalKey
//定義一個(gè)globalKey, 由于GlobalKey要保持全局唯一性偎血,我們使用靜態(tài)變量存儲
static GlobalKey<ScaffoldState> _globalKey= GlobalKey();
...
Scaffold(
key: _globalKey , //設(shè)置key
...
)
2.通過GlobalKey來獲取State對象
_globalKey.currentState.openDrawer()