Flutter 语录

189 阅读3分钟
  • dart中 基本类型(数字、字符串、布尔值)和引用类型(对象引用)、null和函数都是对象;几乎除了基本变量的值和变量的类型一切皆为对象。Object是除了null所有对象的父类
  • final是运行时常量(例如可以在构造方法执行时再赋值),且只能被赋值一次 , const是编译时常量,必须在声明时赋值。const 常量隐式包含了 final。
  • q ??= 19; q 为null赋值为19 , 和kotlin ?:return 有点像;三目运算有点像
  • &:按位与(AND)01&11=01 都是1才为1, |:按位或(OR) 01|10=11 有一个1就是1, ^:按位异或(XOR) 01 ^11 = 10 有一个1就是1 都是1 就为0
Function makeAdder(int addBy) {  
return (int i) => addBy + i;  
}
  • 这个函数把addBy的值,保存到了这个匿名函数对象(把这个对象看做是一个类)中了,当调用这个匿名方法值会取addBy的值。dart函数也是一个对象
  • dart没有显式的声明一个接口,所以定义类想作为接口,要使用包或类名来区分;(3.0有了)
  • 一个widget对应多个element,如果key和runtimeType 同时相等则更新配置,否则创建新的element;当setSate后执行build,并判断canUpdate,TRUE->didUpdateWidget
  • 扩展方法和dynamic不能很好的一起工作
  • 如一个类同时mixin同一个方法,则with后面的会覆盖前面的方法。(后写的覆盖前面的)
  1. Dart不是类型安全的系统;因为List< String > 集合可以赋值给List< Object >, 当方法参数是List< Object >你可以传List< String > ,而List集合可以添加int类型数据,当运行时会发生异常。
  2. widget实际上是element的配置数据
  3. 对于flutter布局中尺寸约束,minWidth和minHeight是取尺寸最大的;如果你修改尺寸不生效可能是父类影响了子类,尝试使用(UnconstrainedBox)去掉约束
  4. widget如果你没有设置key默认是null,class Test extends BaseObject with TestMixin , TestMixin2
  5. 局部变量使用final,成员变量使用具体的类型;
  6. Flutter中父容器可以通过Notification来监听子控件的一些事件, 如滚动通知,布局变化通知,尺寸变化通知;类似向上冒泡; 当然我们还可以自定义通知,继承Notification,子类利用Notification.dispath()进行分发通知;注意父类接受到通知后及时返回一个true, 阻止继续递归分发通知;
  7. DefaultTextStyle是ProxyWidget的子类,所以使用它包裹孩子,修改其style样式,子child都会被修改;
  8. Dart 返回值如果未指定其实是dynamic类型,当要把函数作为变量使用时要注意
  9. Var类型一旦赋值过一次,类型就确定不可再变; dynamic 却可以被各种类型赋值多次,这个特点要注意否则会出现运行期异常;
  10. Build方法默认在SDK源码已经加上tryCatch
  11. dart int 无长度限制, 只有内存限制
  12. Int32List(10), 类似数组,固定length了;无法add;超过2147483647范围就变负的了
  13. 一般 AnimationController 并不设置上下界,否则在使用 Tween 时是在已定的上下界之上变化的
  14. 当一个方法返回一个Tuture< T > 对象, 你可以使用await 来获取他的值,但当前方法你要声明async 即使你什么也不返回; 第二个方法可以使用then方法的回调拿结果。
  15. Flutter使用自研的skia渲染引擎绘制widget,来保证多平台的一致性
  16. dart 中 mixin可以实现多重继承 class Test extends BaseObject with TestMixin , TestMixin2, Test中同时拥有 BaseObject ,TestMixin ,TestMixin2的所有代码;mixin混入有on关键字表示当前mixin类只能在哪个继续下使用,有限制范围的作用