美文网首页
Flutter 布局、state、Dart语法简单入门

Flutter 布局、state、Dart语法简单入门

作者: 老黑来袭 | 来源:发表于2021-01-04 16:43 被阅读0次

    作为一个 iOS开发者暂时不必要完全去看Dart的语法,因为每个语言都差不多有对应的语法糖,所以这里先简单介绍几种目前入门学习足够的对应语法。

    构造、析构

    Dart 和 Swift 或者 OC一样提供一个默认的构造方法,默认同名比如:
    Class DartTestClass {
    }
    同名构造函数
    他的默认构造方法是:
    DartTestClass()
    另外我们也可以自定义构造函数
    
    Class DartTestClass {
    String name ;
    String text;
    /// 自定义构造函数
       DartTestClass(this.name, this.text)
    自定义构造函数按照传入参数的顺序赋值,不需要手动 name = name 这种
    }
    
    /// const 构造函数 这里要求构造的内容全是 final 修饰 (不可变属性 final String name;)
    Class DartTestClass {
    final String name ;
    final String text;
    const DartTestClass(this.name, this.text)
    }
    
    /// 可选构造函数 用'{}' 修饰的参数
    Class DartTestClass {
     String name ;
     String text;
    /// 调用可选参数必须有形参 必须是可变参数不能用 final 修饰
     DartTestClass(this.name, {this.text})
    }
    
    /// 匿名构造函数 通过数组构造对象 匿名构造函数同样不可以有 final 修饰的参数
    Class DartTestClass {
     String name ;
     String text;
    
    DartTestClass.fromList(List<dynmic> list) {
    name = list[0];
    text = list[1];
    }
    }
    
    /// 重定向构造函数 
    /// 调用另一个构造函数
    Class DartTestClass {
     String name ;
     String text;
    
    DartTestClass.defaults(String name):this(name)
    
    }
    
    
    

    以上是构造函数,以上也写了 final 修饰的变量为不可变变量
    字符串拼接:
    final String name = 'namen';

    final String pinjie = '${name}:name';
    方法定义

    返回值类型 方法名称(参数类型 参数形参, 参数类型 参数形成) {
    方法体
    }
    
    Widget cellForRow(Int index) {
    }
    

    以上Dart语法简单介绍,根据以上介绍应该能大概理解Dart语法,以后有机会再详细写Dart

    布局属性介绍 Container

    Containet (
    alignment: Alignment(0, 0) // 参数 x y (0 0)  在Container 的中心点 iOS是左上角 取值范围 -1 ~1
    colors: Colors.white //  背景色
    padding: EdgeInsets.all(10)// 内间距
    margin: EdgeInsets.all(10) // 外间距 即绘制完本体所有子视图(小部件)之后子部件相对父小部件的距离。
    child: Widget()// 之前说过我理解为layer 因为是唯一的 相对的有 Colum 、 Row 、 Stack 部件有 children 是传入多个小部件
    )
    
    
    

    Row Colum

    #主轴
    // Row 的主轴 是 X 轴 ,第一个元素在最左侧, Colum 是 Y 轴,第一个元素的位置在colum上边对齐, Stack 是 Z 轴 第一个元素在Stack的最中间对齐
    // 这个相对位置的起点是可以改变的 mainAxisAlignment 属性可修改这个值的起点
    // mainAxisAlignment.spaceAround 代表剩下的空间平均分布到小部件的周围
    // start 是默认起点
    // end 默认起点的反方向为默认起点
    // center 整体居中
    // mainAxisAlignment.spaceBetween 剩下的空间平均分布到小部件之间
    // mainAxisAlignment.spageEvenly包括小部件所占大小一期平均缝补
    
    #交叉轴
    // 与主轴垂直的轴的排列 Stack除外 默认 center
    // CrossAxisAlignment.start
    // CorssAxisAlignment.end
    
    #textBaseline
    // 这个属性需要自己设置一下中英文情况下的区别 一下就能看见区别
    // 英文比中文效果好一些
    // alphabetic 英文字符
    // ideographic 中文字符
    

    Expanded

    填充布局

    被Expanded部件包裹的小部件之间会没有间距

    Stack

    部件positioned(
    left:0 ,// 部件在最左侧显示
    right:10,
    top 
    bottom
    child: 部件
    )
    针对Stack 内部的部件进行布局
    

    AspectRadio 按照宽高比

    AspectRadio(
    height: 100,
    width: 200,
    aspectRadio: 2 / 1,// 设 child 后面的 宽高比 但是如果设置了 heigit width 会显示对应的 height width ,height width 优先级更高
    child: Widget
    )
    

    Stateful

    有状态小部件 代表是 可变小部件格式是这样
    class StatefulDemo extends StatefulWidget {
      @override
      _StatefulDemoState createState() => _StatefulDemoState();
    }
    
    class _StatefulDemoState extends State<StatefulDemo> {
    int count = 0;
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          // 布局
          body: Center(
            child: Chip(label: Text('$count')),
          ),
     floatingActionButton: FloatingActionButton(
            child: Icon(Icons.add),
            onPressed: () {
              /// setState 内部的变化会实时更新
              setState(() {
                count++;
              });
              print('count = $count');
            },
          ),
        );
      }
    }
    需要一个部件和一个状态类
    最后调用 setState 方法修改 setState 内部关联的 UI
    

    下一篇:开始创建一个项目

    相关文章

      网友评论

          本文标题:Flutter 布局、state、Dart语法简单入门

          本文链接:https://www.haomeiwen.com/subject/hprvoktx.html