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

<think>嗯,用户想要获取Flutter相关的学习资源和教程。首先,我需要回忆一下之前系统里的引用内容。看到引用1提到了Flutter学习资料,推荐GetX框架,还有引用3提到Flutter 3发布和一个免费的在线教程链接。引用2虽然主要是关于Android的,但提到的系统性学习的方法可能也适用,可以顺便提一下。 用户可能需要从基础到进阶的资源,所以应该分阶段推荐。首先官方文档肯定是最权威的,必须放在第一位。然后是免费教程,比如引用3里的FlutterFire UI链接,可能还有其他的免费资源,比如中文社区或YouTube课程。接着是实战项目,比如入门实战的书籍或者GitHub上的项目,这样用户能应用所学知识。 关于状态管理和路由,引用1提到GetX,这是一个比较流行的框架,应该详细介绍一下。另外,其他状态管理方案如Provider和Bloc也需要提及,让用户知道有多种选择。社区资源也很重要,比如掘金、Stack Overflow,帮助用户解决问题和交流。 系统化学习的方法论部分,引用2提到制定学习计划,形成知识体系,这部分可以结合到建议中,提醒用户不要零散学习,要系统化。同时,引用3中的免费教程链接需要正确插入,比如FlutterFire UI的链接作为参考。 还要考虑用户可能的后续问题,比如跨平台开发、性能优化等,所以生成相关问题的时候要涵盖这些方面。确保回答的结构清晰,分点列出,每个部分都有相应的资源链接或书籍推荐,并正确标注引用来源。最后检查是否有遗漏的重要资源,比如Flutter官方频道的YouTube教程,或者推荐的书籍是否有中译本,方便中文用户。总之,要确保信息准确,引用正确,并且覆盖用户可能需要的各个方面。</think>### Flutter 学习资源与教程推荐 #### 1. **官方文档与基础教程** - **Flutter官方文档**:系统学习Flutter的起点,涵盖组件、API、开发工具等核心内容[^1]。 - 官网:[flutter.dev](https://flutter.dev) - 中文社区翻译版:[flutter.cn](https://flutter.cn) - **免费在线课程**:适合新手的实战教程,如引用[3]提到的FlutterFire UI教程,涵盖路由、状态管理等模块化开发[^3]。 #### 2. **实战项目与进阶框架** - **入门实战**: - 书籍:《Flutter实战·第二版》(中文开源电子书) - GitHub项目:搜索“flutter beginner projects”获取代码示例。 - **状态管理框架**: - **GetX**:轻量级框架,集成路由、依赖注入等功能,适合中小型项目[^1]。 - **Provider/Bloc**:官方推荐的状态管理方案,适合复杂应用。 #### 3. **社区与工具** - **中文社区**:掘金、知乎的Flutter专栏,解决常见问题。 - **开发工具**:Android Studio或VS Code,搭配Dart/Flutter插件。 - **调试工具**:Flutter DevTools(性能分析、UI检查)。 #### 4. **系统化学习方法** 参考引用[2]的建议,制定学习计划,例如: 1. 基础语法与组件(2周) 2. 状态管理与路由(1周) 3. 网络请求与本地存储(1周) 4. 项目实战(持续迭代)[^2]。 #### 5. **扩展资源** - **YouTube频道**:Flutter官方频道、The Net Ninja的教程系列。 - **开源项目**:Flutter Samples(GitHub官方示例库)。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值