Flutter学习(五) 基础控件 以及ios的Cupertino风格

这篇文章主要介绍 flutter中dialog的使用,和一些位置控件以及 ios风格的使用.其实ios风格的使用大部分都是在控件以前添加cupertinoios

Dialog

  • CircularProgressIndicator 旋转的加载框 loading
  • SimpleDialog 标题和两行信息展现
//dialog
 SimpleDialog(
            //标题
            title: Text('弹框'),
            children: <Widget>[
            //按钮
              SimpleDialogOption(
                child: Text('按钮1'),
                //按钮点击事件
                onPressed: () {},
              ),
              SimpleDialogOption(
                child: Text('按钮2'),
                onPressed: () {},
              ),
            ],
          ),
复制代码
  • AlertDialog 带肯定 取消 操做的弹框
AlertDialog(
                        //标题
                        title: Text('提示'),
                        //两行描述信息
                        content: SingleChildScrollView(
                          child: ListBody(
                            children: <Widget>[Text('删除'), Text('删除后不可恢复')],
                          ),
                        ),
                        //肯定 取消 按钮
                        actions: <Widget>[
                          FlatButton(
                              onPressed: () {
                                Navigator.of(context).pop();
                              },
                              child: Text('肯定')),
                          FlatButton(
                              onPressed: () {
                                Navigator.of(context).pop();
                              },
                              child: Text('取消')),
                        ],
                      );
                    })
复制代码
  • showDialog() 上边两种方式都是做为widget 方式去显示 showDialog()这个方法 能够将widget 弹框形式显示
showDialog(
                    context: context,
                    builder: (BuildContext context) {
                      return AlertDialog(
                        title: Text('提示'),
                        content: SingleChildScrollView(
                          child: ListBody(
                            children: <Widget>[Text('删除'), Text('删除后不可恢复')],
                          ),
                        ),
                        actions: <Widget>[
                          FlatButton(
                              onPressed: () {
                                Navigator.of(context).pop();
                              },
                              child: Text('删除')),
                          FlatButton(
                              onPressed: () {
                                Navigator.of(context).pop();
                              },
                              child: Text('取消')),
                        ],
                      );
                    });
复制代码

Table 表格

Table(
            //边界线条
            border: TableBorder.all(color: Color(0xffff0000), width: 2),
             //一个表格的宽
             columnWidths:{0: FixedColumnWidth(100), 1: FixedColumnWidth(100)} ,
            //默认一个表格的宽
            defaultColumnWidth: FixedColumnWidth(60.0),
            children: [
              TableRow(children: [
                Text('姓名'),
                Text('年龄'),
                Text('性别'),
                Text('籍贯'),
              ]),
              TableRow(children: [
                Text('刘泽'),
                Text('28'),
                Text('男'),
                Text('河北'),
              ]),
              TableRow(children: [
                Text('刘泽'),
                Text('28'),
                Text('男'),
                Text('河北'),
              ]),
              TableRow(children: [
                Text('刘泽'),
                Text('28'),
                Text('男'),
                Text('河北'),
              ]),
            ],
          ),
复制代码

Align 对子控件作对齐方式

Align(
        alignment: Alignment.centerRight,
        child: Container(
          height: 100,
          width: 100,
          color: Color(0xffff0000),
        ),
复制代码

Stack 相似相对布局 和帧布局能够叠加控件

  • Stack

Positioned 用来控制子控件在父控件中的位置bash

fit 在没有 Positioned的时候 会用这个属性控制字widget在 stack中 的位置ide

alignment 相对位置 中心点为原点的坐标轴布局

Stack(
         fit: StackFit.loose,
        alignment: Alignment(0, 0),
        children: <Widget>[
        Container(
          height: 100,
          width: 100,
          color: Color(0xff0000ff),
        ),
        Text('sdgdg'),
        Positioned(
            left: 50,
            top: 50,
            child: CircleAvatar(
              radius: 20,
              backgroundColor: Color(0xffff0000),
            ))
      ],
    )
复制代码
  • IndexedStack

用来显示第index 个child,下面案例有两个子widget 能够动态改变index 来肯定显示哪个childui

IndexedStack(
        index: _index,
        alignment: Alignment(1.2, -1.2),
        children: <Widget>[
          Container(
            height: 100,
            width: 100,
            color: Color(0xff0000ff),
          ),
          CircleAvatar(
            radius: 20,
            backgroundColor: Color(0xffff0000),
          ),
        ],
      )
复制代码

Dismissible 侧滑控件

能够作侧滑删除功能spa

Scaffold(
      body: ListView.builder(
        itemBuilder: (context, index) {
          var item = items[index];
          return Dismissible(
          //滑动方向
            direction: DismissDirection.endToStart,
            //滑动抬起监听
              onDismissed: (_) {
                items.removeAt(index);
              },
              //划出来的底层控件
              background: Container(
                color: Colors.red,
              ),
                //必须添加key
              key: Key('$item'),
              //上边覆盖的条目控件
              child: ListTile(
                title: Text('$item'),
              ));
        },
        itemCount: items.length,
      ),
    )
复制代码

GestureDetector 手势触摸监听

控件还有好多属性 能够打开源码 找咱们须要的属性code

child: GestureDetector(
            //单击
          onTap: () {
            _scaffoldkey.currentState
                .showSnackBar(SnackBar(content: Text('点击')));
          },
          //双击
          onDoubleTap: () {
            _scaffoldkey.currentState
                .showSnackBar(SnackBar(content: Text('双击')));
          },
          //child
          child: Container(
            padding: EdgeInsets.all(10),
            decoration: BoxDecoration(
              borderRadius: BorderRadius.circular(10),
              color: Colors.red,
            ),
            child: Text(
              '按钮',
              style: TextStyle(color: Colors.white),
            ),
          ),
        ),
复制代码

IOS 的Cupertino 风格

ios 风格只须要在widget 以前添加cupertino 前缀就能够使用ios风格的控件,其余用法与Android 一致事件

  • CupertinoButton()
  • CupertinoAlertDialog()
  • CupertinoActivityIndicator
  • CupertinoTabScaffold
  • CupertinoTabView
class _CupertinoWidgetState extends State<CupertinoWidget> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "iosdemo",
      home: CupertinoTabScaffold(
          tabBar: CupertinoTabBar(items: [
            BottomNavigationBarItem(
                icon: Icon(CupertinoIcons.add_circled), title: Text('添加')),
            BottomNavigationBarItem(
                icon: Icon(CupertinoIcons.book), title: Text('看书')),
          ]),
          tabBuilder: (context, index) {
            return CupertinoTabView(
              builder: (content) {
                switch (index) {
                  case 0:
                    return CupertinoAddWidget();
                    break;
                  case 1:
                    return CupertinoBookWidget();
                    break;
                }
              },
            );
          }),
    );
  }
}
复制代码
相关文章
相关标签/搜索