Buscar pacotes, repositórios e categorias de apps

Detalhes do pacotev1.0.1

bloc_provider

Fornece o bloc para widgets descendentes (O(1)), e o bloc é descartado adequadamente pelo estado que o bloc_provider mantém internamente.

AndroidiOSWebmacOSWindowsLinux
Downloads em 30 dias
5 mil
Curtidas
25
Pontos Pub
150

Instalar pacote

flutter pub add bloc_provider

Visão geral do pacote

Orientação gerada a partir de informações públicas. Apenas para referência.

BlocProvider é um pacote leve que entrega de forma eficiente instâncias do Bloc para widgets descendentes em um aplicativo Flutter com tempo de busca O(1). Ele gerencia o ciclo de vida do Bloc fornecido, descartando automaticamente quando o widget proprietário for removido da árvore. Projetado para integração perfeita com o padrão Bloc, simplifica a gestão de estado garantindo limpeza adequada de recursos e reduzindo o código repetitivo. Ideal para aplicativos que usam o Bloc para gerenciar estados em múltiplos widgets aninhados.

Casos de uso

  • Fornecendo instâncias do Bloc para widgets filhos
  • Gerenciando o ciclo de vida do Bloc em árvores de widgets complexas
  • Simplificando o acesso ao estado em componentes de interface aninhados
  • Garantir uma separação clara entre a interface do usuário e a lógica de negócios
  • Suporte ao compartilhamento de estado em múltiplos níveis em grandes aplicativos

Principais recursos

  • Acesso O(1) ao Bloc por meio da árvore de widgets
  • Liberação automática do Bloc na remoção
  • Boilerplate mínimo
  • Gerenciamento de ciclo de vida embutido
  • Funciona com qualquer implementação do Bloc

Indicado para

  • Aplicativos Flutter usando o padrão Bloc
  • Desenvolvedores procurando propagação eficiente de estado
  • Projetos que exigem limpeza automática de recursos
  • Aplicações em grande escala com hierarquias profundas de widgets
  • Equipes priorizando arquitetura de gerenciamento de estado limpo

Considerações

  • Requer compreensão do padrão Bloc
  • Não adequado para gerenciamento de estado não-Bloc
  • Pode introduzir sobrecarga se usado em excesso em árvores rasas
  • Depende da estrutura correta da árvore de widgets para descarte
  • Limitado a casos de uso em que o Bloc é o principal container de estado

README original

Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.

bloc_provider Codemagic build status

Provides BLoC(Business Logic Component) to descendant widget (O(1)), and the bloc is disposed automatically by the state which the bloc_provider holds internally.

Recommended other packages

bloc_provider was one of the good choice for BLoC pattern until early 2019, but I now recommend to use these instead.

bloc_provider will now be minimally maintained.

Usage

1. Define some BLoC like this:
class CounterBloc implements Bloc {
  final _countController = BehaviorSubject<int>.seeded(0);
  final _incrementController = PublishSubject<void>();

  CounterBloc() {
    _incrementController
        .scan<int>((sum, _v, _i) => sum + 1, 0)
        .pipe(_countController);
  }

  ValueStream<int> get count => _countController;
  Sink<void> get increment => _incrementController.sink;

  @override
  void dispose() async {
    await _incrementController.close();
    await _countController.close();
  }
}
2. Provide the bloc by using BlocProvider and access the bloc at subtree:
void main() => runApp(
      // Create and provide the bloc.
      BlocProvider<CounterBloc>(
        creator: (_context, _bag) => CounterBloc(),
        child: App(),
      ),
    );

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // Access the bloc with O(1) computation complexity.
    final bloc = BlocProvider.of<CounterBloc>(context);
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: StreamBuilder<int>(
            stream: bloc.count,
            initialData: bloc.count.value,
            builder: (context, snap) => Text(
                  'count: ${snap.data}',
                  style: Theme.of(context).textTheme.title,
                ),
          ),
        ),
        floatingActionButton: FloatingActionButton(
          child: const Icon(Icons.add),
          onPressed: () => bloc.increment.add(null),
        ),
      ),
    );
  }
}
  • Computational complexity of of method, which is used for accessing the bloc is O(1).
  • Provided bloc will be disposed when the inner state is disposed 👍

Examples

Technical explanation

Features and bugs

Please file feature requests and bugs at the issue tracker.

Categorias

Repositório-fonte

Projetos que usam este pacote