
以前的按鈕iOS跟Android都只有一種
但Flutter光常用的就有3+1+1種
據說總共有10種以上
所有按鈕都是透過onPressed來處理點擊事件
如果onPressed為null
按鈕就會強制變成disable
所以至少要給個空function
另外如果要做圓角按鈕
可以透過shape屬性處理
shape:RoundedRectangleBorder(borderRadius: BorderRadius.circular(20.0))
1.RaisedButton有陰影會有抬起的效果
2.FlatButton扁平樣式感覺最簡潔的
3.OutlineButton有框線的
以上三個按鈕都是Material風格的按鈕
所以基本上除了外觀不同以外
有以下相同的特性
RaisedButton(child: Text("RaisedButton"))
RaisedButton.icon(icon: Icon(Icons.link), label: Text("link"), onPressed: () {});
是個沒有文字的圓形按鈕
雖然IconButton不是Material風格
但也是會有水波效果
就是UIButton啦~
還有一些BackButton啦、CloseButton啦
都會自帶Navigator.maybePop作用
BackButton還會根據不同平台顯示不同圖案
(話說iOS13也新增了一個close的buttonType)
一樣有分AlertDialog 跟 CupertinoAlertDialog 兩種外觀
跟以前AlertController差不多
有title, content, actions
也是用跟present類似的方法:showDialog 跟 showCupertinoDialog去把dialog叫出來
(showDialog可以透過barrierDismissible決定可否點背景關閉)
但是有一點不太一樣⚠️⚠️⚠️必須在action裡自己呼叫Navigator.pop把dialog給dismiss掉
如果要取得dialog的值也是透過pop回傳, 如下
//1. 在AlertDialog的按鈕裡透過pop把布林值傳出來
class CupertinoButtonAlertDialog extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoAlertDialog(
      title: Text("你按的是"),
      content: Text("iOS"),
      actions: <Widget>[
        CupertinoButton( //裝IconButton會壞掉XD
            child: Text("No~"),
            onPressed: () {
              Navigator.pop(context, false);
            }),
        CupertinoButton(
            child: Text("Yes!"),
            onPressed: () {
              Navigator.pop(context, true);
            }),
      ]
    );
  }
}
//2. 設定按下按鈕執行showCupertinoDialog
//因為showCupertinoDialog會回傳一個Future
//所以必須指定call back為async
//並用await把值接住
final cupertinoButton = CupertinoButton(child: Text("CupertinoButton"), onPressed: () async {
  bool ans = await showCupertinoDialog(
    context: context,
    builder: (BuildContext content) {
        return CupertinoButtonAlertDialog();
      }
  );
  print("答案是 $ans");
});
| Android | iOS | Flutter | 
|---|---|---|
| Button | UIButton | RawMaterialButton | 
| Dialog | UIAlertController | AlertDialog | 
本集內容Android版請見:iOS Developer Learning Android. Lesson 11
下集預告:圖片
