Buscar pacotes, repositórios e categorias de apps

Detalhes do pacotev6.0.0

built_collection

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.

AndroidiOSWebmacOSWindowsLinux
Downloads em 30 dias
12,4 mi
Curtidas
347
Pontos Pub
150

Instalar pacote

flutter pub add built_collection

Visão geral do pacote

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.

Build pub package package publisher

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 equal
BuiltList([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.

Categorias

Repositório-fonte

Projetos que usam este pacote

Rankings