Dart使用细节

1.判断2个字符串是否一样使用==号

        // 判断两个字符串是否相等
        bool equal(String str1, String str2) {
          return str1 == str2;
        }

2.可选参数

        // 这个方法里有个特殊地方[String from]这个字段是可以不传的,在字符串中使用$符合可以取得作用域里的参数
        String getUserInfo(String name, String sex, [String from]) {
          var info = '$name的性别是$sex';
          if (from != null) {
            info = '$info来自$from';
          }
          return info;
        }
        void test(){
          print(getUserInfo('小王', '男'));
        }

还可以给这个可选参数给默认值

        // 使用等号( = )来设置默位置字参数这样不传时候就不会是null
        String getUserInfo(String name, String sex, [String from = '中国']) {
          var info = '$name的性别是$sex';
          if (from != null) {
            info = '$info来自$from';
          }
          return info;
        }
        void test(){
          print(getUserInfo('小王', '男'));
        }

3.自己缕一缕

        var a, b;
        a = 0;
        b = ++a; //在b获得其值之前自增a
        assert(a == b); //1 == 1


        a = 0;
        b = a++; //在b获得值后自增a
        assert(a != b); //1 != 0


        a = 0;
        b = --a; //在b获得其值之前自减a
        assert(a == b); //-1 == -1


        a = 0;
        b = a--; //在b获得值后自减a
        assert(a != b); //-1 != 0

4.as、is和is!操作符在运行时用于检查类型非常方便

//直接使用is就可以对比

        if (user is User) {
          // 类型检测
          user.name = 'Flutter';
        }

//直接使用as可以强制转换
        (user as User).name = 'Flutter';

5.赋值操作符

        // 赋值给a
        a = value;
        // 如果b为空,则将值分配给b;否则,b保持不变
        b ??= value;

6.条件表达式如果条件为真,则返回expr1,否则返回expr2:

condition ? expr1 : expr2

7.级联操作

//其中的“..”符号代表的就是 querySelector('#btnOK).

        querySelector('#btnOK) //获取一个id为btnOK的按钮对象
          ..text = '确定'        //使用它的成员
          ..classes.add('ButtonOKStyle')
          ..onClick.listen((e) => window.alert('确定'));

8.for循环

//这种循环获取不到数组下标,只能获得对应下标的值v

        var arr = [0, 1, 2, 3, 4, 5, 6];
          for (var v in arr) {
            print(v);
          }

9.assert如果assert的判断为true,则继续执行下面的语句;反之则会抛出一个断言错误异常AssertionError

        // 确定变量的值不为null
        assert(text != null);

10.对象get和set会默认给建立不需要设置

        class User{
          String name; //name成员变量
          int age; //age成员变量
        }
        main() {
          var user = new User();
          user.name = '张三'; //相当于使用了name的setter方法
          user.age = 20;


        }

11.重载操作

        // 定义一个向量类
        class Vector {
          final int x;
          final int y;
          const Vector(this.x, this.y);

          //重载加号 + (a + b)
          Vector operator +(Vector v) {
            return Vector(x + v.x, y + v.y);
          }
          //重载减号 - (a - b)
          Vector operator -(Vector v) {
            return Vector(x - v.x, y - v.y);
          }
        }
        main() {
          // 实例化两个向量
          final v = Vector(2, 3);
          final w = Vector(2, 2);
          final r1 = v + w;

//意思就是x=2+2;y=3+2
          print('r1.x='+r1.x.toString() + ' r1.y=' + r1.y.toString());
          final r2 = v - w;

//意思就是x=2-2;y=3-2
          print('r2.x='+r2.x.toString() + ' r2.y=' + r2.y.toString());
        }

12.枚举类型

        enum Color {
          red,
          green,
          blue
        }
        // 定义一个颜色变量,默认值为蓝色
        Color aColor = Color.blue;
        switch (aColor) {
          case Color.red:
            print('红色');
            break;
          case Color.green:
            print('绿色');
            break;
          default: //默认颜色
            print(aColor);   //'Color.blue'
        }

13.Mixins

        class S {
          a() {print("S.a");}
        }
        class A {
          a(){print("A.a");}
          b(){print("A.b");}
        }

        class T = A with S;
        main(List<String> args) {
          T t = T();
          t.a();
          t.b();
        }

输出因为AwithB所以使用B优先

S.a

A.b

发布了20 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_28335347/article/details/105577910
今日推荐