Flutter onPressed Event 輕度解析
onPressed event,是傳入一個function 且是不帶有回傳值的,假設我們傳入一個null時,button 是處於不可按狀況
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("First App"),
),
body: Column(children: <Widget>[
Text("你喜歡小娜嗎?"),
RaisedButton(child: Text("喜歡"),onPressed: null),
RaisedButton(child: Text("不喜歡"),onPressed: null),
],),
),
);
}
那如果我們想要他點按扭後,執行某一個function 時,應該怎麼做呢?
我們先來看一下官方的文件
這邊傳入一個VoidCallback,也就是說我們必須傳入一個function的參照,
而function的參照就是function name 不加()
class MyApp extends StatelessWidget {
answerTheQuestion(){
print("Button is pressed");
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("First App"),
),
body: Column(children: <Widget>[
Text("你喜歡小娜嗎?"),
RaisedButton(child: Text("喜歡"),onPressed: answerTheQuestion), // function的參照
RaisedButton(child: Text("不喜歡"),onPressed: answerTheQuestion), // function的參照
],),
),
);
}
}
另外,如果這個function 只執行一次,而且只有一行我們可以用fat-arrow來撰寫,格式是 () => command code
RaisedButton(child: Text("喜歡"),onPressed: () => print("Button is pressed")),
RaisedButton(child: Text("不喜歡"),onPressed: () => print("Button is pressed")),
又或者您也可以使用匿名函數來實現(anonymous function)
使用方式是: () {…}
RaisedButton(child: Text("喜歡"),onPressed: (){
print("Button is pressed");
})
以上的的撰寫方式都不會被立即執行,都是傳入一個function的參照