• 07、FluterCupertino


    Cupertino风格

    Cupertino风格组件即iOS风格组件1,主要有CupertinoTabBar、CupertinoPageScaffold、CupertinoTabScaffold、CupertinoTabView等。

    本章所涉及的组件及内容有:

    CupertinoActivityIndicator组件
    CupertinoAlertDialog对话框组件
    CupertinoButton按钮组件
    Cupertino导航组件集(CupertinoTabBar、CupertinoPageScaffold、CupertinoTabScaffold、CupertinoTabView等)

    CupertinoActivityIndicator

    CupertinoActivityIndicator是一个iOS风格的loading指示器,通常用来做加载等待的效果展示。

    属性名 类型 默认值 说明
    radius double 10.0 加载图形的半径值,值越大图形越大
    animating bool true 是否播放加载动画,通常用来做动画控制处理,加载数据时为true,数据加载完成为false

    使用Cupertino风格组件需要导入Cupertino库,示例代码如下所示:

    import 'package:flutter/material.dart';
    import 'package:flutter/cupertino.dart';
    void main() => runApp(MyApp());
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'CupertinoActivityIndicator示例',
          home: Scaffold(
            appBar: AppBar(title: Text('CupertinoActivityIndicator示例'),),
            body: Center(
              child: CupertinoActivityIndicator(
                radius: 60.0,// 值越大加载的图形越大
              ),
            ),
          ),
        );
      }
    }
    

    CupertinoAertDialog

    CupertinoAlertDialog和Material Design风格的AlertDialog相似,内容部分可以用SingleChildScrollView包裹。操作按钮建议用CupertinoDialogAction组件。

    属性名 类型 说明
    actions List 对话框底部操作按钮,例如确定、取消
    title Widget 通常是一个文本组件
    content Widget 内容部分,通常为对话框的提示内容

    编写一个iOS风格的删除确认对话框示例,完整代码如下:、

    import 'package:flutter/material.dart';
    import 'package:flutter/cupertino.dart';
    void main() => runApp(MyApp());
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'CupertinoAlertDialog示例',
          home: Scaffold(
            appBar: AppBar(title: Text('CupertinoAlertDialog示例'),),
            body: Center(
              child: CupertinoAlertDialog(
                // 对话框标题
                title: Text('提示'),
                content: SingleChildScrollView(
                  // 对话框内容部分
                  child: ListBody(
                    children: [
                      Text('是否要删除'),
                      Text('一旦删除数据不可恢复')
                    ],
                  ),
                ),
                actions: [
                  CupertinoDialogAction(
                    child: Text('确定'),
                    onPressed: (){},
                  ),
                  CupertinoDialogAction(
                    child: Text('取消'),
                    onPressed: (){},
                  )
                ],
              ),
            ),
          ),
        );
      }
    }
    

    CupertinoButton

    CupertinoButton展示iOS风格的按钮。它可以响应按下事件,并且按下时会带一个触摸的效果。

    属性名 类型 默认值 说明
    color Color 组件的颜色
    disabledColor Color ThemeData.disabledColor 组件禁用颜色,默认为主题里的禁用颜色
    onPressed VoidCallback null 当按钮按下时会触发此回调事件
    child Widget 按钮的Child通常为一个Text文本组件,用来显示按钮文本
    enable bool true 按钮是否为禁用状态

    示例代码如下:

    import 'package:flutter/material.dart';
    import 'package:flutter/cupertino.dart';
    void main() => runApp(MyApp());
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'CupertinoButton示例',
          home: Scaffold(
            appBar: AppBar(title: Text('CupertinoButton示例'),),
            body: Center(
              child: CupertinoButton(
                // 按钮label
                child: Text('CupertinoButton'),
                color: Colors.blue,
                onPressed: (){},
              ),
            ),
          ),
        );
      }
    }
    

    Cupertino导航组件集

    Cupertino导航相关的组件也非常丰富,由于它们之间有关联关系,所以这里把导航相关组件放置一起说明。

    • CupertinoTabScaffold

    选项卡组件,将选项卡及选项卡视图绑定在一起。常用属性如下:

    属性名 类型 说明
    tabBar CupertinoTabBar 选项卡按钮,通常由图标加文本组成
    tabBuilder IndexedWidgetBuilder 选项卡视图构造器
    • CupertinoTabBar

    选项卡按钮,通常由BottomNavigationBarItem组成包含图标加文本。常用属性如下:

    属性名 类型 说明
    items List 选项卡按钮数据集合,通常由图标加文本组成
    backgroundColor Color 选项卡按钮背景色
    activeColor Color 选中的选项卡按钮前景色
    iconSize double 选项卡图标大小
    • CupertinoTabView

    选项卡视图,常用属性如下所示:

    属性名 类型 说明
    builder WidgetBuilder 选项卡视图构造器
    routes Map<String,WidgetBuilder> 选项卡视图路由
    • CupertinoPageScaffold

    页面的基本布局结构,包含内容和导航栏。常用属性如下所示:

    属性名 类型 说明
    backgroundColor Color 页面背景色
    navigationBar ObstructingPreferredSizeWidget 顶部导航栏按钮,包含左中右三个子组件,比如:页面中的返回按钮
    child Widget 页面的主要内容
    • CupertinoNavigationBar
    属性名 类型 说明
    middle Widget 导航栏中间组件,通常为页面标题
    trailing Widget 导航栏右边组件,通常为菜单按钮
    leading Widget 导航栏左边组件,通常为返回按钮

    综合案例的完整代码如下所示:

    import 'package:flutter/material.dart';
    import 'package:flutter/cupertino.dart';
    void main() => runApp(MyApp());
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Cupertino导航组件集',
          theme: ThemeData.light(), // 浅色主题
          home: MyPage(),
        );
      }
    }
    class MyPage extends StatefulWidget {
      @override
      _MyPageState createState() => new _MyPageState();
    }
    class _MyPageState extends State<MyPage> {
      @override
      Widget build(BuildContext context) {
        // 最外层导航选项卡
        return CupertinoTabScaffold(
          // 底部选项卡
          tabBar: CupertinoTabBar(
            backgroundColor: CupertinoColors.lightBackgroundGray, // 选项卡背景色
            items: [
              // 选项卡项,包含图片及文字
              BottomNavigationBarItem(
                  icon: Icon(CupertinoIcons.home),
                  title: Text('主页')
              ),
              BottomNavigationBarItem(
                  icon: Icon(CupertinoIcons.conversation_bubble),
                  title: Text('聊天')
              )
            ],
          ),
          tabBuilder: (context, index) {
            // 选项卡绑定的视图
            return CupertinoTabView(
              builder: (context) {
                switch (index) {
                  case 0:
                    return HomePage();
                    break;
                  case 1:
                    return ChatPage();
                    break;
                  default:
                    return Container();
                }
              },
            );
          },
        );
      }
    }
    // 主页
    class HomePage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return CupertinoPageScaffold(
          // 基本布局结构,包含内容和导航栏
          navigationBar: CupertinoNavigationBar(
            // 导航栏,只包含内容和导航栏
            middle: Text('主页'),
          ),
          child: Center(
            child: Text('主页', style: Theme.of(context).textTheme.button,),
          ),
        );
      }
    }
    // 聊天页面
    class ChatPage extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return CupertinoPageScaffold(
          navigationBar: CupertinoNavigationBar(
            // 导航栏,包含左中右三部分
            middle: Text('聊天面板'), // 中间标题
            trailing: Icon(CupertinoIcons.add), // 右侧按钮
            leading: Icon(CupertinoIcons.back), // 左侧按钮
          ),
          child: Center(
            child: Text('聊天面板', style: Theme.of(context).textTheme.button,),
          ),
        );
      }
    }
    
  • 相关阅读:
    第19章 网络通信----网络程序设计基础
    第18章 多线程----线程同步
    第18章 多线程----线程的优先级
    一款基于jquery和css3的响应式二级导航菜单
    一款纯css3实现的颜色渐变按钮
    一款基于jquery的手风琴显示详情
    推荐10款纯css3实现的实用按钮
    一款纯css3实现的数字统计游戏
    一款基于jquery ui的动画提交表单
    一款纯css实现的漂亮导航
  • 原文地址:https://www.cnblogs.com/pengjingya/p/14928543.html
Copyright © 2020-2023  润新知