Flutter external 将方法的声明和实现分离, 查看 Map的源码如下 :
abstract class Map<K, V> { /// Creates an empty [LinkedHashMap]. /// /// This constructor is equivalent to the non-const map literal `<K,V>{}`. /// /// A `LinkedHashMap` requires the keys to implement compatible /// `operator==` and `hashCode`. /// It iterates in key insertion order. external factory Map(); /// Creates a [LinkedHashMap] with the same keys and values as [other]. /// /// The keys must all be instances of [K] and the values of [V]. /// The [other] map itself can have any type, unlike for [Map.of], /// and the key and value types are checked (and can fail) at run-time. /// /// Prefer using [Map.of] when possible, and only use `Map.from` /// to create a new map with more precise types than the original, /// and when it's known that all the keys and values have those /// more precise types. /// /// A `LinkedHashMap` requires the keys to implement compatible /// `operator==` and `hashCode`. /// It iterates in key insertion order. /// ```dart /// final planets = <num, String>{1: 'Mercury', 2: 'Venus', 3: 'Earth', 4: 'Mars'}; /// final mapFrom = Map<int, String>.from(planets); /// print(mapFrom); // {1: Mercury, 2: Venus, 3: Earth, 4: Mars} /// ``` factory Map.from(Map other) = LinkedHashMap<K, V>.from; /// Creates a [LinkedHashMap] with the same keys and values as [other]. /// /// A `LinkedHashMap` requires the keys to implement compatible /// `operator==` and `hashCode`, and it allows `null` as a key. /// It iterates in key insertion order. /// ```dart /// final planets = <int, String>{1: 'Mercury', 2: 'Venus', 3: 'Earth'}; /// final mapOf = Map<num, String>.of(planets); /// print(mapOf); // {1: Mercury, 2: Venus, 3: Earth} /// ``` factory Map.of(Map<K, V> other) = LinkedHashMap<K, V>.of; /// Creates an unmodifiable hash-based map containing the entries of [other]. /// /// The keys must all be instances of [K] and the values of [V]. /// The [other] map itself can have any type. /// /// The map requires the keys to implement compatible /// `operator==` and `hashCode`. /// The created map iterates keys in a fixed order, /// preserving the order provided by [other]. /// /// The resulting map behaves like the result of [Map.from], /// except that the map returned by this constructor is not modifiable. /// ```dart /// final planets = <int, String>{1: 'Mercury', 2: 'Venus', 3: 'Earth'}; /// final unmodifiableMap = Map.unmodifiable(planets); /// unmodifiableMap[4] = 'Mars'; // Throws /// ``` external factory Map.unmodifiable(Map<dynamic, dynamic> other);
Map 的具体实现在 patch 方法中 , 之所以要分离声明和方法体, 可以在跨平台时实现不同的实现