Dart语法
layout: post title: “2019-12-06-dart语法.markdown” date: 2019-12-06 12:11:30 +0800
- 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(); } } } ```