| // Copyright (c) 2020, Google Inc. Please see the AUTHORS file for details. |
| // All rights reserved. Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| import 'package:built_collection/built_collection.dart'; |
| |
| void main() { |
| // `built_collection` provides immutable equivalents of Dart SDK `List`, |
| // `Set` and `Map`: `BuiltList`, `BuiltSet` and `BuiltMap`. |
| |
| // The easiest way to create them is from collection literals using `build`: |
| var builtList = [1, 2, 3].build(); |
| var builtSet = {1, 2, 3}.build(); |
| var builtMap = {1: 'one', 2: 'two', 3: 'three'}.build(); |
| |
| // `BuiltList` and `BuiltSet` can also be constructed from any `Iterable`. |
| // The unnamed constructors act like the SDK `from` constructors, meaning |
| // the elements are type checked at runtime. |
| builtList = BuiltList([1, 2, 3]); |
| builtSet = BuiltSet([1, 2, 3]); |
| |
| // Alternatively, the `of` constructors match the type to the `Iterable` you |
| // pass, and so do not need to check the type of elements. |
| builtList = BuiltList.of([1, 2, 3]); |
| builtSet = BuiltSet.of([1, 2, 3]); |
| |
| // `BuiltMap` can be constructed from a `Map` or a `BuiltMap`. |
| builtMap = BuiltMap({1: 'one', 2: 'two', 3: 'three'}); |
| |
| // Immutable collections can't be updated, but you can create new instances |
| // based on existing ones. The most convenient way to do that is the |
| // `rebuild` methods, which give you access to each collection type's |
| // corresponding builder type. |
| |
| // For example, to add some elements then sort: |
| builtList = builtList.rebuild((b) => b |
| ..addAll([7, 6, 5]) |
| ..sort()); |
| |
| // Generally, built collections match the SDK collections, except that the |
| // API has been split in two: read only methods go on the `Built` collection |
| // types, and mutating methods go on the corresponding `Builder` types. |
| |
| // If you need to keep a mutable version of the collection around for a |
| // while, for example to pass it to other methods, you can use `toBuilder`. |
| // Then, later, the collection is made immutable again by calling `build`. |
| var listBuilder = builtList.toBuilder(); |
| listBuilder.addAll([10, 9, 8]); |
| // More changes could go here, including passing the builder to other |
| // methods. |
| builtList = listBuilder.build(); |
| |
| // Finally, `built_collection` also provides immutable versions of |
| // `ListMultimap` and `SetMultimap` from `package:quiver`. For information |
| // on these, and full details on all the APIs, please see the package |
| // [dartdoc](https://pub.dev/documentation/built_collection/latest). |
| |
| // Use the values so the analyzer is happy. |
| print(builtList); |
| print(builtSet); |
| print(builtMap); |
| } |