flutter 学习感悟

flutter

入口程序

dart

官网与安装

https://dart.dev/get-dart

语言特点

  • 万物皆对象,函数也是对象
  • 指定类型不是必须的,是弱类型语言
  • 代码在运行前解析
  • dart 统一的程序入口 main
  • 变量名和方法名前加下划线代表私有
  • 高级语言
  • 多继承
  • 变量区别大小写

dynamic 与object 的区别

  • object 是所有类型的基类,dynamic 更像是万能类型,可以赋值任意的对象
  • dynamic 初始化时,系统就提供了类型的所有可能组合,可以直接调用这个类型的方法和属性,而object 需要强转
as 类型转换
main() {
  dynamic t;  //万用类型
  Object b;
  b=Dog();
  t = Dog();
  t.name="hhh";
  t.eat();
  final a=100; //使用时被初始化
  const c=1000;//编译时常量
  (b as Dog).eat(); //object的类型强转,类似于kt
  //print();
}

基本数据类型(5种)

Number

  • int
  • double

String

  • 双引号和单引号没什么区别

Boolean

List

Map

常量

  const g = 123333;
  final h = 1111;

final 和 const 的区别

  • final是使用的时候初始化,const 是编译时常量
  • 共同的功能是声明变量不可修改

NaN

  int l;
  l??=23;//如果l为null的话给l赋值为23
  print(l);

const 与final 的区别

  • final 可以开始不赋值,只能赋值一次
  • final 有const的编译时常量的特性,最重要的它是运行时常量,具有惰性初始化->即运行时第一次使用时才初始化

函数

  • 方法里可以嵌套方法,函数也是对象,函数可以作为参数传递给其他函数
  • 方法形参的类型不一定要声明类型,此时默认当做dynamic 类型
bool isNums(int a){
  return a!=0;
}
isNums2(int a){
  return a!=0;
}

箭头函数

箭头函数后面是不能加代码块的,只能写一行语句,不能有分号

匿名函数

  var jjj=(username,age,sex){
    print("$username===$age===$sex");
  };
 
  jjj("hcy",22,33);

静态成员与静态方法

  • 静态方法不能访问非静态的方法和属性
    static

操作符

级联操作(…)

就是连续操作着一些方法,类似于lambda

  Dog dogs = new Dog();
  dogs
    ..name = "snb"
    ..age = "28"
    ..eat();
is 判断数据类型

判断是否属于某个类型

??
?.

如果不等于空就往下执行(类似kt)

  Dog dogs=new Dog();
  dogs?.eat();

闭包

全局变量,常驻内存,但可能污染数据
局部变量,不常驻内存,方法调用完,变量回收不污染数据

闭包的作用:使局部变量常驻内存。方法调用完不会被回收

  fun() {
    var a = 100;
    return () {
      a++;
      print(a);
    };
  }
  var v=fun();
  print(v);
  v();//101
  v();//102
  v();//103

  (fun())();//101
  (fun())();//101
  (fun())();//101

对象

-基于mixin的继承方式:一个类可继承对个父类===多继承
-根父类Object

实例化对象

  void test4(){
    var man=Man("hcy2019",12);
    man.eat();
  }

私有属性和私有方法 _

class Animal {
  var _sex = "nan";//私有属性

  void _eat() {
    print("====Animal=eat==");//私有方法
  }
}

实例化成员变量

class Box {
  int boxWeight;
  String boxMadeInPlace;
}
  • 默认了一个null构造方法
  • 隐式定义了get,set方法。这点类似于kt与java的交集

构造函数

  • 常规写法1
class Box {
  int boxWeight;
  String boxMadeInPlace;
  Box(int boxWeight, String boxMadeInPlace) {
    this.boxMadeInPlace=boxMadeInPlace;
    this.boxWeight=boxWeight;
  }
}
  • 常规写法2 === 同样定义相同的构造函数会报错
class Box {
  int boxWeight;
  String boxMadeInPlace;

//  Box(int boxWeight, String boxMadeInPlace) {
//    this.boxMadeInPlace=boxMadeInPlace;
//    this.boxWeight=boxWeight;
//  }
  Box(this.boxWeight, this.boxMadeInPlace);
}
  • 常规写法3 命名构造函数
class Box {
  int boxWeight;
  String boxMadeInPlace;

//  Box(int boxWeight, String boxMadeInPlace) {
//    this.boxMadeInPlace=boxMadeInPlace;
//    this.boxWeight=boxWeight;
//  }
  //Box(this.boxWeight, this.boxMadeInPlace);

  Box.madeBox(int weight, String boxP) {
    this.boxWeight = weight;
    this.boxMadeInPlace = boxP;
  }
}

类似于java的静态方法,但又似是而非

  • 常规写法4
class Box {
  int boxWeight;
  String boxMadeInPlace;
  Box(boxWeight, boxMadeInPlace)
      : boxWeight = boxWeight,
        boxMadeInPlace = boxMadeInPlace;
}

重载 operator

Mixins 混入功能 关键字with

  • 类似于多继承,是一种全新的特性
  • mixins的类不能有构造器
  • 一个类可以mixins多个mixins类
  • 作为mixins的类只能继承自object,不能继承其他类
  • mixins 的类或者继承里的类里有同样的方法,后面的方法会替换前面的方法
class T = Dog with Box;

void main() {
  //var box = new Box(100, "made in china");
  //print("${box.boxMadeInPlace}=====${box.boxWeight}");
  //box.tests(100);
//  var dog=new Dog();
//  dog.eat();

  T t = new T();
  t.tests(100);//类Box里的方法 
  t.eat();//类Dog里的方法

}

泛型 表示

泛型

泛型就是解决 类 接口 方法的复用性,以及对不特定数据类型的支持(类型校验)

泛型方法
  T tes1t<T>(T value) {
    return value;
  }

继承

  • 子类使用extends继承父类
  • 子类会继承父类里所有的可见的属性和方法,但不能继承构造函数(父私有的属性和方法不能被子类引用的)
  • 子类能复写父类的方法

抽象类

主要用于定义标准

  • 抽象类不能被直接实例化,只有继承的子类才能被实例化

多态

子类的实例赋值给父类的引用

接口

普通类或抽象类都可以作为接口被实现

引入

  • dart:xx dart语言提供的库文件
  • package:xx 第三方的库文件

指定一个库的前缀 as

引用库的一部分

  • show 只引用一点
  • 除此之外都引用

异步

注释 基本与java一致

组件

一切皆组件

容器组件

图片组件

文本组件

图标及按钮组件

图标组件分类功能可否交互
Icon(图标组件)展示图标不可交互
IconButton 图标按钮组件展示图标,响应事件可以
RaisedButton 凸起按钮组件触摸效果,响应事件可以

列表组件

表单组件

form组件 用于整个表单提交使用

async 和 await

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值