패키지, 저장소 및 앱 카테고리 검색

패키지 상세v1.0.1

bloc_provider

하위 위젯에 bloc을 제공합니다 (O(1)), 그리고 bloc은 bloc_provider가 내부적으로 보유한 상태에 따라 적절하게 해제됩니다.

AndroidiOSWebmacOSWindowsLinux
30일 다운로드
5천
좋아요
25
Pub 점수
150

패키지 설치

flutter pub add bloc_provider

패키지 개요

공개 정보를 바탕으로 생성한 선택 가이드입니다.

BlocProvider는 O(1) 검색 시간으로 Flutter 앱의 하위 위젯에 Bloc 인스턴스를 효율적으로 제공하는 가벼운 패키지입니다. 제공된 Bloc의 수명 주기를 관리하여 소유 위젯이 트리에서 제거될 때 자동으로 정리합니다. Bloc 패턴과 원활한 통합을 위해 설계되었으며, 적절한 리소스 정리와 반복 코드 감소를 통해 상태 관리를 단순화합니다. 여러 중첩된 위젯에서 Bloc을 사용하여 상태 처리가 필요한 앱에 이상적입니다.

사용 사례

  • 자식 위젯에 Bloc 인스턴스 제공하기
  • 복잡한 위젯 트리에서 Bloc 생명주기 관리
  • 중첩된 UI 컴포넌트에서 상태 접근 간소화
  • 사용자 인터페이스와 비즈니스 로직 간의 명확한 분리 구현
  • 대규모 앱에서 다중 레벨 상태 공유 지원

주요 기능

  • 위젯 트리를 통한 O(1) Bloc 접근
  • 제거 시 자동 Bloc 정리
  • 최소한의 보일러플레이트
  • 내장형 라이프사이클 관리
  • 모든 Bloc 구현과 호환됩니다

적합한 대상

  • Bloc 패턴을 사용하는 Flutter 앱
  • 효율적인 상태 전파를 찾는 개발자
  • 자동 리소스 정리가 필요한 프로젝트
  • 깊은 위젯 계층 구조를 가진 대규모 애플리케이션
  • 클린 상태 관리 아키텍처를 우선시하는 팀

고려 사항

  • Bloc 패턴에 대한 이해가 필요합니다
  • 비 Bloc 상태 관리에 적합하지 않습니다
  • 얕은 트리에서 과도하게 사용할 경우 오버헤드가 발생할 수 있습니다
  • 정확한 위젯 트리 구조에 따라 해제되며
  • Bloc이 주요 상태 컨테이너인 경우에만 제한됨

원본 README

연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.

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.

카테고리

소스 저장소

이 패키지를 사용하는 프로젝트