layout: post title: “2019-12-06-dart语法.markdown” date: 2019-12-06 12:11:30 +0800

  1. with mixin on // with 类似于 extend,他是以组合的形式将各个功能结合到一块 // with 是实体类和mixin类的连接符号.使用了with的实体类,不能被再次with ``` class WidgetsFlutterBinding with GestureBinding, RendererBinding { void hitTest() { print(“WidgetsFlutterBinding.hitTest”); super.hitTest(); } }

mixin GestureBinding { void hitTest() { print(“GestureBinding.hitTest”); } } // on 用于连接mixin类,也有类似于extend的super.hitTest()功能. // super可以在实体类和mixin上依次传播执行. // mixin不能有构造函数,因为没有构造的机会

mixin RendererBinding on GestureBinding { void hitTest() { print(“RendererBinding.hitTest”); super.hitTest(); } }

WidgetsFlutterBinding.hitTest
RendererBinding.hitTest
GestureBinding.hitTest

2. V putIfAbsent(K key, V ifAbsent());
// ifAbsent是函数名. 这里使用了懒加载的方式,只有Absent的时候才会产生新对象.
// 入参仅提供获取该对象的入口,该入口有可能是一个固定对象,有可能只是一个创建新对象的方法.
  Map<PointerRoute, Matrix4> routes = {};
  routes = <PointerRoute, Matrix4>{};
  routes.putIfAbsent(PointerRoute(), ()=>Matrix4());
  routes[PointerRoute()] = Matrix4();

3. 以函数为参数

var mockMap = MockMap(); mockMap.putIfAbsent(“key1”, ()=>”2”); mockMap.putIfAbsent(“key1”, ()=>”2”);

class MockMap { Map<String, String> map = {};

putIfAbsent(String key, String getString()) { if (!map.containsKey(key)) { print(“put…”); map[key] = getString(); } } } ```