Pakete, Repositories und App-Kategorien suchen

Paketdetailsv1.0.1

bloc_provider

Bietet Bloc für abgeleitete Widgets (O(1)) an und entsorgt den Bloc entsprechend dem Zustand, den der BlocProvider intern verwaltet.

AndroidiOSWebmacOSWindowsLinux
30-Tage-Downloads
5000
Likes
25
Pub-Punkte
150

Paket installieren

flutter pub add bloc_provider

Paketübersicht

Aus öffentlichen Paketdaten erstellte Orientierung.

BlocProvider ist ein leichtgewichtiges Paket, das Bloc-Instanzen effizient an abgeleitete Widgets in einer Flutter-App mit O(1)-Suchzeit liefert. Es verwaltet den Lebenszyklus des bereitgestellten Blocs und entsorgt ihn automatisch, wenn das übergeordnete Widget aus dem Baum entfernt wird. Speziell für die nahtlose Integration mit dem Bloc-Muster entwickelt, vereinfacht es die Zustandsverwaltung, indem es eine ordnungsgemäße Ressourcenbereinigung sicherstellt und Boilerplate-Code reduziert. Ideal für Apps, die Bloc zur Zustandsverwaltung über mehrere verschachtelte Widgets hinweg verwenden.

Anwendungsfälle

  • Bloc-Instanzen an Kind-Widgets übergeben
  • Verwaltung des Bloc-Lebenszyklus in komplexen Widget-Bäumen
  • Zustandszugriff in verschachtelten Benutzeroberflächenkomponenten vereinfachen
  • Sicherstellung einer klaren Trennung zwischen Benutzeroberfläche und Geschäftslogik
  • Unterstützung der Zustandsteilung auf mehreren Ebenen in großen Anwendungen

Hauptmerkmale

  • O(1)-Zugriff auf Bloc über Widget-Baum
  • Automatische Bloc-Bereinigung bei Entfernung
  • Minimales Boilerplate
  • Eingebautes Lebenszyklus-Management
  • Funktioniert mit jeder Bloc-Implementierung

Geeignet für

  • Flutter-Apps mit dem Bloc-Muster
  • Entwickler, die eine effiziente Zustandsweitergabe suchen
  • Projekte, die eine automatische Ressourcenbereinigung erfordern
  • Großskalige Anwendungen mit tiefen Widget-Hierarchien
  • Teams, die saubere Zustandsverwaltungsarchitektur priorisieren

Hinweise

  • Erfordert Verständnis des Bloc-Musters
  • Nicht geeignet für nicht-Bloc-Zustandsverwaltung
  • Kann Überhead verursachen, wenn in flachen Bäumen übermäßig verwendet
  • Abhängig von der korrekten Widget-Baumstruktur für die Bereinigung
  • Beschränkt auf Anwendungsfälle, in denen Bloc der primäre Zustandscontainer ist

Original-README

Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.

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.

Kategorien

Quell-Repository

Projekte, die dieses Paket verwenden