一篇搞定Flutter面试(持续更新)

本文介绍了Dart语言的关键特性,包括强类型、动态类型、闭包、数字类型、赋值操作符、可选方法参数、作用域规则、构造方法、gettersetter重写、断言、运算符重载、类与接口、Zone机制、Future和Stream的异步操作。此外,还探讨了Flutter的Widget、Element、RenderObject和Layer树、BuildContext、状态共享、生命周期以及异步构建。

Dart 部分

如果您学习过 JavaScript 或者 Java/Kotlin ,那么在学习 Dart 上难度并不大,Dart 综合了动态语言和静态语言的特性, 他也有一些自己的特点。
1、Dart 属于是强类型语言 ,但可以用 var 来声明变量,Dart 会自推导出数据类型,var 实际上是编译期的“语法糖”。dynamic 表示动态类型, 被编译后,实际是一个 object 类型,在编译期间不进行任何的类型检查,而是在运行期进行类型检查。
2、Dart 中 if 等语句只支持 bool 类型,switch 支持 String 类型。
3、Dart 中数组和 List 是一样的。
4、Dart 中,Runes 代表符号文字 , 是 UTF-32 编码的字符串, 用于如 Runes input = new Runes(’\u{1f596} \u{1f44d}’);
5、Dart 支持闭包。
6、Dart 中 number 类型分为 int 和 double ,没有 float 类型。
7、Dart 中 级联操作符 可以方便配置逻辑,如下代码:

event
  ..id = 1
  ..type = ""
  ..actor = "";

8、赋值操作符
比较有意思的赋值操作符有:
AA ?? “999” ///表示如果 AA 为空,返回999
AA ??= “999” ///表示如果 AA 为空,给 AA 设置成 999
AA ~/999 ///AA 对于 999 整除
9、可选方法参数
Dart 方法可以设置 参数默认值 和 指定名称
比如:

getDetail(Sting userName, reposName, {
   
   branch = “master”}){
   
   
 } 

方法,这里 branch 不设置的话,默认是 “master” 。参数类型 可以指定或者不指定。调用效果:

getRepositoryDetailDao(“aaa", “bbbb”, branch: “dev”); 

10、作用域
Dart 没有关键词 public 、private 等修饰符,_ 下横向直接代表 private ,但是有 @protected 注解 。

11、构造方法
Dart 中的多构造方法,可以通过命名方法实现。
默认构造方法只能有一个,而通过 Model.empty() 方法可以创建一个空参数的类,其实方法名称随你喜欢,而变量初始化值时,只需要通过 this.name 在构造方法中指定即可:

class ModelA {
   
   
  String name;
  String tag;

  //默认构造方法,赋值给name和tag
  ModelA(this.name, this.tag);

  //返回一个空的ModelA
  ModelA.empty();

  //返回一个设置了name的ModelA
  ModelA.forName(this.name);
}

12、getter setter 重写
Dart 中所有的基础类型、类等都继承 Object ,默认值是 NULL, 自带 getter 和 setter ,而如果是 final 或者 const 的话,那么它只有一个 getter 方法,Object 都支持 getter、setter 重写:

 @override
  Size get preferredSize {
   
   
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值