Flutter 之 Cupertino 系列控件

IOS 风格的控件,官网文档地址

https://flutterchina.club/widgets/cupertino/

CupertinoActivityIndicator

CupertinoActivityIndicator(
            animating: true,
            radius: 10.0,
          )

CupertinoAlertDialog

class _MyHomePageState extends State<MyHomePage> {
  void _showIOSDialog(BuildContext cxt) {
    showCupertinoDialog<int>(
        context: cxt,
        builder: (cxt) {
          return new CupertinoAlertDialog(
            title: Text('提示'),
            content: Text('是否退出应用'),
            actions: <Widget>[
              new Container(
                decoration: BoxDecoration(
                    border: Border(
                        right: BorderSide(color: Color(0xFFD9D9D9), width: 0.5),
                        top: BorderSide(color: Color(0xFFD9D9D9), width: 0.5))),
                child: CupertinoDialogAction(
                  child: new Text("确定"),
                  onPressed: () {
                    Navigator.pop(context);
                  },
                ),
              ),
              new Container(
                decoration: BoxDecoration(
                    border: Border(
                        top: BorderSide(color: Color(0xFFD9D9D9), width: 0.5))),
                child: CupertinoDialogAction(
                  child: new Text("取消"),
                  onPressed: () {
                    Navigator.pop(context);
                  },
                ),
              )
            ],
          );
        });
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        appBar: new AppBar(title: const Text('首页')),
        body: new Container(
          alignment: Alignment.center,
          child: RaisedButton(
            onPressed: () => {_showIOSDialog(context)},
            child: Text('点我弹框'),
          ),
        ));
  }
}

CupertinoButton

CupertinoButton(
            //按钮控件布局
            child: Text('IOS风格按钮'),
            //内边距
            padding:EdgeInsets.all(10.0),
            //背景颜色
            color:Colors.blue,
            //onPress 为 null,禁用点击的背景颜色
            disabledColor:Colors.grey,
            //最小尺寸
            minSize : 44.0,
            //按下的透明度
            pressedOpacity : 0.1,
            //边框圆角
            borderRadius : const BorderRadius.all(Radius.circular(8.0)),
            //点击事件
            onPressed:()=>{
              print('点我干嘛')
            }
          )
          

CupertinoDialog

过时了,用 CupertinoAlertDialog

CupertinoDialogAction

通常用于CupertinoAlertDialog的一个button


CupertinoDialogAction(
                  child: new Text("确定"),
                  //是否为默认按钮
                  isDefaultAction: true,
                  //是否为取消操作按钮
                  isDestructiveAction: true,
                  onPressed: () {
                    Navigator.pop(context);
                  },
                )

CupertinoSlider

CupertinoSlider(
            //当前进度值
            value:_progress,
            //进度条监听事件
            onChanged:(progress) => {
              _progress = progress,
              print("_progress$_progress"),
              setState((){
              })
            },
            //进度条开始监听
            onChangeStart:(progress) => {
              print("onChangeStart$progress"),
            },
            //进度条结束监听
            onChangeEnd:(progress) => {
              print("onChangeEnd$progress"),
            },
            //进度条最小值
            min : 0.0,
            //进度条最大值
            max : 100.0,
            //进度条分成多少分
            divisions:1,
            //进度条颜色
            activeColor:Colors.blue,
          )

CupertinoSwitch

CupertinoSwitch(
            value: _isOpen,
            onChanged: (isOpen) => {
              _isOpen = isOpen,
              setState((){

              })
            },
            //开关颜色
            activeColor: Colors.blue,
          )

CupertinoPageRoute


 onPressed: (){
                Navigator.push(context, new CupertinoPageRoute(
                builder: (context) => Details(),
                ));
            },
            
            

CupertinoNavigationBar

iOS风格的导航栏. 通常和CupertinoPageScaffold一起使用。

new CupertinoNavigationBar(
          //左边Widget(一般为返回按钮)
          leading: const Icon(Icons.arrow_back_ios),
          //如果为true并且middle为空的时候并且当前路由是CupertinoPageRoute,则自动用[Text]小部件填充,文本当前路由的“title”。
          automaticallyImplyMiddle: true,
          //上一页按钮
          previousPageTitle: '上一页',
          backgroundColor: Colors.blue,
          middle: const Text(
            '标题',
            style: TextStyle(color: Colors.white),
          ),
          //右边Widget
          trailing: const Text(
            'trailing',
            style: TextStyle(color: Colors.white),
          ),
          //边框
          border: Border.all(color: Color(0xFFD9D9D9), width: 1.0),
          //图标颜色
          actionsForegroundColor: Colors.white,
          //内边距
          padding: EdgeInsetsDirectional.zero,
          //是否在导航栏之间切换。
          transitionBetweenRoutes: true,
        )
        

