Flutter 学习(二) dart基础语法

dart 语法的 构造函数生成 继承 实现 泛型 导包方式java

构造函数

1. 普通构造函数

//普通构造函数
class Point {
  num x;
  num y;
  Point(num x, num y){
    this.x = x;
    this.y = y;
  }
}
复制代码

2. 简化构造函数

class Point {
  num x;
  num y;
  //简化构造
  Point(this.x, this.y);
}
复制代码

3. 命名构造

class Point {
  num x;
  num y;
  //命名构造函数
  Point.fromJson(Map json) {
    x = json['x'];
    y = json['y'];
  }
}
复制代码

4. 重定向构造

class Point {
  num x;
  num y;
  Point(this.x, this.y);
  //重定向构造函数 使用冒号调用其余构造函数
  Point.alongXAxis(num x) : this(x, 0);
  }
复制代码

5. 调用超类构造函数

class Parent {
  int x;
  int y;

  //超类命名构造函数不会传递,若是但愿使用超类中定义的命名构造函数建立子类,则必须在子类中实现该构造函数
  Parent.fromJson(x, y)
      : x = x,
        y = y {
  }
}

class Child extends Parent {
  int x;
  int y;

  //若是超类没有默认构造函数, 则你须要手动的调用超类的其余构造函数
  Child(x, y) : super.fromJson(x, y) {
    //调用超类构造函数的参数没法访问 this
  
  }
  //在构造函数的初始化列表中使用 super(),须要把它放到最后
  Child.fromJson(x, y)
      : x = x,
        y = y,
        super.fromJson(x, y) {

  }
}
复制代码

6. 常量构造

用const 建立的对象 为同一个对象 var p2 = const Point2(4, 4);//常量对象 var p21 = Point2(4, 4); //建立的是非 常量对象json

class Point2 {
  //定义const构造函数要确保全部实例变量都是final
  final num x;
  final num y;
  static final Point2 origin = const Point2(0, 0);

  //const关键字放在构造函数名称以前,不能有函数体
  const Point2(this.x, this.y);

  @override
  String toString() {
    return 'Point2(x = $x, y = $y)';
  }
}
复制代码

7. 工厂方法构造函数

class Singleton {
  String name;
  static Singleton _cache; //工厂构造函数没法访问 this。因此这里要静态的

  //工厂构造函数,关键字factory
  //工厂构造函数是一种构造函数,与普通构造函数不一样,工厂函数不会自动生成实例,而是经过代码来决定返回的实例对象.
  factory Singleton([String name = 'singleton']) => Singleton._cache ??= Singleton._newObject(name);

//定义一个命名构造函数用来生产实例
  Singleton._newObject(this.name);
}
复制代码

get set 方法

每一个实例变量都隐含的具备一个 getter, 若是变量不是 final 的则还有一个 setter,能够经过实行 getter 和 setter 来建立新的属性, 使用 get 和 set 关键字定义 getter 和 setter安全

class Rectangle {
  num left;
  num top;
  num width;
  num height;

  Rectangle(this.left, this.top, this.width, this.height);

  //获取right值
  num get right => left + width;
  //设置right值,同时left也发生变化
  set right(num value) => left = value - width;
  //获取bottom值
  num get bottom => top + height;
  //设置bottom值,同时top也发生变化
  set bottom(num value) => top = value - height;
}
复制代码

重载运算符

能够对对象进行比较 + - * / > <bash

//重载操做符
class Vector {
  final int x;
  final int y;

  const Vector(this.x, this.y);

  //重载+
  Vector operator +(Vector v) {
    return new Vector(x + v.x, y + v.y);
  }

  //重载-
  Vector operator -(Vector v) {
    return new Vector(x - v.x, y - v.y);
  }
}
复制代码

使用方式ide

//重载操做符
  final v1 = Vector(2, 3);
  final v2 = Vector(2, 2);
  final r1 = v1 + v2;
  final r2 = v1 - v2;
  print([r1.x, r1.y]);
  print([r2.x, r2.y]);
复制代码

多继承 mixins 实现 implements

java 不能够多继承在dart中 with 来实现多继承函数

class Car extends Transportation
    with
        FourWheelTransportation,
        MiddleSafetyIndex,
        GasolineEnergyTransportation {
  @override
  void transport() {
    print(
        "汽车:\n动力组件: ${powerUnit()} , 安全指数: ${safetyIndex()} , 动力来源:${energy()}");
  }
复制代码

泛型

1.构造方法泛型

//构造函数泛型
class Phone<T> {
  final T mobileNumber;
  Phone(this.mobileNumber);
}
复制代码

2. 泛型函数

//泛型函数
  K addCache<K, V>(K key, V value) {
    K temp = key;
    print('${key}: ${value}');
    return temp;
  }
复制代码

3. 泛型限制 extends

//泛型限制
class Massage<T extends FootMassage > {
  final T massage;
  Massage(this.massage);
}
复制代码

导入类库 import

  • as 冲突标识符号,区分不一样类库一样名字的两个引用 as后面的名称能够随便写
  • show 载入库的某些部分
  • hide 筛选掉库的某些部分
  • deferred 延迟载入 使用时再去引入
  • library 组合导入,将多个文件组合导入
import 'dart:math'; //载入核心库

import 'package:dio/dio.dart'; //载入第三方库

import 'mylib1.dart' as lib1; //载入文件
import 'mylib2.dart' as lib2; //若是两个库有冲突的标识符,能够为其中一个或两个库都指定前缀

import 'mylib1.dart' as lib1 show Test; //只载入库的某些部分
import 'mylib2.dart' as lib2 hide Test; //筛选掉库的某些部分

import 'mylib1.dart' deferred as lazyLib; //延迟载入

import 'mylib/mylib.dart';//载入自定义库****

//组合导入

library material;
export 'ScreenAdapter.dart';
export 'AutoSizeConfig.dart';
复制代码
相关文章
相关标签/搜索