[英]How to implement event listener or delegate on flutter
我有一個主要的dart類,應用欄位於其中,應用欄包含一個刷新按鈕。 我正在使用導航抽屜來填充另外兩個視圖f1和f2。
從我的main.dart如何將刷新按鈕單擊傳遞給f1.dart的子片段類型,以便我可以在f1.dart上刷新我的內容
// State of Main
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
drawer: Drawer(
child: new Column(
children: <Widget>[
////////////////////////////////////////////////////////////
new FirstFragment(),
new SecondFragment()
/////////////////////////////////////////////////////////////
],
),
),
appBar: AppBar(
title: Text(widget.title),
actions: <Widget>[
IconButton(
icon: Icon(Icons.refresh),
onPressed: () {
print("refresh pressed");
/////////////////////////
How to send this refresh pressed event to my FirstFragment class??
/////////////////////////
},
color: Colors.white,
)
],
),
body: _getDrawerItemWidget(_selectedDrawerIndex),
);
}
}
在Android中,我一直在使用事件監聽器,對於iOS,我可以使用委托來達到目的。 我怎樣才能在顫動/飛鏢上達到這個目的。 ?
您可以傳遞回調,使用VoidCallback
並在主窗口小部件上接收事件。
class MainPage extends StatelessWidget {
_onTapButton() {
print("your event here");
}
@override
Widget build(BuildContext context) {
return Container(
child: ChildPage(
onTap: _onTapButton,
),
);
}
}
class ChildPage extends StatelessWidget {
final VoidCallback onTap;
const ChildPage({Key key, this.onTap}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
child: RaisedButton(
child: Text("Click Me"),
onPressed: () {
//call to your callback here
onTap();
},
),
);
}
}
如果您想要相反,您只需刷新父窗口小部件的狀態並更改傳遞給片段的參數,或者也可以使用GlobalKey,如下例所示:
class MainPage extends StatelessWidget {
final GlobalKey<ChildPageState> _key = GlobalKey();
_onTapButton() {
_key.currentState.myMethod();
}
@override
Widget build(BuildContext context) {
return Container(
child: Column(
children: [
ChildPage(
key: _key,
),
RaisedButton(
child: Text("Click me"),
onPressed: _onTapButton,
)
],
)
);
}
}
class ChildPage extends StatefulWidget {
const ChildPage({Key key}) : super(key: key);
@override
ChildPageState createState() {
return new ChildPageState();
}
}
class ChildPageState extends State<ChildPage> {
myMethod(){
print("called from parent");
}
@override
Widget build(BuildContext context) {
return Container(
child: Text("Click Me"),
);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.