CupertinoPageScaffold

一个iOS风格的页面的基本布局结构。包含内容和导航栏,和 CupertinoNavigationBar 一起使用。

new CupertinoPageScaffold(
        navigationBar: new CupertinoNavigationBar(
          middle: const Text(
            '标题',
            style: TextStyle(color: Colors.black),
          ),
        ),
        child: new Container(
          alignment: Alignment.center,
          child: RaisedButton(
            child: Text('跳转下一个页面'),
            onPressed: () {
              Navigator.push(
                  context,
                  new CupertinoPageRoute(
                    builder: (context) => Details(),
                  ));
            },
          ),
        ))

CupertinoTabScaffold 和 CupertinoTabBar

标签式iOS应用程序的结构。将选项卡栏放在内容选项卡之上

CupertinoTabBar 是 iOS风格的底部选项卡。 通常和CupertinoTabScaffold一起使用。

new CupertinoTabScaffold(
        tabBar: new CupertinoTabBar(
          items: <BottomNavigationBarItem>[
            new BottomNavigationBarItem(
              icon: Icon(Icons.home),
              activeIcon: Icon(Icons.hourglass_full),
              title:Text('首页',
                style: TextStyle(color: Colors.black))
            ),
            new BottomNavigationBarItem(
                icon: Icon(Icons.fiber_manual_record),
                activeIcon: Icon(Icons.fiber_manual_record),
                title:Text('社区',
                    style: TextStyle(color: Colors.black))
            ),
            new BottomNavigationBarItem(
                icon: Icon(Icons.add_shopping_cart),
                activeIcon: Icon(Icons.add_shopping_cart),
                title:Text('发现',
                    style: TextStyle(color: Colors.black))
            ),
            new BottomNavigationBarItem(
                icon: Icon(Icons.my_location),
                activeIcon: Icon(Icons.my_location),
                title:Text('我的',
                    style: TextStyle(color: Colors.black))
            ),
          ],
        ),
        tabBuilder: (context,index) => new Container(
          alignment: Alignment.center,
          child: RaisedButton(
            child: Text('跳转下一个页面$index'),
            onPressed: () {
              Navigator.push(
                  context,
                  new CupertinoPageRoute(
                    builder: (context) => Details(),
                  ));
            },
          ),
        ))

CupertinoTabView

支持选项卡间并行导航项卡的根内容。通常与CupertinoTabScaffolde一起使用

tabBuilder: (context, index) => new CupertinoTabView(
              //返回按钮描述文本
              defaultTitle: '返回',
              //注册跳转的路径和页面
              routes: {
                '/home': (context) {
                  return CupertinoPageScaffold(
                    navigationBar: CupertinoNavigationBar(
                      middle: Text('我是标题'),
                    ),
                    child: Center(
                      child: Text('我是第二页'),
                    ),
                  );
                },
              },
              builder: (context) => new Container(
                    alignment: Alignment.center,
                    child: RaisedButton(
                      child: Text('跳转下一个页面$index'),
                      onPressed: () {
                        Navigator.of(context).pushNamed('/home');
                      },
                    ),
                  ),
            )

最后效果图为

image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容

  • 当节奏慢了下来,早晨不必惊醒,晚间不必熬夜,连动作都变得缓慢,想让这一刻多静止几秒。阳光射进教室刚好感受到暖意。 ...
    空灵静阅读 256评论 1 0
  • 手里拿着1角钱硬币,2013年的。我小时候可以买4个糖或者1根辣条,那时候很珍惜这样的硬币。刚刚收到4枚,我不知道...
    閆乾易阅读 215评论 0 0
  • 《简·爱》是十九世纪英国著名的女作家夏洛蒂·勃朗特的代表作, 是一部具有自传色彩的作品。这是一本用自己的心与强烈的...
    x1n痛阅读 243评论 0 0
  • 开发环境 前言 这一系列文章是本人从初学者的角度编写,其主要目的用于记录,便于日后查看,次要目的是留给那些有意向开...
    BigWangHaHa阅读 764评论 0 1
  • 7月份Civei团队发起的最强战队团队赛,历时29天,终于完美收官。 一开始知道这个挑战赛的时候,我...
    王瑞琼阅读 494评论 0 1