Coleções imutáveis baseadas nas coleções do SDK. Cada classe de coleção do SDK é dividida em uma nova classe de coleção imutável e uma classe mutável correspondente.
Orientação gerada a partir de informações públicas. Apenas para referência.
O Built Collection fornece versões imutáveis das coleções padrão do Dart, garantindo a integridade dos dados ao impedir modificações não intencionais. Cada coleção mutável do SDK (como List, Map, Set) possui uma versão imutável correspondente e um construtor mutável para criar instâncias. Isso promove práticas de programação funcional e gerenciamento de estado mais seguro em aplicações. O pacote é especialmente útil em frameworks de interface reativos ou com estado, onde a imutabilidade aumenta a previsibilidade e facilita o depuração. Ele se integra perfeitamente ao Flutter e a outras plataformas baseadas em Dart.
Casos de uso
Gerenciamento de estado imutável
Padrões de programação funcional
Compartilhamento seguro de dados entre componentes
Desenvolvimento de UI reativa
Evitando mutações acidentais
Persistência de estado em aplicativos
Principais recursos
classes de coleção imutável
padrões de construtor mutável
Construção segura por tipo
Integração contínua com o Dart SDK
Suporte para todas as principais plataformas
Design de API limpo
Indicado para
Desenvolvedores Flutter em busca de imutabilidade
Aplicativos que exigem mudanças de estado previsíveis
Equipes adotando programação funcional
Aplicações em grande escala com lógica de estado complexa
Desenvolvedores usando gerenciamento de estado reativo
Considerações
Pequeno sobrecarga de desempenho proveniente da imutabilidade
Curva de aprendizado para o padrão builder
Não adequado para cenários de mutação de alta frequência
Requer manipulação cuidadosa das atualizações de coleção
Pode aumentar o uso de memória devido à cópia
Melhor combinado com soluções de gerenciamento de estado como Provider ou Bloc
README original
Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.
Introduction
Built Collections are immutable collections using the
builder pattern.
Each of the core SDK collections is split in two: a mutable builder class
and an immutable "built" class. Builders are for computation,
"built" classes are for safely sharing with no need to copy defensively.
Immutable collections work particularly well with immutable values. See
built_value.
You can read more about built_collection
on medium.
Design
Built Collections:
are immutable, if the elements/keys/values used are immutable;
are comparable;
are hashable;
use copy-on-write to avoid copying unnecessarily.
See below for details on each of these points.
Recommended Style
A project can benefit greatly from using Built Collections throughout.
Methods that will not mutate a collection can accept the "built" version,
making it clear that no mutation will happen and completely avoiding
the need for defensive copying.
For code that is public to other projects or teams not using
Built Collections, prefer to accept Iterable where possible. That way
your code is compatible with SDK collections, Built Collections and any
other collection implementation that builds on Iterable.
It's okay to accept List, Set or Map if needed. Built Collections
provide efficient conversion to their SDK counterparts via
BuiltList.toList, BuiltListMultimap.toMap, BuiltSet.toSet,
BuiltMap.toMap and BuiltSetMultimap.toMap.
Built Collections are Immutable
Built Collections do not offer any methods that modify the collection. In
order to make changes, first call toBuilder to get a mutable builder.
In particular, Built Collections do not implement or extend their mutable
counterparts. BuiltList implements Iterable, but not List. BuiltSet
implements Iterable, but not Set. BuiltMap, BuiltListMultimap and
BuiltSetMultimap share no interface with the SDK collections.
Built Collections can contain mutable elements. However, this use is not
recommended, as mutations to the elements will break comparison and
hashing.
Built Collections are Comparable
Core SDK collections do not offer equality checks by default.
Built Collections do a deep comparison against other Built Collections
of the same type using Dart's equality operator (==). A Built Collection
cannot be compared to another Built Collection when they are of different
types, such as a BuiltList and a BuiltSet. Hashing is used to make
repeated comparisons fast.
// true: same contents according to `int.operator==`, `MyClass.operator==`BuiltList([1, 2, 3]) == BuiltList([1, 2, 3]);
BuiltList([MyClass(1), MyClass(2)]) == BuiltList([MyClass(1), MyClass(2)]);
// false: BuiltList and BuiltSet are never equalBuiltList([1, 2, 3]) == BuiltSet([1, 2, 3]);
// false: different contents according to `int.operator==`BuiltList([1, 2, 3]) == BuiltList([2, 3, 4]);
Built Collections are Hashable
Core SDK collections do not compute a deep hashCode.
Built Collections do compute, and cache, a deep hashCode. That means they
can be stored inside collections that need hashing, such as hash sets and
hash maps. They also use the cached hash code to speed up repeated
comparisons.
Built Collections Avoid Copying Unnecessarily
Built Collections and their builder and helper types collaborate to avoid
copying unless it's necessary.
In particular, BuiltList.toList, BuiltListMultimap.toMap,
BuiltSet.toSet, BuiltMap.toMap and BuiltSetMultimap.toMap do not make
a copy, but return a copy-on-write wrapper. So, Built Collections can be
efficiently and easily used with code that needs core SDK collections but
does not mutate them.
When you want to provide a collection that explicitly throws when a
mutation is attempted, use BuiltList.asList,
BuiltListMultimap.asMap, BuiltSet.asSet, BuiltSetMultimap.asMap
and BuiltMap.asMap.
Features and bugs
Please file feature requests and bugs at the issue tracker.