Full Code of felangel/bloc for AI

master e7f581facd7f cached
1697 files
4.3 MB
1.2M tokens
2163 symbols
1 requests
Download .txt
Showing preview only (4,893K chars total). Download the full file or copy to clipboard to get everything.
Repository: felangel/bloc
Branch: master
Commit: e7f581facd7f
Files: 1697
Total size: 4.3 MB

Directory structure:
gitextract_snx3nznv/

├── .github/
│   ├── CODEOWNERS
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── build.md
│   │   ├── chore.md
│   │   ├── ci.md
│   │   ├── config.yml
│   │   ├── documentation.md
│   │   ├── feature_request.md
│   │   ├── performance.md
│   │   ├── refactor.md
│   │   ├── revert.md
│   │   ├── style.md
│   │   └── test.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── actions/
│   │   ├── angular_dart_package/
│   │   │   └── action.yaml
│   │   ├── astro_site/
│   │   │   └── action.yaml
│   │   ├── dart_compile/
│   │   │   └── action.yaml
│   │   ├── dart_package/
│   │   │   └── action.yaml
│   │   └── flutter_package/
│   │       └── action.yaml
│   ├── codecov.yml
│   ├── dependabot.yml
│   └── workflows/
│       └── main.yaml
├── .gitignore
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── analysis_options.yaml
├── bricks/
│   ├── README.md
│   ├── bloc/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __brick__/
│   │   │   ├── {{name.snakeCase()}}_bloc.dart
│   │   │   ├── {{name.snakeCase()}}_event.dart
│   │   │   ├── {{name.snakeCase()}}_state.dart
│   │   │   ├── {{~ basic_bloc }}
│   │   │   ├── {{~ basic_event }}
│   │   │   ├── {{~ basic_state }}
│   │   │   ├── {{~ equatable_bloc }}
│   │   │   ├── {{~ equatable_event }}
│   │   │   ├── {{~ equatable_state }}
│   │   │   ├── {{~ freezed_bloc }}
│   │   │   ├── {{~ freezed_event }}
│   │   │   └── {{~ freezed_state }}
│   │   ├── brick.yaml
│   │   └── hooks/
│   │       ├── pre_gen.dart
│   │       └── pubspec.yaml
│   ├── cubit/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __brick__/
│   │   │   ├── {{name.snakeCase()}}_cubit.dart
│   │   │   ├── {{name.snakeCase()}}_state.dart
│   │   │   ├── {{~ basic_cubit }}
│   │   │   ├── {{~ basic_state }}
│   │   │   ├── {{~ equatable_cubit }}
│   │   │   ├── {{~ equatable_state }}
│   │   │   ├── {{~ freezed_cubit }}
│   │   │   └── {{~ freezed_state }}
│   │   ├── brick.yaml
│   │   └── hooks/
│   │       ├── pre_gen.dart
│   │       └── pubspec.yaml
│   ├── flutter_bloc_feature/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __brick__/
│   │   │   ├── {{name.snakeCase()}}/
│   │   │   │   ├── view/
│   │   │   │   │   ├── view.dart
│   │   │   │   │   └── {{name.snakeCase()}}_page.dart
│   │   │   │   └── {{name.snakeCase()}}.dart
│   │   │   ├── {{~ bloc_builder }}
│   │   │   ├── {{~ bloc_provider }}
│   │   │   ├── {{~ cubit_bloc_builder }}
│   │   │   └── {{~ cubit_bloc_provider }}
│   │   ├── brick.yaml
│   │   └── hooks/
│   │       ├── .gitignore
│   │       ├── post_gen.dart
│   │       ├── pre_gen.dart
│   │       └── pubspec.yaml
│   ├── hydrated_bloc/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __brick__/
│   │   │   ├── {{name.snakeCase()}}_bloc.dart
│   │   │   ├── {{name.snakeCase()}}_event.dart
│   │   │   ├── {{name.snakeCase()}}_state.dart
│   │   │   ├── {{~ basic_bloc }}
│   │   │   ├── {{~ basic_event }}
│   │   │   ├── {{~ basic_state }}
│   │   │   ├── {{~ equatable_bloc }}
│   │   │   ├── {{~ equatable_event }}
│   │   │   ├── {{~ equatable_state }}
│   │   │   ├── {{~ freezed_bloc }}
│   │   │   ├── {{~ freezed_event }}
│   │   │   └── {{~ freezed_state }}
│   │   ├── brick.yaml
│   │   └── hooks/
│   │       ├── pre_gen.dart
│   │       └── pubspec.yaml
│   ├── hydrated_cubit/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __brick__/
│   │   │   ├── {{name.snakeCase()}}_cubit.dart
│   │   │   ├── {{name.snakeCase()}}_state.dart
│   │   │   ├── {{~ basic_cubit }}
│   │   │   ├── {{~ basic_state }}
│   │   │   ├── {{~ equatable_cubit }}
│   │   │   ├── {{~ equatable_state }}
│   │   │   ├── {{~ freezed_cubit }}
│   │   │   └── {{~ freezed_state }}
│   │   ├── brick.yaml
│   │   └── hooks/
│   │       ├── pre_gen.dart
│   │       └── pubspec.yaml
│   ├── mason.yaml
│   ├── replay_bloc/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __brick__/
│   │   │   ├── {{name.snakeCase()}}_bloc.dart
│   │   │   ├── {{name.snakeCase()}}_event.dart
│   │   │   ├── {{name.snakeCase()}}_state.dart
│   │   │   ├── {{~ basic_bloc }}
│   │   │   ├── {{~ basic_event }}
│   │   │   ├── {{~ basic_state }}
│   │   │   ├── {{~ equatable_bloc }}
│   │   │   ├── {{~ equatable_event }}
│   │   │   ├── {{~ equatable_state }}
│   │   │   ├── {{~ freezed_bloc }}
│   │   │   ├── {{~ freezed_event }}
│   │   │   └── {{~ freezed_state }}
│   │   ├── brick.yaml
│   │   └── hooks/
│   │       ├── pre_gen.dart
│   │       └── pubspec.yaml
│   └── replay_cubit/
│       ├── CHANGELOG.md
│       ├── LICENSE
│       ├── README.md
│       ├── __brick__/
│       │   ├── {{name.snakeCase()}}_cubit.dart
│       │   ├── {{name.snakeCase()}}_state.dart
│       │   ├── {{~ basic_cubit }}
│       │   ├── {{~ basic_state }}
│       │   ├── {{~ equatable_cubit }}
│       │   ├── {{~ equatable_state }}
│       │   ├── {{~ freezed_cubit }}
│       │   └── {{~ freezed_state }}
│       ├── brick.yaml
│       └── hooks/
│           ├── pre_gen.dart
│           └── pubspec.yaml
├── docs/
│   ├── .gitignore
│   ├── .prettierignore
│   ├── .prettierrc
│   ├── astro.config.mjs
│   ├── package.json
│   ├── public/
│   │   └── CNAME
│   ├── src/
│   │   ├── components/
│   │   │   ├── architecture/
│   │   │   │   ├── AppIdeaRankingBlocSnippet.astro
│   │   │   │   ├── AppIdeasRepositorySnippet.astro
│   │   │   │   ├── BlocLooseCouplingPresentationSnippet.astro
│   │   │   │   ├── BlocTightCouplingSnippet.astro
│   │   │   │   ├── BusinessLogicComponentSnippet.astro
│   │   │   │   ├── DataProviderSnippet.astro
│   │   │   │   ├── PresentationComponentSnippet.astro
│   │   │   │   └── RepositorySnippet.astro
│   │   │   ├── code/
│   │   │   │   └── RemoteCode.astro
│   │   │   ├── concepts/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── AuthenticationChangeSnippet.astro
│   │   │   │   │   ├── AuthenticationStateSnippet.astro
│   │   │   │   │   ├── AuthenticationTransitionSnippet.astro
│   │   │   │   │   ├── CountStreamSnippet.astro
│   │   │   │   │   ├── CounterBlocEventHandlerSnippet.astro
│   │   │   │   │   ├── CounterBlocFullSnippet.astro
│   │   │   │   │   ├── CounterBlocIncrementSnippet.astro
│   │   │   │   │   ├── CounterBlocOnChangeOutputSnippet.astro
│   │   │   │   │   ├── CounterBlocOnChangeSnippet.astro
│   │   │   │   │   ├── CounterBlocOnChangeUsageSnippet.astro
│   │   │   │   │   ├── CounterBlocOnErrorOutputSnippet.astro
│   │   │   │   │   ├── CounterBlocOnErrorSnippet.astro
│   │   │   │   │   ├── CounterBlocOnEventSnippet.astro
│   │   │   │   │   ├── CounterBlocOnTransitionOutputSnippet.astro
│   │   │   │   │   ├── CounterBlocOnTransitionSnippet.astro
│   │   │   │   │   ├── CounterBlocSnippet.astro
│   │   │   │   │   ├── CounterBlocStreamUsageSnippet.astro
│   │   │   │   │   ├── CounterBlocUsageSnippet.astro
│   │   │   │   │   ├── CounterCubitBasicUsageSnippet.astro
│   │   │   │   │   ├── CounterCubitFullSnippet.astro
│   │   │   │   │   ├── CounterCubitIncrementSnippet.astro
│   │   │   │   │   ├── CounterCubitInitialStateSnippet.astro
│   │   │   │   │   ├── CounterCubitInstantiationSnippet.astro
│   │   │   │   │   ├── CounterCubitOnChangeOutputSnippet.astro
│   │   │   │   │   ├── CounterCubitOnChangeSnippet.astro
│   │   │   │   │   ├── CounterCubitOnChangeUsageSnippet.astro
│   │   │   │   │   ├── CounterCubitOnErrorOutputSnippet.astro
│   │   │   │   │   ├── CounterCubitOnErrorSnippet.astro
│   │   │   │   │   ├── CounterCubitSnippet.astro
│   │   │   │   │   ├── CounterCubitStreamUsageSnippet.astro
│   │   │   │   │   ├── DebounceEventTransformerSnippet.astro
│   │   │   │   │   ├── SimpleBlocObserverOnChangeOutputSnippet.astro
│   │   │   │   │   ├── SimpleBlocObserverOnChangeSnippet.astro
│   │   │   │   │   ├── SimpleBlocObserverOnChangeUsageSnippet.astro
│   │   │   │   │   ├── SimpleBlocObserverOnErrorSnippet.astro
│   │   │   │   │   ├── SimpleBlocObserverOnEventOutputSnippet.astro
│   │   │   │   │   ├── SimpleBlocObserverOnEventSnippet.astro
│   │   │   │   │   ├── SimpleBlocObserverOnTransitionOutputSnippet.astro
│   │   │   │   │   ├── SimpleBlocObserverOnTransitionSnippet.astro
│   │   │   │   │   ├── SimpleBlocObserverOnTransitionUsageSnippet.astro
│   │   │   │   │   ├── StreamsMainSnippet.astro
│   │   │   │   │   └── SumStreamSnippet.astro
│   │   │   │   └── flutter-bloc/
│   │   │   │       ├── BlocBuilderConditionSnippet.astro
│   │   │   │       ├── BlocBuilderExplicitBlocSnippet.astro
│   │   │   │       ├── BlocBuilderSnippet.astro
│   │   │   │       ├── BlocConsumerConditionSnippet.astro
│   │   │   │       ├── BlocConsumerSnippet.astro
│   │   │   │       ├── BlocListenerConditionSnippet.astro
│   │   │   │       ├── BlocListenerExplicitBlocSnippet.astro
│   │   │   │       ├── BlocListenerSnippet.astro
│   │   │   │       ├── BlocProviderEagerSnippet.astro
│   │   │   │       ├── BlocProviderLookupSnippet.astro
│   │   │   │       ├── BlocProviderSnippet.astro
│   │   │   │       ├── BlocProviderValueSnippet.astro
│   │   │   │       ├── BlocSelectorSnippet.astro
│   │   │   │       ├── CounterBlocSnippet.astro
│   │   │   │       ├── CounterMainSnippet.astro
│   │   │   │       ├── CounterPageSnippet.astro
│   │   │   │       ├── MultiBlocListenerSnippet.astro
│   │   │   │       ├── MultiBlocProviderSnippet.astro
│   │   │   │       ├── MultiRepositoryProviderSnippet.astro
│   │   │   │       ├── NestedBlocListenerSnippet.astro
│   │   │   │       ├── NestedBlocProviderSnippet.astro
│   │   │   │       ├── NestedRepositoryProviderSnippet.astro
│   │   │   │       ├── RepositoryProviderDisposeSnippet.astro
│   │   │   │       ├── RepositoryProviderLookupSnippet.astro
│   │   │   │       ├── RepositoryProviderSnippet.astro
│   │   │   │       ├── WeatherAppSnippet.astro
│   │   │   │       ├── WeatherMainSnippet.astro
│   │   │   │       ├── WeatherPageSnippet.astro
│   │   │   │       └── WeatherRepositorySnippet.astro
│   │   │   ├── faqs/
│   │   │   │   ├── BlocExternalForEachSnippet.astro
│   │   │   │   ├── BlocInternalAddEventSnippet.astro
│   │   │   │   ├── BlocInternalEventSnippet.astro
│   │   │   │   ├── BlocProviderBad1Snippet.astro
│   │   │   │   ├── BlocProviderGood1Snippet.astro
│   │   │   │   ├── BlocProviderGood2Snippet.astro
│   │   │   │   ├── EquatableBlocTestSnippet.astro
│   │   │   │   ├── EquatableEmitSnippet.astro
│   │   │   │   ├── NoEquatableBlocTestSnippet.astro
│   │   │   │   ├── SingleStateSnippet.astro
│   │   │   │   ├── SingleStateUsageSnippet.astro
│   │   │   │   ├── StateNotUpdatingBad1Snippet.astro
│   │   │   │   ├── StateNotUpdatingBad2Snippet.astro
│   │   │   │   ├── StateNotUpdatingBad3Snippet.astro
│   │   │   │   ├── StateNotUpdatingGood1Snippet.astro
│   │   │   │   ├── StateNotUpdatingGood2Snippet.astro
│   │   │   │   └── StateNotUpdatingGood3Snippet.astro
│   │   │   ├── getting-started/
│   │   │   │   ├── ImportTabs.astro
│   │   │   │   └── InstallationTabs.astro
│   │   │   ├── landing/
│   │   │   │   ├── Card.astro
│   │   │   │   ├── Discord.astro
│   │   │   │   ├── ListCard.astro
│   │   │   │   ├── SplitCard.astro
│   │   │   │   └── SponsorsGrid.astro
│   │   │   ├── lint/
│   │   │   │   ├── BlocLintBasicAnalysisOptionsSnippet.astro
│   │   │   │   ├── BlocLintChangingSeveritySnippet.astro
│   │   │   │   ├── BlocLintDisablingRulesSnippet.astro
│   │   │   │   ├── BlocLintEnablingRulesSnippet.astro
│   │   │   │   ├── BlocLintExcludingFilesSnippet.astro
│   │   │   │   ├── BlocLintIgnoreForFileSnippet.astro
│   │   │   │   ├── BlocLintIgnoreForLineSnippet.astro
│   │   │   │   ├── BlocLintMultipleRecommendedAnalysisOptionsSnippet.astro
│   │   │   │   ├── BlocLintRecommendedAnalysisOptionsSnippet.astro
│   │   │   │   ├── BlocToolsLintHelpOutputSnippet.astro
│   │   │   │   ├── ImportFlutterInfoOutputSnippet.astro
│   │   │   │   ├── ImportFlutterInfoSnippet.mdx
│   │   │   │   ├── ImportFlutterWarningOutputSnippet.astro
│   │   │   │   ├── ImportFlutterWarningSnippet.mdx
│   │   │   │   ├── InstallBlocLintSnippet.astro
│   │   │   │   ├── InstallBlocToolsSnippet.astro
│   │   │   │   ├── RunBlocLintCounterCubitSnippet.astro
│   │   │   │   ├── RunBlocLintInCurrentDirectorySnippet.astro
│   │   │   │   └── RunBlocLintInSrcTestSnippet.astro
│   │   │   ├── lint-rules/
│   │   │   │   ├── EnableRuleSnippet.astro
│   │   │   │   ├── avoid_build_context_extensions/
│   │   │   │   │   ├── BadSnippet.mdx
│   │   │   │   │   └── GoodSnippet.astro
│   │   │   │   ├── avoid_flutter_imports/
│   │   │   │   │   ├── BadSnippet.mdx
│   │   │   │   │   └── GoodSnippet.astro
│   │   │   │   ├── avoid_public_bloc_methods/
│   │   │   │   │   ├── BadSnippet.mdx
│   │   │   │   │   └── GoodSnippet.astro
│   │   │   │   ├── avoid_public_fields/
│   │   │   │   │   ├── BadSnippet.mdx
│   │   │   │   │   └── GoodSnippet.astro
│   │   │   │   ├── prefer_bloc/
│   │   │   │   │   ├── BadSnippet.mdx
│   │   │   │   │   └── GoodSnippet.astro
│   │   │   │   ├── prefer_build_context_extensions/
│   │   │   │   │   ├── BadSnippet.mdx
│   │   │   │   │   └── GoodSnippet.astro
│   │   │   │   ├── prefer_cubit/
│   │   │   │   │   ├── BadSnippet.mdx
│   │   │   │   │   └── GoodSnippet.astro
│   │   │   │   ├── prefer_file_naming_conventions/
│   │   │   │   │   ├── BadSnippet.mdx
│   │   │   │   │   └── GoodSnippet.astro
│   │   │   │   └── prefer_void_public_cubit_methods/
│   │   │   │       ├── BadSnippet.mdx
│   │   │   │       └── GoodSnippet.astro
│   │   │   ├── modeling-state/
│   │   │   │   ├── ConcreteClassAndStatusEnumSnippet.astro
│   │   │   │   └── SealedClassAndSubclassesSnippet.astro
│   │   │   ├── naming-conventions/
│   │   │   │   ├── EventExamplesBad1Snippet.astro
│   │   │   │   ├── EventExamplesGood1Snippet.astro
│   │   │   │   ├── SingleStateExamplesGood1Snippet.astro
│   │   │   │   ├── StateExamplesBad1Snippet.astro
│   │   │   │   └── StateExamplesGood1Snippet.astro
│   │   │   ├── testing/
│   │   │   │   ├── AddDevDependenciesSnippet.astro
│   │   │   │   ├── CounterBlocSnippet.astro
│   │   │   │   ├── CounterBlocTestBlocTestSnippet.astro
│   │   │   │   ├── CounterBlocTestImportsSnippet.astro
│   │   │   │   ├── CounterBlocTestInitialStateSnippet.astro
│   │   │   │   ├── CounterBlocTestMainSnippet.astro
│   │   │   │   └── CounterBlocTestSetupSnippet.astro
│   │   │   └── tutorials/
│   │   │       ├── FlutterPubGetSnippet.astro
│   │   │       ├── flutter-counter/
│   │   │       │   └── FlutterCreateSnippet.astro
│   │   │       ├── flutter-firebase-login/
│   │   │       │   └── FlutterCreateSnippet.astro
│   │   │       ├── flutter-infinite-list/
│   │   │       │   ├── FlutterCreateSnippet.astro
│   │   │       │   ├── FlutterPubGetSnippet.astro
│   │   │       │   ├── PostBlocInitialStateSnippet.astro
│   │   │       │   ├── PostBlocOnPostFetchedSnippet.astro
│   │   │       │   ├── PostBlocTransformerSnippet.astro
│   │   │       │   └── PostsJsonSnippet.astro
│   │   │       ├── flutter-login/
│   │   │       │   └── FlutterCreateSnippet.astro
│   │   │       ├── flutter-timer/
│   │   │       │   ├── ActionsSnippet.astro
│   │   │       │   ├── BackgroundSnippet.astro
│   │   │       │   ├── FlutterCreateSnippet.astro
│   │   │       │   ├── TimerBlocEmptySnippet.astro
│   │   │       │   ├── TimerBlocInitialStateSnippet.astro
│   │   │       │   ├── TimerBlocOnPausedSnippet.astro
│   │   │       │   ├── TimerBlocOnResumedSnippet.astro
│   │   │       │   ├── TimerBlocOnStartedSnippet.astro
│   │   │       │   ├── TimerBlocOnTickedSnippet.astro
│   │   │       │   ├── TimerBlocTickerSnippet.astro
│   │   │       │   └── TimerPageSnippet.astro
│   │   │       ├── flutter-todos/
│   │   │       │   ├── ActivateVeryGoodCLISnippet.astro
│   │   │       │   ├── EditTodosPageTreeSnippet.astro
│   │   │       │   ├── FlutterCreatePackagesSnippet.astro
│   │   │       │   ├── FlutterCreateSnippet.astro
│   │   │       │   ├── HomePageTreeSnippet.astro
│   │   │       │   ├── ProjectStructureSnippet.astro
│   │   │       │   ├── StatsPageTreeSnippet.astro
│   │   │       │   ├── TodosOverviewPageTreeSnippet.astro
│   │   │       │   └── VeryGoodPackagesGetSnippet.astro
│   │   │       ├── flutter-weather/
│   │   │       │   ├── BuildRunnerBuildSnippet.astro
│   │   │       │   ├── FeatureTreeSnippet.astro
│   │   │       │   ├── FlutterCreateApiClientSnippet.astro
│   │   │       │   ├── FlutterCreateRepositorySnippet.astro
│   │   │       │   ├── FlutterCreateSnippet.astro
│   │   │       │   ├── FlutterTestCoverageSnippet.astro
│   │   │       │   ├── GetWeatherMethodSnippet.astro
│   │   │       │   ├── LocationDartSnippet.astro
│   │   │       │   ├── LocationJsonSnippet.astro
│   │   │       │   ├── LocationSearchMethodSnippet.astro
│   │   │       │   ├── OpenMeteoApiClientTreeSnippet.astro
│   │   │       │   ├── OpenMeteoLibrarySnippet.astro
│   │   │       │   ├── OpenMeteoModelsBarrelTreeSnippet.astro
│   │   │       │   ├── OpenMeteoModelsTreeSnippet.astro
│   │   │       │   ├── RepositoryModelsBarrelTreeSnippet.astro
│   │   │       │   ├── WeatherBarrelDartSnippet.astro
│   │   │       │   ├── WeatherCubitTreeSnippet.astro
│   │   │       │   ├── WeatherDartSnippet.astro
│   │   │       │   ├── WeatherJsonSnippet.astro
│   │   │       │   └── WeatherRepositoryLibrarySnippet.astro
│   │   │       ├── github-search/
│   │   │       │   ├── ActivateStagehandSnippet.astro
│   │   │       │   ├── DartPubGetSnippet.astro
│   │   │       │   ├── FlutterCreateSnippet.astro
│   │   │       │   ├── SetupSnippet.astro
│   │   │       │   └── StagehandSnippet.astro
│   │   │       └── ngdart-counter/
│   │   │           ├── ActivateStagehandSnippet.astro
│   │   │           ├── InstallDependenciesSnippet.astro
│   │   │           └── StagehandSnippet.astro
│   │   ├── content/
│   │   │   ├── config.ts
│   │   │   └── docs/
│   │   │       ├── ar/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── faqs.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── lint/
│   │   │       │   │   ├── configuration.mdx
│   │   │       │   │   ├── customizing-rules.mdx
│   │   │       │   │   ├── index.mdx
│   │   │       │   │   └── installation.mdx
│   │   │       │   ├── lint-rules/
│   │   │       │   │   ├── avoid_build_context_extensions.mdx
│   │   │       │   │   ├── avoid_flutter_imports.mdx
│   │   │       │   │   ├── avoid_public_bloc_methods.mdx
│   │   │       │   │   ├── avoid_public_fields.mdx
│   │   │       │   │   ├── prefer_bloc.mdx
│   │   │       │   │   ├── prefer_build_context_extensions.mdx
│   │   │       │   │   ├── prefer_cubit.mdx
│   │   │       │   │   ├── prefer_file_naming_conventions.mdx
│   │   │       │   │   └── prefer_void_public_cubit_methods.mdx
│   │   │       │   ├── migration.mdx
│   │   │       │   ├── modeling-state.mdx
│   │   │       │   ├── naming-conventions.mdx
│   │   │       │   ├── testing.mdx
│   │   │       │   ├── tutorials/
│   │   │       │   │   ├── flutter-counter.mdx
│   │   │       │   │   ├── flutter-firebase-login.mdx
│   │   │       │   │   ├── flutter-infinite-list.mdx
│   │   │       │   │   ├── flutter-login.mdx
│   │   │       │   │   ├── flutter-timer.mdx
│   │   │       │   │   ├── flutter-todos.mdx
│   │   │       │   │   ├── flutter-weather.mdx
│   │   │       │   │   ├── github-search.mdx
│   │   │       │   │   └── ngdart-counter.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── architecture.mdx
│   │   │       ├── bloc-concepts.mdx
│   │   │       ├── bn/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── faqs.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── migration.mdx
│   │   │       │   ├── modeling-state.mdx
│   │   │       │   ├── naming-conventions.mdx
│   │   │       │   ├── testing.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── de/
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── es/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── faqs.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── migration.mdx
│   │   │       │   ├── modeling-state.mdx
│   │   │       │   ├── naming-conventions.mdx
│   │   │       │   ├── testing.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── fa/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── faqs.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── lint/
│   │   │       │   │   ├── configuration.mdx
│   │   │       │   │   ├── customizing-rules.mdx
│   │   │       │   │   ├── index.mdx
│   │   │       │   │   └── installation.mdx
│   │   │       │   ├── lint-rules/
│   │   │       │   │   ├── avoid_build_context_extensions.mdx
│   │   │       │   │   ├── avoid_flutter_imports.mdx
│   │   │       │   │   ├── avoid_public_bloc_methods.mdx
│   │   │       │   │   ├── avoid_public_fields.mdx
│   │   │       │   │   ├── prefer_bloc.mdx
│   │   │       │   │   ├── prefer_build_context_extensions.mdx
│   │   │       │   │   ├── prefer_cubit.mdx
│   │   │       │   │   ├── prefer_file_naming_conventions.mdx
│   │   │       │   │   └── prefer_void_public_cubit_methods.mdx
│   │   │       │   ├── migration.mdx
│   │   │       │   ├── modeling-state.mdx
│   │   │       │   ├── naming-conventions.mdx
│   │   │       │   ├── testing.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── faqs.mdx
│   │   │       ├── fil/
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── flutter-bloc-concepts.mdx
│   │   │       ├── fr/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── lint/
│   │   │       │   │   ├── index.mdx
│   │   │       │   │   └── installation.mdx
│   │   │       │   ├── testing.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── getting-started.mdx
│   │   │       ├── index.mdx
│   │   │       ├── it/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── faqs.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── lint/
│   │   │       │   │   ├── configuration.mdx
│   │   │       │   │   ├── customizing-rules.mdx
│   │   │       │   │   ├── index.mdx
│   │   │       │   │   └── installation.mdx
│   │   │       │   ├── lint-rules/
│   │   │       │   │   ├── avoid_build_context_extensions.mdx
│   │   │       │   │   ├── avoid_flutter_imports.mdx
│   │   │       │   │   ├── avoid_public_bloc_methods.mdx
│   │   │       │   │   ├── avoid_public_fields.mdx
│   │   │       │   │   ├── prefer_bloc.mdx
│   │   │       │   │   ├── prefer_build_context_extensions.mdx
│   │   │       │   │   ├── prefer_cubit.mdx
│   │   │       │   │   ├── prefer_file_naming_conventions.mdx
│   │   │       │   │   └── prefer_void_public_cubit_methods.mdx
│   │   │       │   ├── migration.mdx
│   │   │       │   ├── modeling-state.mdx
│   │   │       │   ├── naming-conventions.mdx
│   │   │       │   ├── testing.mdx
│   │   │       │   ├── tutorials/
│   │   │       │   │   ├── flutter-counter.mdx
│   │   │       │   │   ├── flutter-firebase-login.mdx
│   │   │       │   │   ├── flutter-infinite-list.mdx
│   │   │       │   │   ├── flutter-login.mdx
│   │   │       │   │   ├── flutter-timer.mdx
│   │   │       │   │   ├── flutter-todos.mdx
│   │   │       │   │   ├── flutter-weather.mdx
│   │   │       │   │   ├── github-search.mdx
│   │   │       │   │   └── ngdart-counter.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── ja/
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── ko/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── faqs.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── modeling-state.mdx
│   │   │       │   ├── naming-conventions.mdx
│   │   │       │   ├── testing.mdx
│   │   │       │   ├── tutorials/
│   │   │       │   │   ├── flutter-counter.mdx
│   │   │       │   │   ├── flutter-firebase-login.mdx
│   │   │       │   │   ├── flutter-infinite-list.mdx
│   │   │       │   │   ├── flutter-login.mdx
│   │   │       │   │   ├── flutter-timer.mdx
│   │   │       │   │   ├── flutter-todos.mdx
│   │   │       │   │   ├── flutter-weather.mdx
│   │   │       │   │   └── github-search.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── lint/
│   │   │       │   ├── configuration.mdx
│   │   │       │   ├── customizing-rules.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   └── installation.mdx
│   │   │       ├── lint-rules/
│   │   │       │   ├── avoid_build_context_extensions.mdx
│   │   │       │   ├── avoid_flutter_imports.mdx
│   │   │       │   ├── avoid_public_bloc_methods.mdx
│   │   │       │   ├── avoid_public_fields.mdx
│   │   │       │   ├── prefer_bloc.mdx
│   │   │       │   ├── prefer_build_context_extensions.mdx
│   │   │       │   ├── prefer_cubit.mdx
│   │   │       │   ├── prefer_file_naming_conventions.mdx
│   │   │       │   └── prefer_void_public_cubit_methods.mdx
│   │   │       ├── migration.mdx
│   │   │       ├── modeling-state.mdx
│   │   │       ├── naming-conventions.mdx
│   │   │       ├── pt-br/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── modeling-state.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── ru/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── faqs.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── lint/
│   │   │       │   │   ├── configuration.mdx
│   │   │       │   │   ├── customizing-rules.mdx
│   │   │       │   │   ├── index.mdx
│   │   │       │   │   └── installation.mdx
│   │   │       │   ├── lint-rules/
│   │   │       │   │   ├── avoid_build_context_extensions.mdx
│   │   │       │   │   ├── avoid_flutter_imports.mdx
│   │   │       │   │   ├── avoid_public_bloc_methods.mdx
│   │   │       │   │   ├── avoid_public_fields.mdx
│   │   │       │   │   ├── prefer_bloc.mdx
│   │   │       │   │   ├── prefer_build_context_extensions.mdx
│   │   │       │   │   ├── prefer_cubit.mdx
│   │   │       │   │   ├── prefer_file_naming_conventions.mdx
│   │   │       │   │   └── prefer_void_public_cubit_methods.mdx
│   │   │       │   ├── migration.mdx
│   │   │       │   ├── modeling-state.mdx
│   │   │       │   ├── naming-conventions.mdx
│   │   │       │   ├── testing.mdx
│   │   │       │   ├── tutorials/
│   │   │       │   │   ├── flutter-counter.mdx
│   │   │       │   │   ├── flutter-firebase-login.mdx
│   │   │       │   │   ├── flutter-infinite-list.mdx
│   │   │       │   │   ├── flutter-login.mdx
│   │   │       │   │   ├── flutter-timer.mdx
│   │   │       │   │   ├── flutter-todos.mdx
│   │   │       │   │   ├── flutter-weather.mdx
│   │   │       │   │   ├── github-search.mdx
│   │   │       │   │   └── ngdart-counter.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── testing.mdx
│   │   │       ├── tutorials/
│   │   │       │   ├── flutter-counter.mdx
│   │   │       │   ├── flutter-firebase-login.mdx
│   │   │       │   ├── flutter-infinite-list.mdx
│   │   │       │   ├── flutter-login.mdx
│   │   │       │   ├── flutter-timer.mdx
│   │   │       │   ├── flutter-todos.mdx
│   │   │       │   ├── flutter-weather.mdx
│   │   │       │   ├── github-search.mdx
│   │   │       │   └── ngdart-counter.mdx
│   │   │       ├── uk/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── faqs.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── lint/
│   │   │       │   │   ├── configuration.mdx
│   │   │       │   │   ├── customizing-rules.mdx
│   │   │       │   │   ├── index.mdx
│   │   │       │   │   └── installation.mdx
│   │   │       │   ├── lint-rules/
│   │   │       │   │   ├── avoid_build_context_extensions.mdx
│   │   │       │   │   ├── avoid_flutter_imports.mdx
│   │   │       │   │   ├── avoid_public_bloc_methods.mdx
│   │   │       │   │   ├── avoid_public_fields.mdx
│   │   │       │   │   ├── prefer_bloc.mdx
│   │   │       │   │   ├── prefer_build_context_extensions.mdx
│   │   │       │   │   ├── prefer_cubit.mdx
│   │   │       │   │   ├── prefer_file_naming_conventions.mdx
│   │   │       │   │   └── prefer_void_public_cubit_methods.mdx
│   │   │       │   ├── migration.mdx
│   │   │       │   ├── modeling-state.mdx
│   │   │       │   ├── naming-conventions.mdx
│   │   │       │   ├── testing.mdx
│   │   │       │   ├── tutorials/
│   │   │       │   │   ├── flutter-counter.mdx
│   │   │       │   │   ├── flutter-firebase-login.mdx
│   │   │       │   │   ├── flutter-infinite-list.mdx
│   │   │       │   │   ├── flutter-login.mdx
│   │   │       │   │   ├── flutter-timer.mdx
│   │   │       │   │   ├── flutter-todos.mdx
│   │   │       │   │   ├── flutter-weather.mdx
│   │   │       │   │   ├── github-search.mdx
│   │   │       │   │   └── ngdart-counter.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── why-bloc.mdx
│   │   │       └── zh-cn/
│   │   │           ├── bloc-concepts.mdx
│   │   │           ├── flutter-bloc-concepts.mdx
│   │   │           ├── getting-started.mdx
│   │   │           ├── index.mdx
│   │   │           ├── tutorials/
│   │   │           │   └── flutter-counter.mdx
│   │   │           └── why-bloc.mdx
│   │   ├── env.d.ts
│   │   ├── styles/
│   │   │   └── landing.css
│   │   └── tailwind.css
│   └── tsconfig.json
├── examples/
│   ├── angular_counter/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── lib/
│   │   │   ├── app_component.css
│   │   │   ├── app_component.dart
│   │   │   ├── app_component.html
│   │   │   └── src/
│   │   │       └── counter_page/
│   │   │           ├── counter_bloc.dart
│   │   │           ├── counter_page_component.css
│   │   │           ├── counter_page_component.dart
│   │   │           └── counter_page_component.html
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   └── web/
│   │       ├── index.html
│   │       ├── main.dart
│   │       └── styles.css
│   ├── bloc_concurrency_visualizer/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── lib/
│   │   │   ├── main.dart
│   │   │   └── timeline/
│   │   │       ├── bloc/
│   │   │       │   ├── timeline_bloc.dart
│   │   │       │   ├── timeline_event.dart
│   │   │       │   └── timeline_state.dart
│   │   │       ├── models/
│   │   │       │   ├── models.dart
│   │   │       │   ├── task.dart
│   │   │       │   └── transformer.dart
│   │   │       ├── timeline.dart
│   │   │       └── view/
│   │   │           └── timeline_page.dart
│   │   ├── pubspec.yaml
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_bloc_with_stream/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   └── .gitignore
│   │   ├── lib/
│   │   │   ├── bloc/
│   │   │   │   ├── ticker_bloc.dart
│   │   │   │   ├── ticker_event.dart
│   │   │   │   └── ticker_state.dart
│   │   │   ├── main.dart
│   │   │   └── ticker/
│   │   │       └── ticker.dart
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── app_test.dart
│   │   │   ├── bloc/
│   │   │   │   ├── ticker_bloc_test.dart
│   │   │   │   ├── ticker_event_test.dart
│   │   │   │   └── ticker_state_test.dart
│   │   │   └── ticker_page_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_complex_list/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   └── .gitignore
│   │   ├── lib/
│   │   │   ├── app.dart
│   │   │   ├── complex_list/
│   │   │   │   ├── complex_list.dart
│   │   │   │   ├── cubit/
│   │   │   │   │   ├── complex_list_cubit.dart
│   │   │   │   │   └── complex_list_state.dart
│   │   │   │   ├── models/
│   │   │   │   │   ├── item.dart
│   │   │   │   │   └── models.dart
│   │   │   │   └── view/
│   │   │   │       ├── complex_list_page.dart
│   │   │   │       └── view.dart
│   │   │   ├── main.dart
│   │   │   ├── repository.dart
│   │   │   └── simple_bloc_observer.dart
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── app_test.dart
│   │   │   ├── complex_list/
│   │   │   │   ├── cubit/
│   │   │   │   │   ├── complex_list_cubit_test.dart
│   │   │   │   │   └── complex_list_state_test.dart
│   │   │   │   ├── models/
│   │   │   │   │   └── item_test.dart
│   │   │   │   └── view/
│   │   │   │       └── complex_list_page_test.dart
│   │   │   └── repository_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_counter/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── integration_test/
│   │   │   └── app_test.dart
│   │   ├── lib/
│   │   │   ├── app.dart
│   │   │   ├── counter/
│   │   │   │   ├── counter.dart
│   │   │   │   ├── cubit/
│   │   │   │   │   └── counter_cubit.dart
│   │   │   │   └── view/
│   │   │   │       ├── counter_page.dart
│   │   │   │       ├── counter_view.dart
│   │   │   │       └── view.dart
│   │   │   ├── counter_observer.dart
│   │   │   └── main.dart
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── app_test.dart
│   │   │   └── counter/
│   │   │       ├── cubit/
│   │   │       │   └── counter_cubit_test.dart
│   │   │       └── view/
│   │   │           ├── counter_page_test.dart
│   │   │           └── counter_view_test.dart
│   │   ├── test_driver/
│   │   │   └── integration_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_dynamic_form/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   └── .gitignore
│   │   ├── lib/
│   │   │   ├── app.dart
│   │   │   ├── main.dart
│   │   │   ├── new_car/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── new_car_bloc.dart
│   │   │   │   │   ├── new_car_event.dart
│   │   │   │   │   └── new_car_state.dart
│   │   │   │   ├── new_car.dart
│   │   │   │   └── view/
│   │   │   │       └── new_car_page.dart
│   │   │   └── new_car_repository.dart
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── app_test.dart
│   │   │   ├── new_car/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── new_car_bloc_test.dart
│   │   │   │   │   ├── new_car_event_test.dart
│   │   │   │   │   └── new_car_state_test.dart
│   │   │   │   └── view/
│   │   │   │       └── new_car_page_test.dart
│   │   │   └── new_car_repository_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_firebase_login/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── android/
│   │   │   ├── .gitignore
│   │   │   ├── app/
│   │   │   │   ├── build.gradle.kts
│   │   │   │   ├── google-services.json
│   │   │   │   └── src/
│   │   │   │       ├── debug/
│   │   │   │       │   └── AndroidManifest.xml
│   │   │   │       ├── main/
│   │   │   │       │   ├── AndroidManifest.xml
│   │   │   │       │   ├── kotlin/
│   │   │   │       │   │   └── com/
│   │   │   │       │   │       └── example/
│   │   │   │       │   │           └── flutter_firebase_login/
│   │   │   │       │   │               └── MainActivity.kt
│   │   │   │       │   └── res/
│   │   │   │       │       ├── drawable/
│   │   │   │       │       │   └── launch_background.xml
│   │   │   │       │       ├── drawable-v21/
│   │   │   │       │       │   └── launch_background.xml
│   │   │   │       │       ├── values/
│   │   │   │       │       │   └── styles.xml
│   │   │   │       │       └── values-night/
│   │   │   │       │           └── styles.xml
│   │   │   │       └── profile/
│   │   │   │           └── AndroidManifest.xml
│   │   │   ├── build.gradle.kts
│   │   │   ├── gradle/
│   │   │   │   └── wrapper/
│   │   │   │       └── gradle-wrapper.properties
│   │   │   ├── gradle.properties
│   │   │   └── settings.gradle.kts
│   │   ├── ios/
│   │   │   ├── .gitignore
│   │   │   ├── Flutter/
│   │   │   │   ├── AppFrameworkInfo.plist
│   │   │   │   ├── Debug.xcconfig
│   │   │   │   └── Release.xcconfig
│   │   │   ├── Podfile
│   │   │   ├── Runner/
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets/
│   │   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   └── LaunchImage.imageset/
│   │   │   │   │       ├── Contents.json
│   │   │   │   │       └── README.md
│   │   │   │   ├── Base.lproj/
│   │   │   │   │   ├── LaunchScreen.storyboard
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── GoogleService-Info.plist
│   │   │   │   ├── Info.plist
│   │   │   │   └── Runner-Bridging-Header.h
│   │   │   ├── Runner.xcodeproj/
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace/
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcshareddata/
│   │   │   │   │       ├── IDEWorkspaceChecks.plist
│   │   │   │   │       └── WorkspaceSettings.xcsettings
│   │   │   │   └── xcshareddata/
│   │   │   │       └── xcschemes/
│   │   │   │           └── Runner.xcscheme
│   │   │   ├── Runner.xcworkspace/
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcshareddata/
│   │   │   │       ├── IDEWorkspaceChecks.plist
│   │   │   │       └── WorkspaceSettings.xcsettings
│   │   │   └── RunnerTests/
│   │   │       └── RunnerTests.swift
│   │   ├── lib/
│   │   │   ├── app/
│   │   │   │   ├── app.dart
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── app_bloc.dart
│   │   │   │   │   ├── app_event.dart
│   │   │   │   │   └── app_state.dart
│   │   │   │   ├── bloc_observer.dart
│   │   │   │   ├── routes/
│   │   │   │   │   └── routes.dart
│   │   │   │   └── view/
│   │   │   │       └── app.dart
│   │   │   ├── home/
│   │   │   │   ├── home.dart
│   │   │   │   ├── view/
│   │   │   │   │   └── home_page.dart
│   │   │   │   └── widgets/
│   │   │   │       ├── avatar.dart
│   │   │   │       └── widgets.dart
│   │   │   ├── login/
│   │   │   │   ├── cubit/
│   │   │   │   │   ├── login_cubit.dart
│   │   │   │   │   └── login_state.dart
│   │   │   │   ├── login.dart
│   │   │   │   └── view/
│   │   │   │       ├── login_form.dart
│   │   │   │       ├── login_page.dart
│   │   │   │       └── view.dart
│   │   │   ├── main.dart
│   │   │   ├── sign_up/
│   │   │   │   ├── cubit/
│   │   │   │   │   ├── sign_up_cubit.dart
│   │   │   │   │   └── sign_up_state.dart
│   │   │   │   ├── sign_up.dart
│   │   │   │   └── view/
│   │   │   │       ├── sign_up_form.dart
│   │   │   │       ├── sign_up_page.dart
│   │   │   │       └── view.dart
│   │   │   └── theme.dart
│   │   ├── packages/
│   │   │   ├── authentication_repository/
│   │   │   │   ├── analysis_options.yaml
│   │   │   │   ├── lib/
│   │   │   │   │   ├── authentication_repository.dart
│   │   │   │   │   └── src/
│   │   │   │   │       ├── authentication_repository.dart
│   │   │   │   │       └── models/
│   │   │   │   │           ├── models.dart
│   │   │   │   │           └── user.dart
│   │   │   │   ├── pubspec.yaml
│   │   │   │   └── test/
│   │   │   │       ├── authentication_repository_test.dart
│   │   │   │       └── models/
│   │   │   │           └── user_test.dart
│   │   │   ├── cache/
│   │   │   │   ├── analysis_options.yaml
│   │   │   │   ├── lib/
│   │   │   │   │   └── cache.dart
│   │   │   │   ├── pubspec.yaml
│   │   │   │   └── test/
│   │   │   │       └── cache_test.dart
│   │   │   └── form_inputs/
│   │   │       ├── analysis_options.yaml
│   │   │       ├── lib/
│   │   │       │   ├── form_inputs.dart
│   │   │       │   └── src/
│   │   │       │       ├── confirmed_password.dart
│   │   │       │       ├── email.dart
│   │   │       │       └── password.dart
│   │   │       └── pubspec.yaml
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   └── test/
│   │       ├── app/
│   │       │   ├── bloc/
│   │       │   │   ├── app_bloc_test.dart
│   │       │   │   └── app_state_test.dart
│   │       │   ├── bloc_observer_test.dart
│   │       │   ├── routes/
│   │       │   │   └── routes_test.dart
│   │       │   └── view/
│   │       │       └── app_test.dart
│   │       ├── home/
│   │       │   ├── view/
│   │       │   │   └── home_page_test.dart
│   │       │   └── widgets/
│   │       │       └── avatar_test.dart
│   │       ├── login/
│   │       │   ├── cubit/
│   │       │   │   ├── login_cubit_test.dart
│   │       │   │   └── login_state_test.dart
│   │       │   └── view/
│   │       │       ├── login_form_test.dart
│   │       │       └── login_page_test.dart
│   │       └── sign_up/
│   │           ├── cubit/
│   │           │   ├── sign_up_cubit_test.dart
│   │           │   └── sign_up_state_test.dart
│   │           └── view/
│   │               ├── sign_up_form_test.dart
│   │               └── sign_up_page_test.dart
│   ├── flutter_form_validation/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   └── .gitignore
│   │   ├── lib/
│   │   │   ├── bloc/
│   │   │   │   ├── my_form_bloc.dart
│   │   │   │   ├── my_form_event.dart
│   │   │   │   └── my_form_state.dart
│   │   │   ├── main.dart
│   │   │   └── models/
│   │   │       ├── email.dart
│   │   │       ├── models.dart
│   │   │       └── password.dart
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_infinite_list/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   └── .gitignore
│   │   ├── lib/
│   │   │   ├── app.dart
│   │   │   ├── main.dart
│   │   │   ├── posts/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── post_bloc.dart
│   │   │   │   │   ├── post_event.dart
│   │   │   │   │   └── post_state.dart
│   │   │   │   ├── models/
│   │   │   │   │   ├── models.dart
│   │   │   │   │   └── post.dart
│   │   │   │   ├── posts.dart
│   │   │   │   ├── view/
│   │   │   │   │   ├── posts_list.dart
│   │   │   │   │   ├── posts_page.dart
│   │   │   │   │   └── view.dart
│   │   │   │   └── widgets/
│   │   │   │       ├── bottom_loader.dart
│   │   │   │       ├── post_list_item.dart
│   │   │   │       └── widgets.dart
│   │   │   └── simple_bloc_observer.dart
│   │   ├── macos/
│   │   │   ├── .gitignore
│   │   │   └── Flutter/
│   │   │       └── GeneratedPluginRegistrant.swift
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── app_test.dart
│   │   │   └── posts/
│   │   │       ├── bloc/
│   │   │       │   ├── post_bloc_test.dart
│   │   │       │   ├── post_event_test.dart
│   │   │       │   └── post_state_test.dart
│   │   │       ├── models/
│   │   │       │   └── post_test.dart
│   │   │       └── view/
│   │   │           ├── posts_list_test.dart
│   │   │           └── posts_page_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_login/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   └── .gitignore
│   │   ├── lib/
│   │   │   ├── app.dart
│   │   │   ├── authentication/
│   │   │   │   ├── authentication.dart
│   │   │   │   └── bloc/
│   │   │   │       ├── authentication_bloc.dart
│   │   │   │       ├── authentication_event.dart
│   │   │   │       └── authentication_state.dart
│   │   │   ├── home/
│   │   │   │   ├── home.dart
│   │   │   │   └── view/
│   │   │   │       └── home_page.dart
│   │   │   ├── login/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── login_bloc.dart
│   │   │   │   │   ├── login_event.dart
│   │   │   │   │   └── login_state.dart
│   │   │   │   ├── login.dart
│   │   │   │   ├── models/
│   │   │   │   │   ├── models.dart
│   │   │   │   │   ├── password.dart
│   │   │   │   │   └── username.dart
│   │   │   │   └── view/
│   │   │   │       ├── login_form.dart
│   │   │   │       ├── login_page.dart
│   │   │   │       └── view.dart
│   │   │   ├── main.dart
│   │   │   └── splash/
│   │   │       ├── splash.dart
│   │   │       └── view/
│   │   │           └── splash_page.dart
│   │   ├── packages/
│   │   │   ├── authentication_repository/
│   │   │   │   ├── analysis_options.yaml
│   │   │   │   ├── lib/
│   │   │   │   │   ├── authentication_repository.dart
│   │   │   │   │   └── src/
│   │   │   │   │       └── authentication_repository.dart
│   │   │   │   └── pubspec.yaml
│   │   │   └── user_repository/
│   │   │       ├── analysis_options.yaml
│   │   │       ├── lib/
│   │   │       │   ├── src/
│   │   │       │   │   ├── models/
│   │   │       │   │   │   ├── models.dart
│   │   │       │   │   │   └── user.dart
│   │   │       │   │   └── user_repository.dart
│   │   │       │   └── user_repository.dart
│   │   │       └── pubspec.yaml
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── authentication/
│   │   │   │   ├── authentication_bloc_test.dart
│   │   │   │   └── authentication_state_test.dart
│   │   │   └── login/
│   │   │       ├── bloc/
│   │   │       │   ├── login_bloc_test.dart
│   │   │       │   ├── login_event_test.dart
│   │   │       │   └── login_state_test.dart
│   │   │       ├── models/
│   │   │       │   ├── password_test.dart
│   │   │       │   └── username_test.dart
│   │   │       └── view/
│   │   │           ├── login_form_test.dart
│   │   │           └── login_page_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_shopping_cart/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   └── .gitignore
│   │   ├── lib/
│   │   │   ├── app.dart
│   │   │   ├── cart/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── cart_bloc.dart
│   │   │   │   │   ├── cart_event.dart
│   │   │   │   │   └── cart_state.dart
│   │   │   │   ├── cart.dart
│   │   │   │   ├── models/
│   │   │   │   │   ├── cart.dart
│   │   │   │   │   └── models.dart
│   │   │   │   └── view/
│   │   │   │       └── cart_page.dart
│   │   │   ├── catalog/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── catalog_bloc.dart
│   │   │   │   │   ├── catalog_event.dart
│   │   │   │   │   └── catalog_state.dart
│   │   │   │   ├── catalog.dart
│   │   │   │   ├── models/
│   │   │   │   │   ├── catalog.dart
│   │   │   │   │   ├── item.dart
│   │   │   │   │   └── models.dart
│   │   │   │   └── view/
│   │   │   │       └── catalog_page.dart
│   │   │   ├── main.dart
│   │   │   ├── shopping_repository.dart
│   │   │   └── simple_bloc_observer.dart
│   │   ├── macos/
│   │   │   ├── .gitignore
│   │   │   └── Flutter/
│   │   │       └── GeneratedPluginRegistrant.swift
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── app_test.dart
│   │   │   ├── cart/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── cart_bloc_test.dart
│   │   │   │   │   ├── cart_event_test.dart
│   │   │   │   │   └── cart_state_test.dart
│   │   │   │   ├── models/
│   │   │   │   │   └── cart_test.dart
│   │   │   │   └── view/
│   │   │   │       └── cart_page_test.dart
│   │   │   ├── catalog/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── catalog_bloc_test.dart
│   │   │   │   │   ├── catalog_event_test.dart
│   │   │   │   │   └── catalog_state_test.dart
│   │   │   │   ├── models/
│   │   │   │   │   ├── catalog_test.dart
│   │   │   │   │   └── item_test.dart
│   │   │   │   └── view/
│   │   │   │       └── catalog_page_test.dart
│   │   │   ├── helper.dart
│   │   │   └── shopping_repository_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_timer/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   └── .gitignore
│   │   ├── lib/
│   │   │   ├── app.dart
│   │   │   ├── main.dart
│   │   │   ├── ticker.dart
│   │   │   └── timer/
│   │   │       ├── bloc/
│   │   │       │   ├── timer_bloc.dart
│   │   │       │   ├── timer_event.dart
│   │   │       │   └── timer_state.dart
│   │   │       ├── timer.dart
│   │   │       └── view/
│   │   │           └── timer_page.dart
│   │   ├── macos/
│   │   │   ├── .gitignore
│   │   │   └── Flutter/
│   │   │       └── GeneratedPluginRegistrant.swift
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── app_test.dart
│   │   │   ├── ticker_test.dart
│   │   │   └── timer/
│   │   │       ├── bloc/
│   │   │       │   ├── timer_bloc_test.dart
│   │   │       │   └── timer_state_test.dart
│   │   │       └── view/
│   │   │           └── timer_page_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_todos/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   ├── .gitignore
│   │   │   └── Podfile
│   │   ├── l10n.yaml
│   │   ├── lib/
│   │   │   ├── app/
│   │   │   │   ├── app.dart
│   │   │   │   └── app_bloc_observer.dart
│   │   │   ├── bootstrap.dart
│   │   │   ├── edit_todo/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── edit_todo_bloc.dart
│   │   │   │   │   ├── edit_todo_event.dart
│   │   │   │   │   └── edit_todo_state.dart
│   │   │   │   ├── edit_todo.dart
│   │   │   │   └── view/
│   │   │   │       ├── edit_todo_page.dart
│   │   │   │       └── view.dart
│   │   │   ├── home/
│   │   │   │   ├── cubit/
│   │   │   │   │   ├── home_cubit.dart
│   │   │   │   │   └── home_state.dart
│   │   │   │   ├── home.dart
│   │   │   │   └── view/
│   │   │   │       ├── home_page.dart
│   │   │   │       └── view.dart
│   │   │   ├── l10n/
│   │   │   │   ├── app_en.arb
│   │   │   │   ├── app_localizations.dart
│   │   │   │   ├── app_localizations_en.dart
│   │   │   │   └── l10n.dart
│   │   │   ├── main_development.dart
│   │   │   ├── main_production.dart
│   │   │   ├── main_staging.dart
│   │   │   ├── stats/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── stats_bloc.dart
│   │   │   │   │   ├── stats_event.dart
│   │   │   │   │   └── stats_state.dart
│   │   │   │   ├── stats.dart
│   │   │   │   └── view/
│   │   │   │       ├── stats_page.dart
│   │   │   │       └── view.dart
│   │   │   ├── theme/
│   │   │   │   └── theme.dart
│   │   │   └── todos_overview/
│   │   │       ├── bloc/
│   │   │       │   ├── todos_overview_bloc.dart
│   │   │       │   ├── todos_overview_event.dart
│   │   │       │   └── todos_overview_state.dart
│   │   │       ├── models/
│   │   │       │   ├── models.dart
│   │   │       │   └── todos_view_filter.dart
│   │   │       ├── todos_overview.dart
│   │   │       ├── view/
│   │   │       │   ├── todos_overview_page.dart
│   │   │       │   └── view.dart
│   │   │       └── widgets/
│   │   │           ├── todo_list_tile.dart
│   │   │           ├── todos_overview_filter_button.dart
│   │   │           ├── todos_overview_options_button.dart
│   │   │           └── widgets.dart
│   │   ├── packages/
│   │   │   ├── local_storage_todos_api/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── README.md
│   │   │   │   ├── analysis_options.yaml
│   │   │   │   ├── lib/
│   │   │   │   │   ├── local_storage_todos_api.dart
│   │   │   │   │   └── src/
│   │   │   │   │       └── local_storage_todos_api.dart
│   │   │   │   ├── pubspec.yaml
│   │   │   │   └── test/
│   │   │   │       └── local_storage_todos_api_test.dart
│   │   │   ├── todos_api/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── README.md
│   │   │   │   ├── analysis_options.yaml
│   │   │   │   ├── lib/
│   │   │   │   │   ├── src/
│   │   │   │   │   │   ├── models/
│   │   │   │   │   │   │   ├── json_map.dart
│   │   │   │   │   │   │   ├── models.dart
│   │   │   │   │   │   │   ├── todo.dart
│   │   │   │   │   │   │   └── todo.g.dart
│   │   │   │   │   │   └── todos_api.dart
│   │   │   │   │   └── todos_api.dart
│   │   │   │   ├── pubspec.yaml
│   │   │   │   └── test/
│   │   │   │       ├── models/
│   │   │   │       │   └── todo_test.dart
│   │   │   │       └── todos_api_test.dart
│   │   │   └── todos_repository/
│   │   │       ├── .gitignore
│   │   │       ├── README.md
│   │   │       ├── analysis_options.yaml
│   │   │       ├── lib/
│   │   │       │   ├── src/
│   │   │       │   │   └── todos_repository.dart
│   │   │       │   └── todos_repository.dart
│   │   │       ├── pubspec.yaml
│   │   │       └── test/
│   │   │           └── todos_repository_test.dart
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── app_test.dart
│   │   │   ├── edit_todo/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── edit_todo_bloc_test.dart
│   │   │   │   │   ├── edit_todo_event_test.dart
│   │   │   │   │   └── edit_todo_state_test.dart
│   │   │   │   └── view/
│   │   │   │       └── edit_todo_page_test.dart
│   │   │   ├── helpers/
│   │   │   │   ├── finders.dart
│   │   │   │   ├── helpers.dart
│   │   │   │   ├── l10n.dart
│   │   │   │   └── pump_app.dart
│   │   │   ├── home/
│   │   │   │   ├── cubit/
│   │   │   │   │   └── home_cubit_test.dart
│   │   │   │   └── view/
│   │   │   │       └── home_page_test.dart
│   │   │   ├── stats/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── stats_bloc_test.dart
│   │   │   │   │   ├── stats_event_test.dart
│   │   │   │   │   └── stats_state_test.dart
│   │   │   │   └── view/
│   │   │   │       └── stats_page_test.dart
│   │   │   └── todos_overview/
│   │   │       ├── bloc/
│   │   │       │   ├── todos_overview_bloc_test.dart
│   │   │       │   ├── todos_overview_event_test.dart
│   │   │       │   └── todos_overview_state_test.dart
│   │   │       ├── models/
│   │   │       │   └── todos_view_filter_test.dart
│   │   │       ├── view/
│   │   │       │   └── todos_overview_page_test.dart
│   │   │       └── widgets/
│   │   │           ├── todo_list_tile_test.dart
│   │   │           ├── todos_overview_filter_button_test.dart
│   │   │           └── todos_overview_options_button_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_weather/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── build.yaml
│   │   ├── ios/
│   │   │   ├── .gitignore
│   │   │   └── Podfile
│   │   ├── lib/
│   │   │   ├── app.dart
│   │   │   ├── main.dart
│   │   │   ├── search/
│   │   │   │   ├── search.dart
│   │   │   │   └── view/
│   │   │   │       └── search_page.dart
│   │   │   ├── settings/
│   │   │   │   ├── settings.dart
│   │   │   │   └── view/
│   │   │   │       └── settings_page.dart
│   │   │   ├── weather/
│   │   │   │   ├── cubit/
│   │   │   │   │   ├── weather_cubit.dart
│   │   │   │   │   ├── weather_cubit.g.dart
│   │   │   │   │   └── weather_state.dart
│   │   │   │   ├── models/
│   │   │   │   │   ├── models.dart
│   │   │   │   │   ├── weather.dart
│   │   │   │   │   └── weather.g.dart
│   │   │   │   ├── view/
│   │   │   │   │   └── weather_page.dart
│   │   │   │   ├── weather.dart
│   │   │   │   └── widgets/
│   │   │   │       ├── weather_empty.dart
│   │   │   │       ├── weather_error.dart
│   │   │   │       ├── weather_loading.dart
│   │   │   │       ├── weather_populated.dart
│   │   │   │       └── widgets.dart
│   │   │   └── weather_bloc_observer.dart
│   │   ├── linux/
│   │   │   ├── .gitignore
│   │   │   └── flutter/
│   │   │       ├── generated_plugin_registrant.cc
│   │   │       ├── generated_plugin_registrant.h
│   │   │       └── generated_plugins.cmake
│   │   ├── macos/
│   │   │   ├── .gitignore
│   │   │   ├── Flutter/
│   │   │   │   └── GeneratedPluginRegistrant.swift
│   │   │   └── Podfile
│   │   ├── packages/
│   │   │   ├── open_meteo_api/
│   │   │   │   ├── analysis_options.yaml
│   │   │   │   ├── build.yaml
│   │   │   │   ├── lib/
│   │   │   │   │   ├── open_meteo_api.dart
│   │   │   │   │   └── src/
│   │   │   │   │       ├── models/
│   │   │   │   │       │   ├── location.dart
│   │   │   │   │       │   ├── location.g.dart
│   │   │   │   │       │   ├── models.dart
│   │   │   │   │       │   ├── weather.dart
│   │   │   │   │       │   └── weather.g.dart
│   │   │   │   │       └── open_meteo_api_client.dart
│   │   │   │   ├── pubspec.yaml
│   │   │   │   └── test/
│   │   │   │       ├── location_test.dart
│   │   │   │       ├── open_meteo_api_client_test.dart
│   │   │   │       └── weather_test.dart
│   │   │   └── weather_repository/
│   │   │       ├── analysis_options.yaml
│   │   │       ├── build.yaml
│   │   │       ├── lib/
│   │   │       │   ├── src/
│   │   │       │   │   ├── models/
│   │   │       │   │   │   ├── models.dart
│   │   │       │   │   │   ├── weather.dart
│   │   │       │   │   │   └── weather.g.dart
│   │   │       │   │   └── weather_repository.dart
│   │   │       │   └── weather_repository.dart
│   │   │       ├── pubspec.yaml
│   │   │       └── test/
│   │   │           ├── src/
│   │   │           │   └── models/
│   │   │           │       └── weather_test.dart
│   │   │           └── weather_repository_test.dart
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── app_test.dart
│   │   │   ├── helpers/
│   │   │   │   └── hydrated_bloc.dart
│   │   │   ├── search/
│   │   │   │   └── view/
│   │   │   │       └── search_page_test.dart
│   │   │   ├── settings/
│   │   │   │   └── view/
│   │   │   │       └── settings_page_test.dart
│   │   │   └── weather/
│   │   │       ├── cubit/
│   │   │       │   ├── weather_cubit_test.dart
│   │   │       │   └── weather_state_test.dart
│   │   │       ├── view/
│   │   │       │   └── weather_page_test.dart
│   │   │       └── widgets/
│   │   │           ├── weather_empty_test.dart
│   │   │           ├── weather_error_test.dart
│   │   │           ├── weather_loading_test.dart
│   │   │           └── weather_populated_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_wizard/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   └── .gitignore
│   │   ├── lib/
│   │   │   ├── bloc/
│   │   │   │   ├── profile_wizard_bloc.dart
│   │   │   │   ├── profile_wizard_event.dart
│   │   │   │   └── profile_wizard_state.dart
│   │   │   └── main.dart
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   └── github_search/
│       ├── README.md
│       ├── angular_github_search/
│       │   ├── .gitignore
│       │   ├── CHANGELOG.md
│       │   ├── README.md
│       │   ├── analysis_options.yaml
│       │   ├── lib/
│       │   │   ├── app_component.dart
│       │   │   └── src/
│       │   │       ├── github_search.dart
│       │   │       ├── search_form/
│       │   │       │   ├── search_bar/
│       │   │       │   │   ├── search_bar_component.dart
│       │   │       │   │   └── search_bar_component.html
│       │   │       │   ├── search_body/
│       │   │       │   │   ├── search_body_component.dart
│       │   │       │   │   ├── search_body_component.html
│       │   │       │   │   └── search_results/
│       │   │       │   │       ├── search_result_item/
│       │   │       │   │       │   ├── search_result_item_component.dart
│       │   │       │   │       │   └── search_result_item_component.html
│       │   │       │   │       ├── search_results_component.dart
│       │   │       │   │       └── search_results_component.html
│       │   │       │   ├── search_form_component.dart
│       │   │       │   └── search_form_component.html
│       │   │       └── src.dart
│       │   ├── pubspec.yaml
│       │   ├── pubspec_overrides.yaml
│       │   └── web/
│       │       ├── index.html
│       │       ├── main.dart
│       │       └── styles.css
│       ├── common_github_search/
│       │   ├── analysis_options.yaml
│       │   ├── lib/
│       │   │   ├── common_github_search.dart
│       │   │   └── src/
│       │   │       ├── github_cache.dart
│       │   │       ├── github_client.dart
│       │   │       ├── github_repository.dart
│       │   │       ├── github_search_bloc/
│       │   │       │   ├── github_search_bloc.dart
│       │   │       │   ├── github_search_event.dart
│       │   │       │   └── github_search_state.dart
│       │   │       └── models/
│       │   │           ├── github_user.dart
│       │   │           ├── models.dart
│       │   │           ├── search_result.dart
│       │   │           ├── search_result_error.dart
│       │   │           └── search_result_item.dart
│       │   ├── pubspec.yaml
│       │   └── pubspec_overrides.yaml
│       └── flutter_github_search/
│           ├── .gitignore
│           ├── .metadata
│           ├── README.md
│           ├── analysis_options.yaml
│           ├── ios/
│           │   ├── .gitignore
│           │   └── Podfile
│           ├── lib/
│           │   ├── main.dart
│           │   └── search_form.dart
│           ├── pubspec.yaml
│           ├── pubspec_overrides.yaml
│           └── web/
│               ├── index.html
│               └── manifest.json
├── extensions/
│   ├── intellij/
│   │   ├── README.md
│   │   └── intellij_generator_plugin/
│   │       ├── .gitignore
│   │       ├── build.gradle.kts
│   │       ├── gradle/
│   │       │   └── wrapper/
│   │       │       ├── gradle-wrapper.jar
│   │       │       └── gradle-wrapper.properties
│   │       ├── gradle.properties
│   │       ├── gradlew
│   │       ├── gradlew.bat
│   │       ├── settings.gradle
│   │       └── src/
│   │           └── main/
│   │               ├── java/
│   │               │   └── com/
│   │               │       └── bloc/
│   │               │           └── intellij_generator_plugin/
│   │               │               ├── action/
│   │               │               │   ├── BlocTemplateType.java
│   │               │               │   ├── GenerateBlocAction.kt
│   │               │               │   ├── GenerateBlocDialog.form
│   │               │               │   ├── GenerateBlocDialog.java
│   │               │               │   ├── GenerateCubitAction.kt
│   │               │               │   └── GenerateEquatablePropsAction.kt
│   │               │               ├── generator/
│   │               │               │   ├── BlocGenerator.kt
│   │               │               │   ├── BlocGeneratorFactory.kt
│   │               │               │   ├── CubitGenerator.kt
│   │               │               │   ├── CubitGeneratorFactory.kt
│   │               │               │   └── components/
│   │               │               │       ├── BlocEventGenerator.kt
│   │               │               │       ├── BlocGenerator.kt
│   │               │               │       ├── BlocStateGenerator.kt
│   │               │               │       ├── CubitGenerator.kt
│   │               │               │       └── CubitStateGenerator.kt
│   │               │               ├── intention_action/
│   │               │               │   ├── BlocConvertToMultiBlocListenerIntentionAction.kt
│   │               │               │   ├── BlocConvertToMultiBlocProviderIntentionAction.kt
│   │               │               │   ├── BlocConvertToMultiIntentionAction.kt
│   │               │               │   ├── BlocConvertToMultiRepositoryProviderIntentionAction.kt
│   │               │               │   ├── BlocWrapWithBlocBuilderIntentionAction.kt
│   │               │               │   ├── BlocWrapWithBlocConsumerIntentionAction.kt
│   │               │               │   ├── BlocWrapWithBlocListenerIntentionAction.kt
│   │               │               │   ├── BlocWrapWithBlocProviderIntentionAction.kt
│   │               │               │   ├── BlocWrapWithBlocSelectorIntentionAction.kt
│   │               │               │   ├── BlocWrapWithIntentionAction.kt
│   │               │               │   ├── BlocWrapWithRepositoryProviderIntentionAction.kt
│   │               │               │   ├── Common.kt
│   │               │               │   ├── SnippetType.kt
│   │               │               │   ├── Snippets.kt
│   │               │               │   └── WrapHelper.kt
│   │               │               ├── language_server/
│   │               │               │   ├── BlocLanguageServer.kt
│   │               │               │   ├── BlocLanguageServerFactory.kt
│   │               │               │   └── BlocLanguageServerInstaller.kt
│   │               │               ├── live_templates/
│   │               │               │   └── BlocContext.kt
│   │               │               └── util/
│   │               │                   └── BlocPluginNotification.kt
│   │               └── resources/
│   │                   ├── META-INF/
│   │                   │   └── plugin.xml
│   │                   ├── intentionDescriptions/
│   │                   │   ├── BlocConvertToMultiBlocListenerIntentionAction/
│   │                   │   │   ├── after.java.template
│   │                   │   │   ├── before.java.template
│   │                   │   │   └── description.html
│   │                   │   ├── BlocConvertToMultiBlocProviderIntentionAction/
│   │                   │   │   ├── after.java.template
│   │                   │   │   ├── before.java.template
│   │                   │   │   └── description.html
│   │                   │   ├── BlocConvertToMultiRepositoryProviderIntentionAction/
│   │                   │   │   ├── after.java.template
│   │                   │   │   ├── before.java.template
│   │                   │   │   └── description.html
│   │                   │   ├── BlocWrapWithBlocBuilderIntentionAction/
│   │                   │   │   ├── after.java.template
│   │                   │   │   ├── before.java.template
│   │                   │   │   └── description.html
│   │                   │   ├── BlocWrapWithBlocConsumerIntentionAction/
│   │                   │   │   ├── after.java.template
│   │                   │   │   ├── before.java.template
│   │                   │   │   └── description.html
│   │                   │   ├── BlocWrapWithBlocListenerIntentionAction/
│   │                   │   │   ├── after.java.template
│   │                   │   │   ├── before.java.template
│   │                   │   │   └── description.html
│   │                   │   ├── BlocWrapWithBlocProviderIntentionAction/
│   │                   │   │   ├── after.java.template
│   │                   │   │   ├── before.java.template
│   │                   │   │   └── description.html
│   │                   │   ├── BlocWrapWithBlocSelectorIntentionAction/
│   │                   │   │   ├── after.java.template
│   │                   │   │   ├── before.java.template
│   │                   │   │   └── description.html
│   │                   │   └── BlocWrapWithRepositoryProviderIntentionAction/
│   │                   │       ├── after.java.template
│   │                   │       ├── before.java.template
│   │                   │       └── description.html
│   │                   ├── liveTemplates/
│   │                   │   └── Bloc.xml
│   │                   └── templates/
│   │                       ├── bloc_basic/
│   │                       │   ├── bloc.dart.template
│   │                       │   ├── bloc_event.dart.template
│   │                       │   └── bloc_state.dart.template
│   │                       ├── bloc_equatable/
│   │                       │   ├── bloc.dart.template
│   │                       │   ├── bloc_event.dart.template
│   │                       │   └── bloc_state.dart.template
│   │                       ├── bloc_freezed/
│   │                       │   ├── bloc.dart.template
│   │                       │   ├── bloc_event.dart.template
│   │                       │   └── bloc_state.dart.template
│   │                       ├── cubit_basic/
│   │                       │   ├── cubit.dart.template
│   │                       │   └── cubit_state.dart.template
│   │                       ├── cubit_equatable/
│   │                       │   ├── cubit.dart.template
│   │                       │   └── cubit_state.dart.template
│   │                       └── cubit_freezed/
│   │                           ├── cubit.dart.template
│   │                           └── cubit_state.dart.template
│   ├── vscode/
│   │   ├── .gitignore
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── .vscodeignore
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── snippets/
│   │   │   ├── bloc.json
│   │   │   ├── bloc_test.json
│   │   │   ├── flutter_bloc.json
│   │   │   └── freezed_bloc.json
│   │   ├── src/
│   │   │   ├── code-actions/
│   │   │   │   ├── bloc-code-action-provider.ts
│   │   │   │   └── index.ts
│   │   │   ├── commands/
│   │   │   │   ├── convert-to.command.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── new-bloc.command.ts
│   │   │   │   ├── new-cubit.command.ts
│   │   │   │   └── wrap-with.command.ts
│   │   │   ├── extension.ts
│   │   │   ├── language-server/
│   │   │   │   ├── index.ts
│   │   │   │   ├── language-server.ts
│   │   │   │   └── selectors.ts
│   │   │   ├── templates/
│   │   │   │   ├── bloc-event.template.ts
│   │   │   │   ├── bloc-state.template.ts
│   │   │   │   ├── bloc.template.ts
│   │   │   │   ├── cubit-state.template.ts
│   │   │   │   ├── cubit.template.ts
│   │   │   │   └── index.ts
│   │   │   └── utils/
│   │   │       ├── analyze-dependencies.ts
│   │   │       ├── convert-to.ts
│   │   │       ├── downloader.ts
│   │   │       ├── exec.ts
│   │   │       ├── get-bloc-tools-executable.ts
│   │   │       ├── get-bloc-type.ts
│   │   │       ├── get-dart-version.ts
│   │   │       ├── get-latest-package-version.ts
│   │   │       ├── get-pubspec-path.ts
│   │   │       ├── get-pubspec.ts
│   │   │       ├── get-selected-text.ts
│   │   │       ├── get-template-setting.ts
│   │   │       ├── has-dependency.ts
│   │   │       ├── index.ts
│   │   │       ├── install-bloc-tools.ts
│   │   │       ├── retry.ts
│   │   │       ├── set-show-context-menu.ts
│   │   │       ├── update-pubspec-dependency.ts
│   │   │       └── wrap-with.ts
│   │   ├── tsconfig.json
│   │   ├── tslint.json
│   │   └── webpack.config.js
│   └── zed/
│       ├── .gitignore
│       ├── CHANGELOG.md
│       ├── Cargo.toml
│       ├── LICENSE
│       ├── README.md
│       ├── extension.toml
│       ├── extension.wasm
│       ├── snippets/
│       │   └── dart.json
│       └── src/
│           └── lib.rs
└── packages/
    ├── angular_bloc/
    │   ├── CHANGELOG.md
    │   ├── LICENSE
    │   ├── README.md
    │   ├── analysis_options.yaml
    │   ├── dart_test.yaml
    │   ├── example/
    │   │   └── example.dart
    │   ├── lib/
    │   │   ├── angular_bloc.dart
    │   │   └── src/
    │   │       └── pipes/
    │   │           ├── bloc_pipe.dart
    │   │           └── pipes.dart
    │   ├── pubspec.yaml
    │   ├── pubspec_overrides.yaml
    │   └── test/
    │       └── bloc_pipe_test.dart
    ├── bloc/
    │   ├── CHANGELOG.md
    │   ├── LICENSE
    │   ├── README.md
    │   ├── analysis_options.yaml
    │   ├── example/
    │   │   └── main.dart
    │   ├── lib/
    │   │   ├── bloc.dart
    │   │   └── src/
    │   │       ├── bloc.dart
    │   │       ├── bloc_base.dart
    │   │       ├── bloc_observer.dart
    │   │       ├── change.dart
    │   │       ├── cubit.dart
    │   │       ├── emitter.dart
    │   │       └── transition.dart
    │   ├── pubspec.yaml
    │   └── test/
    │       ├── bloc_event_transformer_test.dart
    │       ├── bloc_event_transformer_test_legacy.dart
    │       ├── bloc_observer_test.dart
    │       ├── bloc_on_test.dart
    │       ├── bloc_test.dart
    │       ├── blocs/
    │       │   ├── async/
    │       │   │   ├── async_bloc.dart
    │       │   │   ├── async_event.dart
    │       │   │   └── async_state.dart
    │       │   ├── blocs.dart
    │       │   ├── complex/
    │       │   │   ├── complex_bloc.dart
    │       │   │   ├── complex_event.dart
    │       │   │   └── complex_state.dart
    │       │   ├── counter/
    │       │   │   ├── counter.dart
    │       │   │   ├── counter_bloc.dart
    │       │   │   ├── counter_error_bloc.dart
    │       │   │   ├── counter_exception_bloc.dart
    │       │   │   ├── merge_bloc.dart
    │       │   │   ├── on_error_bloc.dart
    │       │   │   ├── on_event_error_bloc.dart
    │       │   │   ├── on_exception_bloc.dart
    │       │   │   └── on_transition_error_bloc.dart
    │       │   ├── seeded/
    │       │   │   └── seeded_bloc.dart
    │       │   ├── simple/
    │       │   │   └── simple_bloc.dart
    │       │   ├── stream/
    │       │   │   ├── restartable_stream_bloc.dart
    │       │   │   ├── stream.dart
    │       │   │   └── stream_bloc.dart
    │       │   └── unawaited/
    │       │       └── unawaited_bloc.dart
    │       ├── cubit_test.dart
    │       ├── cubits/
    │       │   ├── counter_cubit.dart
    │       │   ├── cubits.dart
    │       │   ├── fake_async_cubit.dart
    │       │   └── seeded_cubit.dart
    │       └── transition_test.dart
    ├── bloc_concurrency/
    │   ├── .gitignore
    │   ├── CHANGELOG.md
    │   ├── LICENSE
    │   ├── README.md
    │   ├── analysis_options.yaml
    │   ├── example/
    │   │   └── main.dart
    │   ├── lib/
    │   │   ├── bloc_concurrency.dart
    │   │   └── src/
    │   │       ├── concurrent.dart
    │   │       ├── droppable.dart
    │   │       ├── restartable.dart
    │   │       └── sequential.dart
    │   ├── pubspec.yaml
    │   ├── pubspec_overrides.yaml
    │   └── test/
    │       └── src/
    │           ├── concurrent_test.dart
    │           ├── droppable_test.dart
    │           ├── helpers.dart
    │           ├── restartable_test.dart
    │           └── sequential_test.dart
    ├── bloc_lint/
    │   ├── CHANGELOG.md
    │   ├── LICENSE
    │   ├── README.md
    │   ├── analysis_options.yaml
    │   ├── build.yaml
    │   ├── example/
    │   │   └── main.dart
    │   ├── lib/
    │   │   ├── all.yaml
    │   │   ├── bloc_lint.dart
    │   │   ├── recommended.yaml
    │   │   └── src/
    │   │       ├── analysis_options.dart
    │   │       ├── analysis_options.g.dart
    │   │       ├── diagnostic.dart
    │   │       ├── env.dart
    │   │       ├── lint_rule.dart
    │   │       ├── linter.dart
    │   │       ├── rules/
    │   │       │   ├── avoid_build_context_extensions.dart
    │   │       │   ├── avoid_flutter_imports.dart
    │   │       │   ├── avoid_public_bloc_methods.dart
    │   │       │   ├── avoid_public_fields.dart
    │   │       │   ├── prefer_bloc.dart
    │   │       │   ├── prefer_build_context_extensions.dart
    │   │       │   ├── prefer_cubit.dart
    │   │       │   ├── prefer_file_naming_conventions.dart
    │   │       │   ├── prefer_void_public_cubit_methods.dart
    │   │       │   └── rules.dart
    │   │       ├── string_case.dart
    │   │       └── text_document.dart
    │   ├── pubspec.yaml
    │   └── test/
    │       └── src/
    │           ├── analysis_options_test.dart
    │           ├── diagnostic_test.dart
    │           ├── lint_test_helper.dart
    │           ├── linter_test.dart
    │           ├── rules/
    │           │   ├── avoid_build_context_extensions_test.dart
    │           │   ├── avoid_flutter_imports_test.dart
    │           │   ├── avoid_public_bloc_methods_test.dart
    │           │   ├── avoid_public_fields_test.dart
    │           │   ├── prefer_bloc_test.dart
    │           │   ├── prefer_build_context_extensions_test.dart
    │           │   ├── prefer_cubit_test.dart
    │           │   ├── prefer_file_naming_conventions_test.dart
    │           │   └── prefer_void_public_cubit_methods_test.dart
    │           └── text_document_test.dart
    ├── bloc_test/
    │   ├── CHANGELOG.md
    │   ├── LICENSE
    │   ├── README.md
    │   ├── analysis_options.yaml
    │   ├── example/
    │   │   └── main.dart
    │   ├── lib/
    │   │   ├── bloc_test.dart
    │   │   └── src/
    │   │       ├── bloc_test.dart
    │   │       ├── mock_bloc.dart
    │   │       └── when_listen.dart
    │   ├── pubspec.yaml
    │   ├── pubspec_overrides.yaml
    │   └── test/
    │       ├── bloc_bloc_test_test.dart
    │       ├── bloc_observer_test.dart
    │       ├── blocs/
    │       │   ├── async_counter_bloc.dart
    │       │   ├── blocs.dart
    │       │   ├── complex_bloc.dart
    │       │   ├── counter_bloc.dart
    │       │   ├── debounce_counter_bloc.dart
    │       │   ├── error_counter_bloc.dart
    │       │   ├── exception_counter_bloc.dart
    │       │   ├── instant_emit_bloc.dart
    │       │   ├── multi_counter_bloc.dart
    │       │   ├── side_effect_counter_bloc.dart
    │       │   └── sum_bloc.dart
    │       ├── cubit_bloc_test_test.dart
    │       ├── cubits/
    │       │   ├── async_counter_cubit.dart
    │       │   ├── complex_cubit.dart
    │       │   ├── counter_cubit.dart
    │       │   ├── cubits.dart
    │       │   ├── delayed_counter_cubit.dart
    │       │   ├── error_cubit.dart
    │       │   ├── exception_cubit.dart
    │       │   ├── instant_emit_cubit.dart
    │       │   ├── multi_counter_cubit.dart
    │       │   ├── side_effect_counter_cubit.dart
    │       │   └── sum_cubit.dart
    │       ├── mock_bloc_test.dart
    │       └── when_listen_test.dart
    ├── bloc_tools/
    │   ├── .gitignore
    │   ├── CHANGELOG.md
    │   ├── LICENSE
    │   ├── README.md
    │   ├── analysis_options.yaml
    │   ├── bin/
    │   │   └── bloc.dart
    │   ├── dart_test.yaml
    │   ├── e2e/
    │   │   ├── main.dart
    │   │   └── pubspec.yaml
    │   ├── example/
    │   │   └── README.md
    │   ├── lib/
    │   │   ├── bloc_tools.dart
    │   │   └── src/
    │   │       ├── command_runner.dart
    │   │       ├── commands/
    │   │       │   ├── commands.dart
    │   │       │   ├── language_server/
    │   │       │   │   └── language_server_command.dart
    │   │       │   ├── lint/
    │   │       │   │   └── lint_command.dart
    │   │       │   └── new/
    │   │       │       ├── bundles/
    │   │       │       │   ├── bloc_bundle.dart
    │   │       │       │   ├── bundles.dart
    │   │       │       │   ├── cubit_bundle.dart
    │   │       │       │   ├── hydrated_bloc_bundle.dart
    │   │       │       │   ├── hydrated_cubit_bundle.dart
    │   │       │       │   ├── replay_bloc_bundle.dart
    │   │       │       │   └── replay_cubit_bundle.dart
    │   │       │       └── new_command.dart
    │   │       ├── lsp/
    │   │       │   ├── language_server.dart
    │   │       │   ├── text_document.dart
    │   │       │   └── text_documents.dart
    │   │       └── version.dart
    │   ├── pubspec.yaml
    │   ├── pubspec_overrides.yaml
    │   └── test/
    │       ├── ensure_build_test.dart
    │       └── src/
    │           ├── command_runner_test.dart
    │           ├── commands/
    │           │   ├── language_server/
    │           │   │   └── language_server_command_test.dart
    │           │   ├── lint/
    │           │   │   └── lint_command_test.dart
    │           │   └── new/
    │           │       └── new_test.dart
    │           └── lsp/
    │               ├── language_server_test.dart
    │               └── text_document_test.dart
    ├── flutter_bloc/
    │   ├── CHANGELOG.md
    │   ├── LICENSE
    │   ├── README.md
    │   ├── analysis_options.yaml
    │   ├── example/
    │   │   ├── .gitignore
    │   │   ├── .metadata
    │   │   ├── README.md
    │   │   ├── analysis_options.yaml
    │   │   ├── lib/
    │   │   │   └── main.dart
    │   │   ├── pubspec.yaml
    │   │   ├── pubspec_overrides.yaml
    │   │   └── web/
    │   │       ├── index.html
    │   │       └── manifest.json
    │   ├── lib/
    │   │   ├── flutter_bloc.dart
    │   │   └── src/
    │   │       ├── bloc_builder.dart
    │   │       ├── bloc_consumer.dart
    │   │       ├── bloc_listener.dart
    │   │       ├── bloc_provider.dart
    │   │       ├── bloc_selector.dart
    │   │       ├── multi_bloc_listener.dart
    │   │       ├── multi_bloc_provider.dart
    │   │       ├── multi_repository_provider.dart
    │   │       └── repository_provider.dart
    │   ├── pubspec.yaml
    │   ├── pubspec_overrides.yaml
    │   └── test/
    │       ├── bloc_builder_test.dart
    │       ├── bloc_consumer_test.dart
    │       ├── bloc_listener_test.dart
    │       ├── bloc_provider_test.dart
    │       ├── bloc_selector_test.dart
    │       ├── multi_bloc_listener_test.dart
    │       ├── multi_bloc_provider_test.dart
    │       ├── multi_repository_provider_test.dart
    │       └── repository_provider_test.dart
    ├── hydrated_bloc/
    │   ├── .gitignore
    │   ├── CHANGELOG.md
    │   ├── LICENSE
    │   ├── README.md
    │   ├── analysis_options.yaml
    │   ├── benchmark/
    │   │   └── README.md
    │   ├── build.yaml
    │   ├── example/
    │   │   ├── .gitignore
    │   │   ├── .metadata
    │   │   ├── README.md
    │   │   ├── analysis_options.yaml
    │   │   ├── lib/
    │   │   │   └── main.dart
    │   │   ├── pubspec.yaml
    │   │   ├── pubspec_overrides.yaml
    │   │   └── web/
    │   │       ├── index.html
    │   │       └── manifest.json
    │   ├── lib/
    │   │   ├── hydrated_bloc.dart
    │   │   └── src/
    │   │       ├── _migration/
    │   │       │   ├── _migration_io.dart
    │   │       │   └── _migration_stub.dart
    │   │       ├── hydrated_bloc.dart
    │   │       ├── hydrated_cipher.dart
    │   │       └── hydrated_storage.dart
    │   ├── pubspec.yaml
    │   ├── pubspec_overrides.yaml
    │   └── test/
    │       ├── cubits/
    │       │   ├── bad_cubit.dart
    │       │   ├── cubits.dart
    │       │   ├── cyclic_cubit.dart
    │       │   ├── freezed_cubit.dart
    │       │   ├── freezed_cubit.freezed.dart
    │       │   ├── freezed_cubit.g.dart
    │       │   ├── from_json_state_cubit.dart
    │       │   ├── json_serializable_cubit.dart
    │       │   ├── json_serializable_cubit.g.dart
    │       │   ├── list_cubit.dart
    │       │   ├── manual_cubit.dart
    │       │   ├── season_palette_cubit.dart
    │       │   └── simple_cubit.dart
    │       ├── e2e_test.dart
    │       ├── hive_interference_test.dart
    │       ├── hydrated_aes_cipher_test.dart
    │       ├── hydrated_bloc_test.dart
    │       ├── hydrated_cubit_test.dart
    │       ├── hydrated_cyclic_error_test.dart
    │       ├── hydrated_mixin_test.dart
    │       └── hydrated_storage_test.dart
    └── replay_bloc/
        ├── .gitignore
        ├── CHANGELOG.md
        ├── LICENSE
        ├── README.md
        ├── analysis_options.yaml
        ├── example/
        │   ├── .gitignore
        │   ├── .metadata
        │   ├── README.md
        │   ├── analysis_options.yaml
        │   ├── lib/
        │   │   └── main.dart
        │   ├── pubspec.yaml
        │   ├── pubspec_overrides.yaml
        │   └── web/
        │       ├── index.html
        │       └── manifest.json
        ├── lib/
        │   ├── replay_bloc.dart
        │   └── src/
        │       ├── change_stack.dart
        │       ├── replay_bloc.dart
        │       └── replay_cubit.dart
        ├── pubspec.yaml
        ├── pubspec_overrides.yaml
        └── test/
            ├── blocs/
            │   └── counter_bloc.dart
            ├── cubits/
            │   └── counter_cubit.dart
            ├── main.dart
            ├── replay_bloc_test.dart
            └── replay_cubit_test.dart

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/CODEOWNERS
================================================
# Every request must be reviewed and accepted by:

*	@felangel

================================================
FILE: .github/FUNDING.yml
================================================
github: [felangel]
patreon: felangel
open_collective: bloc


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug Report
about: Create a report to help us improve
title: "fix: "
labels: bug
---

**Description**
A clear and concise description of what the bug is.

**Steps To Reproduce**

1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected Behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Additional Context**
Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/build.md
================================================
---
name: Build System
about: Changes that affect the build system or external dependencies
title: "build: "
labels: build
---

**Description**

Describe what changes need to be done to the build system and why


================================================
FILE: .github/ISSUE_TEMPLATE/chore.md
================================================
---
name: Chore
about: Other changes that don't modify src or test files
title: "chore: "
labels: chore
---

**Description**

Clearly describe what change is needed and why. If this changes code then please use another issue type.


================================================
FILE: .github/ISSUE_TEMPLATE/ci.md
================================================
---
name: Continuous Integration
about: Changes to the CI configuration files and scripts
title: "ci: "
labels: ci
---

**Description**

Describe what changes need to be done to the ci/cd system and why


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false

================================================
FILE: .github/ISSUE_TEMPLATE/documentation.md
================================================
---
name: Documentation
about: Improve the documentation so all collaborators have a common understanding
title: "docs: "
labels: documentation
---

**Description**

Clearly describe what documentation you are looking to add or improve.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature Request
about: A new feature to be added to the project
title: "feat: "
labels: feature
---

**Description**

A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Desired Solution**

A clear and concise description of what you want to happen.

**Alternatives Considered**

A clear and concise description of any alternative solutions or features you've considered.

**Additional Context**

Add any other context or screenshots about the feature request go here.


================================================
FILE: .github/ISSUE_TEMPLATE/performance.md
================================================
---
name: Performance Update
about: A code change that improves performance
title: "perf: "
labels: performance
---

**Description**

Clearly describe what code needs to be changed and what the performance impact is going to be.


================================================
FILE: .github/ISSUE_TEMPLATE/refactor.md
================================================
---
name: Refactor
about: A code change that neither fixes a bug nor adds a feature
title: "refactor: "
labels: refactor
---

**Description**

Clearly describe what needs to be refactored any why. Please provide links to related issues (bugs or upcoming features) in order to help prioritize.


================================================
FILE: .github/ISSUE_TEMPLATE/revert.md
================================================
---
name: Revert Commit
about: Reverts a previous commit
title: "revert: "
labels: revert
---

**Description**

Provide a link to a PR/Commit that you are looking to revert and why.


================================================
FILE: .github/ISSUE_TEMPLATE/style.md
================================================
---
name: Style Changes
about: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
title: "style: "
labels: style
---

**Description**

Clearly describe what you are looking to change and why.


================================================
FILE: .github/ISSUE_TEMPLATE/test.md
================================================
---
name: Test
about: Adding missing tests or correcting existing tests
title: "test: "
labels: test
---

**Description**

List out the tests that need to be added or changed. Please also include any information as to why this was not covered in the past.


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--
  Thanks for contributing!

  Provide a description of your changes below and a general summary in the title

  Please look at the following checklist to ensure that your PR can be accepted quickly:
-->

## Status

**READY/IN DEVELOPMENT/HOLD**

## Breaking Changes

YES | NO

## Description

<!--- Describe your changes in detail -->

## Type of Change

<!--- Put an `x` in all the boxes that apply: -->

- [ ] ✨ New feature (non-breaking change which adds functionality)
- [ ] 🛠️ Bug fix (non-breaking change which fixes an issue)
- [ ] ❌ Breaking change (fix or feature that would cause existing functionality to change)
- [ ] 🧹 Code refactor
- [ ] ✅ Build configuration change
- [ ] 📝 Documentation
- [ ] 🗑️ Chore


================================================
FILE: .github/actions/angular_dart_package/action.yaml
================================================
name: Angular Dart Package Workflow
description: Build and test Angular Dart packages.

inputs:
  dart_sdk:
    required: false
    default: "stable"
    description: "The dart sdk version to use"
  working_directory:
    required: false
    default: "."
    description: The working directory for this workflow
  analyze_directories:
    required: false
    default: "lib test"
    description: Directories to analyze

runs:
  using: "composite"
  steps:
    - name: 🎯 Setup Dart
      uses: dart-lang/setup-dart@v1
      with:
        sdk: ${{inputs.dart_sdk}}

    - name: 📦 Install Dependencies
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: dart pub get

    - name: 🛠️ Build
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: |
        dart pub global activate webdev
        webdev build

    - name: ✨ Format
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: dart format --set-exit-if-changed .

    - name: 🔍 Analyze
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: dart analyze --fatal-warnings ${{inputs.analyze_directories}}

    - name: 🧪 Test
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: |
        if [ -d "test" ]; then
          dart run build_runner test --fail-on-severe
        fi


================================================
FILE: .github/actions/astro_site/action.yaml
================================================
name: Astro Site Workflow
description: Build and test Astro sites.

inputs:
  working_directory:
    required: false
    default: "."
    description: The working directory for this workflow
  node_version:
    required: false
    default: "20"
    description: The node version to use.

runs:
  using: "composite"
  steps:
    - name: ⚙️ Setup Node
      uses: actions/setup-node@v4
      with:
        node-version: ${{ inputs.node_version }}

    - name: ⬇️ Install Dependencies
      run: npm install
      shell: ${{ inputs.shell }}
      working-directory: ${{ inputs.working_directory }}

    - name: ✨ Check Format
      run: npm run format:check
      shell: ${{ inputs.shell }}
      working-directory: ${{ inputs.working_directory }}

    - name: 📦 Build Site
      uses: withastro/action@v2
      with:
        path: ${{ inputs.working_directory }}
        node-version: ${{ inputs.node_version }}


================================================
FILE: .github/actions/dart_compile/action.yaml
================================================
name: Dart Compile Workflow
description: Compile Dart Executables

inputs:
  dart_sdk:
    required: false
    default: "stable"
    description: "The dart sdk version to use"
  working_directory:
    required: false
    default: "."
    description: The working directory for this workflow
  entrypoint:
    required: true
    description: The path to the Dart entrypoint
  name:
    required: true
    description: The name of the executable
  os:
    required: true
    description: The operating system to compile for
  arch:
    required: true
    description: The architecture to compile for

runs:
  using: "composite"
  steps:
    - name: 🎯 Setup Dart
      uses: dart-lang/setup-dart@v1
      with:
        sdk: ${{inputs.dart_sdk}}

    - name: 📦 Install Dependencies
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: dart pub get

    - name: ⚙️ Compile (${{ inputs.os }}, ${{ inputs.arch }})
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: |
        mkdir ${{ runner.temp }}/executable
        dart compile exe --target-os ${{ inputs.os }} --target-arch ${{ inputs.arch }} ${{ inputs.entrypoint }} -o ${{ runner.temp }}/executable/${{ inputs.name }}

    - name: ⬆️ Upload Artifact
      uses: actions/upload-artifact@v4
      with:
        name: ${{ inputs.name }}
        path: ${{ runner.temp }}/executable/${{ inputs.name }}


================================================
FILE: .github/actions/dart_package/action.yaml
================================================
name: Dart Package Workflow
description: Build and test Dart packages.

inputs:
  codecov_token:
    required: true
    description: The Codecov token used to upload coverage
  collect_coverage:
    required: false
    default: "true"
    description: Whether to collect code coverage
  collect_score:
    required: false
    default: "true"
    description: Whether to collect the pana score
  concurrency:
    required: false
    default: "4"
    description: The value of the concurrency flag (-j) used when running tests
  coverage_excludes:
    required: false
    default: ""
    description: Globs to exclude from coverage
  dart_sdk:
    required: false
    default: "stable"
    description: "The dart sdk version to use"
  working_directory:
    required: false
    default: "."
    description: The working directory for this workflow
  min_coverage:
    required: false
    default: "100"
    description: The minimum coverage percentage value
  min_score:
    required: false
    default: "120"
    description: The minimum pana score value
  analyze_directories:
    required: false
    default: "lib test"
    description: Directories to analyze
  report_on:
    required: false
    default: "lib"
    description: Directories to report on when collecting coverage

runs:
  using: "composite"
  steps:
    - name: 🎯 Setup Dart
      uses: dart-lang/setup-dart@v1
      with:
        sdk: ${{inputs.dart_sdk}}

    - name: ⚙️ Setup Bloc Tools
      run: dart pub global activate --source path ./packages/bloc_tools
      shell: ${{ inputs.shell }}

    - name: 📦 Install Dependencies
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: dart pub get

    - name: ✨ Format
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: dart format --set-exit-if-changed .

    - name: 🔍 Analyze
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: dart analyze --fatal-warnings ${{inputs.analyze_directories}}

    - name: 🔍 Bloc Lint
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: bloc lint ${{inputs.analyze_directories}}

    - name: 🧪 Test
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: |
        dart pub global activate coverage
        dart test -j ${{inputs.concurrency}} --coverage=coverage && dart pub global run coverage:format_coverage --lcov --in=coverage --out=coverage/lcov.info --packages=.dart_tool/package_config.json --report-on=${{inputs.report_on}} --check-ignore

    - name: 📦 Detect Package Name
      if: inputs.collect_coverage == 'true'
      env:
        PACKAGE_PATH: ${{ inputs.working_directory}}
      id: package
      shell: ${{ inputs.shell }}
      run: echo "name=${PACKAGE_PATH##*/}" >> $GITHUB_OUTPUT

    - name: ⬆️ Upload Coverage
      if: inputs.collect_coverage == 'true'
      uses: codecov/codecov-action@v4
      env:
        PACKAGE_PATH: ${{ inputs.working_directory}}
      with:
        flags: ${{ steps.package.outputs.name }}
        token: ${{ inputs.codecov_token }}

    - name: 📊 Verify Coverage
      if: inputs.collect_coverage == 'true'
      uses: VeryGoodOpenSource/very_good_coverage@v3
      with:
        path: ${{inputs.working_directory}}/coverage/lcov.info
        exclude: ${{inputs.coverage_excludes}}
        min_coverage: ${{inputs.min_coverage}}

    - name: 💯 Verify Pub Score
      if: inputs.collect_score == 'true'
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: |
        dart pub global activate pana
        sudo apt-get install webp
        PANA=$(pana . --no-warning); PANA_SCORE=$(echo $PANA | sed -n "s/.*Points: \([0-9]*\)\/\([0-9]*\)./\1\/\2/p")
        echo $PANA
        IFS='/'; read -a SCORE_ARR <<< "$PANA_SCORE"; SCORE=SCORE_ARR[0]; TOTAL=SCORE_ARR[1]
        if [ -z "$1" ]; then MINIMUM_SCORE=TOTAL; else MINIMUM_SCORE=$1; fi
        if (( $SCORE < $MINIMUM_SCORE )); then echo "minimum score $MINIMUM_SCORE was not met!"; exit 1; fi


================================================
FILE: .github/actions/flutter_package/action.yaml
================================================
name: Flutter Package Workflow
description: Build and test a Flutter package.

inputs:
  codecov_token:
    required: true
    description: The Codecov token used to upload coverage
  collect_coverage:
    required: false
    default: "true"
    description: Whether to collect code coverage
  collect_score:
    required: false
    default: "true"
    description: Whether to collect the pana score
  concurrency:
    required: false
    default: "4"
    description: The value of the concurrency flag (-j) used when running tests
  coverage_excludes:
    required: false
    default: ""
    description: Globs to exclude from coverage
  flutter_channel:
    required: false
    default: "stable"
    description: The Flutter channel to use
  working_directory:
    required: false
    default: "."
    description: The working directory for this workflow
  min_coverage:
    required: false
    default: "100"
    description: The minimum coverage percentage value
  analyze_directories:
    required: false
    default: "lib test"
    description: Directories to analyze
  report_on:
    required: false
    default: "lib"
    description: Directories to report on when collecting coverage
  platform:
    required: false
    default: "vm"
    description: Platform to use when running tests

runs:
  using: "composite"
  steps:
    - name: 🐦 Setup Flutter
      uses: subosito/flutter-action@v2
      with:
        channel: ${{ inputs.flutter_channel }}

    - name: 📦 Install Dependencies
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: flutter pub get

    - name: ⚙️ Setup Bloc Tools
      run: dart pub global activate --source path ./packages/bloc_tools
      shell: ${{ inputs.shell }}

    - name: ✨ Format
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: dart format --set-exit-if-changed .

    - name: 🔍 Analyze
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: dart analyze --fatal-warnings ${{inputs.analyze_directories}}

    - name: 🔍 Bloc Lint
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: bloc lint ${{inputs.analyze_directories}}

    - name: 🧪 Test
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: |
        if [ -d "test" ]; then
          flutter test --no-pub --test-randomize-ordering-seed random --coverage
        fi

    - name: Exclude Generated Code from Coverage
      if: ${{ inputs.collect_coverage == 'true' && inputs.coverage_excludes != '' }}
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: |
        mv coverage/lcov.info coverage/lcov.info.bak
        sudo apt-get -y install lcov
        lcov --remove coverage/lcov.info.bak "${{inputs.coverage_excludes}}" -o coverage/lcov.info

    - name: 📦 Detect Package Name
      if: inputs.collect_coverage == 'true'
      env:
        PACKAGE_PATH: ${{ inputs.working_directory}}
      id: package
      shell: ${{ inputs.shell }}
      run: echo "name=${PACKAGE_PATH##*/}" >> $GITHUB_OUTPUT

    - name: ⬆️ Upload Coverage
      if: inputs.collect_coverage == 'true'
      uses: codecov/codecov-action@v4
      env:
        PACKAGE_PATH: ${{ inputs.working_directory}}
      with:
        flags: ${{ steps.package.outputs.name }}
        token: ${{ inputs.codecov_token }}

    - name: 📊 Verify Coverage
      if: inputs.collect_coverage == 'true'
      uses: VeryGoodOpenSource/very_good_coverage@v3
      with:
        path: ${{inputs.working_directory}}/coverage/lcov.info
        exclude: ${{inputs.coverage_excludes}}
        min_coverage: ${{inputs.min_coverage}}

    - name: 💯 Verify Pub Score
      if: inputs.collect_score == 'true'
      working-directory: ${{ inputs.working_directory }}
      shell: ${{ inputs.shell }}
      run: |
        dart pub global activate pana
        sudo apt-get install webp
        PANA=$(pana . --no-warning); PANA_SCORE=$(echo $PANA | sed -n "s/.*Points: \([0-9]*\)\/\([0-9]*\)./\1\/\2/p")
        echo $PANA
        IFS='/'; read -a SCORE_ARR <<< "$PANA_SCORE"; SCORE=SCORE_ARR[0]; TOTAL=SCORE_ARR[1]
        if [ -z "$1" ]; then MINIMUM_SCORE=TOTAL; else MINIMUM_SCORE=$1; fi
        if (( $SCORE < $MINIMUM_SCORE )); then echo "minimum score $MINIMUM_SCORE was not met!"; exit 1; fi


================================================
FILE: .github/codecov.yml
================================================
flag_management:
  default_rules:
    carryforward: true


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "daily"
    groups:
      github_actions:
        patterns:
          - "*"


================================================
FILE: .github/workflows/main.yaml
================================================
name: build

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

on:
  pull_request:
  push:
    branches: [master]

permissions:
  contents: read
  pages: write
  id-token: write

jobs:
  semantic_pull_request:
    name: ✅ Semantic Pull Request
    uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/semantic_pull_request.yml@v1

  changes:
    runs-on: ubuntu-latest

    if: github.event.pull_request.draft == false

    outputs:
      needs_angular_dart_example_checks: ${{ steps.needs_angular_dart_example_checks.outputs.changes }}
      needs_bloc_tools_e2e_checks: ${{ steps.needs_bloc_tools_e2e_checks.outputs.changes }}
      needs_dart_package_checks: ${{ steps.needs_dart_package_checks.outputs.changes }}
      needs_bloc_tools_compile_checks: ${{ steps.needs_bloc_tools_compile_checks.outputs.changes }}
      needs_flutter_package_checks: ${{ steps.needs_flutter_package_checks.outputs.changes }}
      needs_flutter_example_checks: ${{ steps.needs_flutter_example_checks.outputs.changes }}
      needs_docs_checks: ${{ steps.needs_docs_checks.outputs.changes }}

    name: 👀 Detect Changes

    steps:
      - name: 📚 Git Checkout
        uses: actions/checkout@v6

      - uses: dorny/paths-filter@v4
        name: Angular Dart Package Detection
        id: needs_angular_dart_example_checks
        with:
          filters: |
            angular_counter:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/angular_dart_package/action.yaml
              - examples/angular_counter/**
            github_search/angular_github_search:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/dart_package/action.yaml
              - examples/github_search/angular_github_search/**

      - uses: dorny/paths-filter@v4
        name: Bloc Tools E2E Detection
        id: needs_bloc_tools_e2e_checks
        with:
          filters: |
            bloc_tools:
              - ./.github/workflows/main.yaml
              - packages/bloc_tools/**

      - uses: dorny/paths-filter@v4
        name: Dart Package Detection
        id: needs_dart_package_checks
        with:
          filters: |
            angular_bloc:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/dart_package/action.yaml
              - packages/angular_bloc/**
            bloc_concurrency:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/dart_package/action.yaml
              - packages/bloc_concurrency/**
            bloc_lint:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/dart_package/action.yaml
              - packages/bloc_lint/**
            bloc_test:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/dart_package/action.yaml
              - packages/bloc_test/**
            bloc_tools:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/dart_package/action.yaml
              - packages/bloc_tools/**
            bloc:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/dart_package/action.yaml
              - packages/bloc/**

      - uses: dorny/paths-filter@v4
        name: Bloc Tools Compile Detection
        id: needs_bloc_tools_compile_checks
        with:
          filters: |
            bloc_tools:
              - ./.github/actions/dart_compile/action.yaml
              - ./.github/workflows/main.yaml
              - packages/bloc_tools/**

      - uses: dorny/paths-filter@v4
        name: Flutter Package Detection
        id: needs_flutter_package_checks
        with:
          filters: |
            flutter_bloc:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/flutter_package/action.yaml
              - packages/flutter_bloc/**
            replay_bloc:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/flutter_package/action.yaml
              - packages/replay_bloc/**
            hydrated_bloc:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/flutter_package/action.yaml
              - packages/hydrated_bloc/**

      - uses: dorny/paths-filter@v4
        name: Example Detection
        id: needs_flutter_example_checks
        with:
          filters: |
            bloc_concurrency_visualizer:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/flutter_package/action.yaml
              - examples/bloc_concurrency_visualizer/**
            flutter_bloc_with_stream:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/flutter_package/action.yaml
              - examples/flutter_bloc_with_stream/**
            flutter_complex_list:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/flutter_package/action.yaml
              - examples/flutter_complex_list/**
            flutter_counter:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/flutter_package/action.yaml
              - examples/flutter_counter/**
            flutter_dynamic_form:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/flutter_package/action.yaml
              - examples/flutter_dynamic_form/**
            flutter_firebase_login:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/flutter_package/action.yaml
              - examples/flutter_firebase_login/**
            flutter_form_validation:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/flutter_package/action.yaml
              - examples/flutter_form_validation/**
            flutter_infinite_list:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/flutter_package/action.yaml
              - examples/flutter_infinite_list/**
            flutter_login:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/flutter_package/action.yaml
              - examples/flutter_login/**
            flutter_shopping_cart:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/flutter_package/action.yaml
              - examples/flutter_shopping_cart/**
            flutter_timer:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/flutter_package/action.yaml
              - examples/flutter_timer/**
            flutter_todos:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/flutter_package/action.yaml
              - examples/flutter_todos/**
            flutter_weather:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/flutter_package/action.yaml
              - examples/flutter_weather/**
            flutter_wizard:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/flutter_package/action.yaml
              - examples/flutter_wizard/**
            github_search/flutter_github_search:
              - ./.github/codecov.yml
              - ./.github/workflows/main.yaml
              - ./.github/actions/flutter_package/action.yaml
              - examples/github_search/flutter_github_search/**

      - uses: dorny/paths-filter@v4
        name: Docs Detection
        id: needs_docs_checks
        with:
          filters: |
            - ./.github/workflows/main.yaml
            - ./.github/actions/astro_site/action.yaml
            - examples/**
            - docs/**

  bloc_tools_e2e_checks:
    needs: changes
    if: ${{ needs.changes.outputs.needs_bloc_tools_e2e_checks != '[]' }}

    strategy:
      fail-fast: false
      matrix:
        os: ["ubuntu-latest", "macos-latest", "windows-latest"]
        package: ${{ fromJSON(needs.changes.outputs.needs_bloc_tools_e2e_checks) }}

    runs-on: ${{ matrix.os }}

    name: 🧪 ${{ matrix.package }} (${{ matrix.os }})

    steps:
      - name: 📚 Git Checkout
        uses: actions/checkout@v6

      - name: 🐦 Setup Flutter
        uses: subosito/flutter-action@v2
        with:
          cache: true

      - name: ⚙️ Setup Bloc Tools
        run: dart pub global activate --source path ./packages/bloc_tools

      - name: 📦 Install Dependencies
        working-directory: packages/${{ matrix.package }}/e2e
        run: flutter pub get

      - name: 🧪 E2E
        working-directory: packages/${{ matrix.package }}/e2e
        run: dart run main.dart

  dart_package_checks:
    needs: changes
    if: ${{ needs.changes.outputs.needs_dart_package_checks != '[]' }}

    strategy:
      fail-fast: false
      matrix:
        package: ${{ fromJSON(needs.changes.outputs.needs_dart_package_checks) }}

    runs-on: ubuntu-latest

    name: 🎯 ${{ matrix.package }}

    steps:
      - name: 📚 Git Checkout
        uses: actions/checkout@v6

      - name: 🎯 Build ${{ matrix.package }}
        uses: ./.github/actions/dart_package
        with:
          codecov_token: ${{ secrets.CODECOV_TOKEN }}
          working_directory: packages/${{ matrix.package }}
          min_coverage: 100

  bloc_tools_compile_checks:
    needs: changes
    if: ${{ needs.changes.outputs.needs_bloc_tools_compile_checks != '[]' }}

    strategy:
      fail-fast: false
      matrix:
        config:
          [
            { "runs-on": "ubuntu-latest", "os": "linux", "arch": "x64" },
            { "runs-on": "ubuntu-latest", "os": "linux", "arch": "arm64" },
            { "runs-on": "macos-15-intel", "os": "macos", "arch": "x64" },
            { "runs-on": "macos-latest", "os": "macos", "arch": "arm64" },
            { "runs-on": "windows-latest", "os": "windows", "arch": "x64" },
          ]

    runs-on: ${{ matrix.config.runs-on }}

    name: ⚙️ Compile Bloc Tools

    steps:
      - name: 📚 Git Checkout
        uses: actions/checkout@v6

      - name: ⚙️ Compile Bloc Tools for ${{ matrix.config.os }} ${{ matrix.config.arch }}
        uses: ./.github/actions/dart_compile
        with:
          entrypoint: bin/bloc.dart
          working_directory: packages/bloc_tools
          name: bloc_${{ matrix.config.os }}_${{ matrix.config.arch }}
          os: ${{ matrix.config.os }}
          arch: ${{ matrix.config.arch }}

  flutter_package_checks:
    needs: changes
    if: ${{ needs.changes.outputs.needs_flutter_package_checks != '[]' }}

    strategy:
      fail-fast: false
      matrix:
        package: ${{ fromJSON(needs.changes.outputs.needs_flutter_package_checks) }}

    runs-on: ubuntu-latest

    name: 🐦 ${{ matrix.package }}

    steps:
      - name: 📚 Git Checkout
        uses: actions/checkout@v6

      - name: 🎯 Build ${{ matrix.package }}
        uses: ./.github/actions/flutter_package
        with:
          codecov_token: ${{ secrets.CODECOV_TOKEN }}
          working_directory: packages/${{ matrix.package }}
          min_coverage: 100

  angular_dart_example_checks:
    needs: changes
    if: ${{ needs.changes.outputs.needs_angular_dart_example_checks != '[]' }}

    strategy:
      fail-fast: false
      matrix:
        example: ${{ fromJSON(needs.changes.outputs.needs_angular_dart_example_checks) }}

    runs-on: ubuntu-latest

    name: 🛡️ ${{ matrix.example }}

    steps:
      - name: 📚 Git Checkout
        uses: actions/checkout@v6

      - name: 🎯 Build ${{ matrix.example }}
        uses: ./.github/actions/angular_dart_package
        with:
          analyze_directories: lib
          working_directory: examples/${{ matrix.example }}

  flutter_example_checks:
    needs: changes
    if: ${{ needs.changes.outputs.needs_flutter_example_checks != '[]' }}

    strategy:
      fail-fast: false
      matrix:
        example: ${{ fromJSON(needs.changes.outputs.needs_flutter_example_checks) }}

    runs-on: ubuntu-latest

    name: 🧑‍🎓 ${{ matrix.example }}

    steps:
      - name: 📚 Git Checkout
        uses: actions/checkout@v6

      - name: 🎯 Build ${{ matrix.example }}
        uses: ./.github/actions/flutter_package
        with:
          analyze_directories: lib
          collect_coverage: false
          collect_score: false
          flutter_channel: master
          working_directory: examples/${{ matrix.example }}

  docs_checks:
    needs: changes
    if: ${{ needs.changes.outputs.needs_docs_checks != '[]' }}

    runs-on: ubuntu-latest

    name: 📖 docs

    steps:
      - name: 📚 Git Checkout
        uses: actions/checkout@v6

      - name: 📦 Build Docs
        uses: ./.github/actions/astro_site
        with:
          working_directory: ./docs

  deploy:
    needs: docs_checks
    if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}

    runs-on: ubuntu-latest

    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}

    steps:
      - name: 🚀 Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

  build:
    needs:
      [
        angular_dart_example_checks,
        bloc_tools_compile_checks,
        bloc_tools_e2e_checks,
        dart_package_checks,
        docs_checks,
        flutter_example_checks,
        flutter_package_checks,
        semantic_pull_request,
      ]

    if: ${{ always() }}

    runs-on: ubuntu-latest

    steps:
      - name: ⛔️ exit(1) on failure
        if: ${{ contains(join(needs.*.result, ','), 'failure') }}
        run: exit 1


================================================
FILE: .gitignore
================================================
# Miscellaneous
*.class
*.lock
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/

# IntelliJ related
*.iml
*.ipr
*.iws
.idea/

# Visual Studio Code related
.classpath
.project
.settings/
.vscode/*

# Flutter repo-specific
/bin/cache/
/bin/mingit/
/dev/benchmarks/mega_gallery/
/dev/bots/.recipe_deps
/dev/bots/android_tools/
/dev/docs/doc/
/dev/docs/flutter.docs.zip
/dev/docs/lib/
/dev/docs/pubspec.yaml
/dev/integration_tests/**/xcuserdata
/dev/integration_tests/**/Pods
/packages/flutter/coverage/
version

# packages file containing multi-root paths
.packages.generated

# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
build/
linked_*.ds
unlinked.ds
unlinked_spec.ds

# Android related
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
**/android/key.properties
*.jks

# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Flutter.podspec
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*

# Coverage
coverage/
coverage_badge.svg
.test_coverage.dart
*.lcov
nohup.out

# Mason
mason-lock.json
.mason

# Exceptions to above rules.
!.vscode/launch.json
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
!/dev/ci/**/Gemfile.lock

================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or
 advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
 address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
 professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.

## Scope

This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at felangelov@gmail.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Bloc

👍🎉 First off, thanks for taking the time to contribute! 🎉👍

The following is a set of guidelines for contributing to Bloc and its packages.
These are mostly guidelines, not rules. Use your best judgment,
and feel free to propose changes to this document in a pull request.

## Proposing a Change

If you intend to change the public API, or make any non-trivial changes
to the implementation, we recommend filing an issue.
This lets us reach an agreement on your proposal before you put significant
effort into it.

If you’re only fixing a bug, it’s fine to submit a pull request right away
but we still recommend to file an issue detailing what you’re fixing.
This is helpful in case we don’t accept that specific fix but want to keep
track of the issue.

## Creating a Pull Request

Before creating a pull request please:

1. Fork the repository and create your branch from `master`.
1. Install all dependencies (`flutter pub get`).
1. Squash your commits and ensure you have a meaningful commit message.
1. If you’ve fixed a bug or added code that should be tested, add tests!
   Pull Requests without 100% test coverage will not be approved.
1. Ensure the test suite passes.
1. If you've changed the public API, make sure to update/add documentation.
1. Format your code (`dart format .`).
1. Analyze your code (`dart analyze --fatal-infos --fatal-warnings .`).
1. Create the Pull Request.
1. Verify that all status checks are passing.

While the prerequisites above must be satisfied prior to having your
pull request reviewed, the reviewer(s) may ask you to complete additional
design work, tests, or other changes before your pull request can be ultimately
accepted.

## Contributing to Documentation

If you would like to contribute to the [documentation](https://bloclibrary.dev)
please follow the same process for "Creating a Pull Request" and double check
that your changes look good by running the docs locally.

```sh
# Change directories into docs
cd ./docs

# Install dependencies
npm install

# Start the dev server
npm start

# Navigate to http://localhost:4321 in your browser
```

If you wish to add translations, ensure the locale is included in the [locales list](https://github.com/felangel/bloc/blob/8a714a6923a6480032319b45f461d1f9ccd025de/docs/astro.config.mjs#L7) and create the translated `mdx` file in the corresponding subdirectory within `docs/src/content/docs/<lang>`.

Refer to [this pull request](https://github.com/felangel/bloc/pull/4084) for an example.

## Adding an example

Examples live in the `examples` folder.

When you're adding an example, make sure to add CI checks for it in
[main.yaml](https://github.com/felangel/bloc/blob/master/.github/workflows/main.yaml):

- For a Flutter example, add it to the `folder` list in the `examples-flutter`
  step.
- For a web example, add it to the `folder` list in the `examples-web` step.
- For a pure Dart example, add it to the `folder` list in the `examples-pure`
  step.

## Getting in Touch

If you want to just ask a question or get feedback on an idea you can post it
on [Discord](https://discord.gg/bloc).

## License

By contributing to Bloc, you agree that your contributions will be licensed
under its [MIT license](LICENSE).


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2026 Felix Angelov

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
<p align="center">
<img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/logos/bloc.png" height="100" alt="Bloc" />
</p>

<p align="center">
<a href="https://github.com/felangel/bloc/actions"><img src="https://github.com/felangel/bloc/actions/workflows/main.yaml/badge.svg" alt="build"></a>
<a href="https://codecov.io/gh/felangel/bloc"><img src="https://codecov.io/gh/felangel/Bloc/branch/master/graph/badge.svg" alt="codecov"></a>
<a href="https://github.com/felangel/bloc"><img src="https://img.shields.io/github/stars/felangel/bloc.svg?style=flat&logo=github&colorB=deeppink&label=stars" alt="Star on Github"></a>
<a href="https://pub.dev/packages/bloc_lint"><img src="https://img.shields.io/badge/style-bloc_lint-20FFE4.svg" alt="style: bloc lint"></a>
<a href="https://flutter.dev/docs/development/data-and-backend/state-mgmt/options#bloc--rx"><img src="https://img.shields.io/badge/flutter-website-deepskyblue.svg" alt="Flutter Website"></a>
<a href="https://github.com/Solido/awesome-flutter#standard"><img src="https://img.shields.io/badge/awesome-flutter-blue.svg?longCache=true" alt="Awesome Flutter"></a>
<a href="http://fluttersamples.com"><img src="https://img.shields.io/badge/flutter-samples-teal.svg?longCache=true" alt="Flutter Samples"></a>
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-purple.svg" alt="License: MIT"></a>
<a href="https://discord.gg/bloc"><img src="https://img.shields.io/discord/649708778631200778.svg?logo=discord&color=blue" alt="Discord"></a>
<a href="https://github.com/felangel/bloc"><img src="https://tinyurl.com/bloc-library" alt="Bloc Library"></a>
</p>

---

A predictable state management library that helps implement the BLoC design pattern.

| Package                                                                                    | Pub                                                                                                            |
| ------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------- |
| [angular_bloc](https://github.com/felangel/bloc/tree/master/packages/angular_bloc)         | [![pub package](https://img.shields.io/pub/v/angular_bloc.svg)](https://pub.dev/packages/angular_bloc)         |
| [bloc](https://github.com/felangel/bloc/tree/master/packages/bloc)                         | [![pub package](https://img.shields.io/pub/v/bloc.svg)](https://pub.dev/packages/bloc)                         |
| [bloc_concurrency](https://github.com/felangel/bloc/tree/master/packages/bloc_concurrency) | [![pub package](https://img.shields.io/pub/v/bloc_concurrency.svg)](https://pub.dev/packages/bloc_concurrency) |
| [bloc_lint](https://github.com/felangel/bloc/tree/master/packages/bloc_lint)               | [![pub package](https://img.shields.io/pub/v/bloc_lint.svg)](https://pub.dev/packages/bloc_lint)               |
| [bloc_test](https://github.com/felangel/bloc/tree/master/packages/bloc_test)               | [![pub package](https://img.shields.io/pub/v/bloc_test.svg)](https://pub.dev/packages/bloc_test)               |
| [bloc_tools](https://github.com/felangel/bloc/tree/master/packages/bloc_tools)             | [![pub package](https://img.shields.io/pub/v/bloc_tools.svg)](https://pub.dev/packages/bloc_tools)             |
| [flutter_bloc](https://github.com/felangel/bloc/tree/master/packages/flutter_bloc)         | [![pub package](https://img.shields.io/pub/v/flutter_bloc.svg)](https://pub.dev/packages/flutter_bloc)         |
| [hydrated_bloc](https://github.com/felangel/bloc/tree/master/packages/hydrated_bloc)       | [![pub package](https://img.shields.io/pub/v/hydrated_bloc.svg)](https://pub.dev/packages/hydrated_bloc)       |
| [replay_bloc](https://github.com/felangel/bloc/tree/master/packages/replay_bloc)           | [![pub package](https://img.shields.io/pub/v/replay_bloc.svg)](https://pub.dev/packages/replay_bloc)           |

---

## Sponsors

Our top sponsors are shown below! [[Become a Sponsor](https://github.com/sponsors/felangel)]

<table style="background-color: white; border: 1px solid black">
    <tbody>
        <tr>
            <td align="center" style="border: 1px solid black">
                <a href="https://shorebird.dev"><img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/sponsors/shorebird.png" width="225"/></a>
            </td>            
            <td align="center" style="border: 1px solid black">
                <a href="https://getstream.io/chat/flutter/tutorial/?utm_source=Github&utm_medium=Github_Repo_Content_Ad&utm_content=Developer&utm_campaign=Github_Jan2022_FlutterChat&utm_term=bloc"><img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/sponsors/stream.png" width="225"/></a>
            </td>
            <td align="center" style="border: 1px solid black">
                <a href="https://rettelgame.com/"><img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/sponsors/rettel.png" width="225"/></a>
            </td>
        </tr>
    </tbody>
</table>

---

## Overview

<img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/diagrams/bloc_architecture.png" width="500" alt="Bloc Architecture"></img>

The goal of this library is to make it easy to separate _presentation_ from _business logic_, facilitating testability and reusability.

## Documentation

- [Official Documentation](https://bloclibrary.dev)
- [Angular Bloc Package](https://github.com/felangel/bloc/tree/master/packages/angular_bloc/README.md)
- [Bloc Package](https://github.com/felangel/bloc/tree/master/packages/bloc/README.md)
- [Bloc Concurrency Package](https://github.com/felangel/bloc/tree/master/packages/bloc_concurrency/README.md)
- [Bloc Lint Package](https://github.com/felangel/bloc/tree/master/packages/bloc_lint/README.md)
- [Bloc Test Package](https://github.com/felangel/bloc/tree/master/packages/bloc_test/README.md)
- [Bloc Tools Package](https://github.com/felangel/bloc/tree/master/packages/bloc_tools/README.md)
- [Flutter Bloc Package](https://github.com/felangel/bloc/tree/master/packages/flutter_bloc/README.md)
- [Hydrated Bloc Package](https://github.com/felangel/bloc/tree/master/packages/hydrated_bloc/README.md)
- [Replay Bloc Package](https://github.com/felangel/bloc/tree/master/packages/replay_bloc/README.md)

## Migration

- [Migration Guide](https://bloclibrary.dev/migration)

## Examples

<div style="text-align: center">
    <table>
        <tr>
            <td style="text-align: center">
                <a href="https://bloclibrary.dev/tutorials/flutter-counter">
                    <img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/examples/flutter_counter.gif" width="200"/>
                </a>
            </td>            
            <td style="text-align: center">
                <a href="https://bloclibrary.dev/tutorials/flutter-infinite-list">
                    <img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/examples/flutter_infinite_list.gif" width="200"/>
                </a>
            </td>
            <td style="text-align: center">
                <a href="https://bloclibrary.dev/tutorials/flutter-login">
                    <img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/examples/flutter_firebase_login.gif" width="200" />
                </a>
            </td>
        </tr>
        <tr>
            <td style="text-align: center">
                <a href="https://bloclibrary.dev/tutorials/github-search">
                    <img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/examples/flutter_github_search.gif" width="200"/>
                </a>
            </td>
            <td style="text-align: center">
                <a href="https://bloclibrary.dev/tutorials/flutter-weather">
                    <img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/examples/flutter_weather.gif" width="200"/>
                </a>
            </td>
            <td style="text-align: center">
                <a href="https://bloclibrary.dev/tutorials/flutter-todos">
                    <img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/examples/flutter_todos.gif" width="200"/>
                </a>
            </td>
        </tr>
    </table>
</div>

### Dart

- [Counter](https://github.com/felangel/bloc/tree/master/packages/bloc/example) - an example of how to create a `CounterBloc` (pure dart).

### Flutter

- [Counter](https://bloclibrary.dev/tutorials/flutter-counter) - an example of how to create a `CounterBloc` to implement the classic Flutter Counter app.
- [Form Validation](https://github.com/felangel/bloc/tree/master/examples/flutter_form_validation) - an example of how to use the `bloc` and `flutter_bloc` packages to implement form validation.
- [Bloc with Stream](https://github.com/felangel/bloc/tree/master/examples/flutter_bloc_with_stream) - an example of how to hook up a `bloc` to a `Stream` and update the UI in response to data from the `Stream`.
- [Complex List](https://github.com/felangel/bloc/tree/master/examples/flutter_complex_list) - an example of how to manage a list of items and asynchronously delete items one at a time using `bloc` and `flutter_bloc`.
- [Infinite List](https://bloclibrary.dev/tutorials/flutter-infinite-list) - an example of how to use the `bloc` and `flutter_bloc` packages to implement an infinite scrolling list.
- [Login Flow](https://bloclibrary.dev/tutorials/flutter-login) - an example of how to use the `bloc` and `flutter_bloc` packages to implement a Login Flow.
- [Firebase Login](https://bloclibrary.dev/tutorials/flutter-firebase-login) - an example of how to use the `bloc` and `flutter_bloc` packages to implement login via Firebase.
- [Github Search](https://bloclibrary.dev/tutorials/github-search) - an example of how to create a Github Search Application using the `bloc` and `flutter_bloc` packages.
- [Weather](https://bloclibrary.dev/tutorials/flutter-weather) - an example of how to create a Weather Application using the `bloc` and `flutter_bloc` packages. The app uses a `RefreshIndicator` to implement "pull-to-refresh" as well as dynamic theming.
- [Todos](https://bloclibrary.dev/tutorials/flutter-todos) - an example of how to create a Todos Application using the `bloc` and `flutter_bloc` packages.
- [Timer](https://bloclibrary.dev/tutorials/flutter-timer) - an example of how to create a Timer using the `bloc` and `flutter_bloc` packages.
- [Shopping Cart](https://github.com/felangel/bloc/tree/master/examples/flutter_shopping_cart) - an example of how to create a Shopping Cart Application using the `bloc` and `flutter_bloc` packages based on [flutter samples](https://github.com/flutter/samples/tree/master/provider_shopper).
- [Dynamic Form](https://github.com/felangel/bloc/tree/master/examples/flutter_dynamic_form) - an example of how to use the `bloc` and `flutter_bloc` packages to implement a dynamic form which pulls data from a repository.
- [Wizard](https://github.com/felangel/bloc/tree/master/examples/flutter_wizard) - an example of how to build a multi-step wizard using the `bloc` and `flutter_bloc` packages.
- [Bloc Concurrency Visualizer](https://github.com/felangel/bloc/tree/master/examples/bloc_concurrency_visualizer) - an example of visualizing the various `bloc_concurrency` transformers.
- [Fluttersaurus](https://github.com/felangel/fluttersaurus) - an example of how to use the `bloc` and `flutter_bloc` packages to create a thesaurus app -- made for Bytconf Flutter 2020.
- [I/O Photo Booth](https://github.com/flutter/photobooth) - an example of how to use the `bloc` and `flutter_bloc` packages to create a virtual photo booth web app -- made for Google I/O 2021.
- [I/O Pinball](https://github.com/flutter/pinball) - an example of how to use the `bloc` and `flutter_bloc` packages to create a pinball web app -- made for Google I/O 2022.
- [I/O Holobooth](https://github.com/flutter/holobooth) - an example of how to use the `bloc` and `flutter_bloc` packages to create a virtual photobooth experience -- made for Flutter Forward.
- [I/O Flip](https://github.com/flutter/io_flip) - an example of how to use the `bloc`, `flutter_bloc`, and `flame_bloc` packages to create a card game -- made for Google I/O 2023.

### Web

- [Counter](https://github.com/felangel/Bloc/tree/master/examples/angular_counter) - an example of how to use a `CounterBloc` in an AngularDart app.
- [Github Search](https://github.com/felangel/Bloc/tree/master/examples/github_search/angular_github_search) - an example of how to create a Github Search Application using the `bloc` and `angular_bloc` packages.

### Flutter + Web

- [Github Search](https://github.com/felangel/Bloc/tree/master/examples/github_search) - an example of how to create a Github Search Application and share code between Flutter and AngularDart.

## Articles

- [Bloc package](https://medium.com/flutter-community/flutter-bloc-package-295b53e95c5c) - An intro to the bloc package with high level architecture and examples.
- [Login tutorial with flutter_bloc](https://medium.com/flutter-community/flutter-login-tutorial-with-flutter-bloc-ea606ef701ad) - How to create a full login flow using the bloc and flutter_bloc packages.
- [Unit testing with bloc](https://medium.com/@felangelov/unit-testing-with-bloc-b94de9655d86) - How to unit test the blocs created in the flutter login tutorial.
- [Infinite list tutorial with flutter_bloc](https://medium.com/flutter-community/flutter-infinite-list-tutorial-with-flutter-bloc-2fc7a272ec67) - How to create an infinite list using the bloc and flutter_bloc packages.
- [Code sharing with bloc](https://medium.com/flutter-community/code-sharing-with-bloc-b867302c18ef) - How to share code between a mobile application written with Flutter and a web application written with AngularDart.
- [Weather app tutorial with flutter_bloc](https://medium.com/flutter-community/weather-app-with-flutter-bloc-e24a7253340d) - How to build a weather app which supports dynamic theming, pull-to-refresh, and interacting with a REST API using the bloc and flutter_bloc packages.
- [Todos app tutorial with flutter_bloc](https://medium.com/flutter-community/flutter-todos-tutorial-with-flutter-bloc-d9dd833f9df3) - How to build a todos app using the bloc and flutter_bloc packages.
- [Firebase login tutorial with flutter_bloc](https://medium.com/flutter-community/firebase-login-with-flutter-bloc-47455e6047b0) - How to create a fully functional login/sign up flow using the bloc and flutter_bloc packages with Firebase Authentication and Google Sign In.
- [Flutter timer tutorial with flutter_bloc](https://medium.com/flutter-community/flutter-timer-with-flutter-bloc-a464e8332ceb) - How to create a timer app using the bloc and flutter_bloc packages.
- [Firestore todos tutorial with flutter_bloc](https://medium.com/flutter-community/firestore-todos-with-flutter-bloc-7b2d5fadcc80) - How to create a todos app using the bloc and flutter_bloc packages that integrates with cloud firestore.

## Books

- [Flutter Complete Reference](https://fluttercompletereference.com/) - A book about the Dart programming language (version 2.10, with null safety support) and the Flutter framework (version 1.20). It covers the bloc package (version 6.0.3) in all flavors: bloc, flutter_bloc hydrated_bloc, replay_bloc, bloc_test and cubit.

## Extensions

- [IntelliJ](https://plugins.jetbrains.com/plugin/12129-bloc-code-generator) - extends IntelliJ/Android Studio with support for the Bloc library and provides tools for effectively creating Blocs for both Flutter and AngularDart apps.
- [VSCode](https://marketplace.visualstudio.com/items?itemName=FelixAngelov.bloc#overview) - extends VSCode with support for the Bloc library and provides tools for effectively creating Blocs for both Flutter and AngularDart apps.

## Community

Learn more at the following links, which have been contributed by the community.

### Packages

- [Bloc.js](https://github.com/felangel/bloc.js) - A port of the `bloc` state management library from Dart to JavaScript, by [Felix Angelov](https://github.com/felangel).
- [Firebase Auth](https://pub.dev/packages/fb_auth) - A Web, Mobile Firebase Auth Plugin, by [Rody Davis](https://github.com/AppleEducate).
- [Form Bloc](https://pub.dev/packages/form_bloc) - An easy way to create forms with BLoC pattern without writing a lot of boilerplate code, by [Giancarlo](https://github.com/GiancarloCode).
- [Flame Bloc](https://pub.dev/packages/flame_bloc) - Bloc integration for the Flame game engine, by [Flame Engine](https://github.com/flame-engine).

### Video Tutorials

- [Bloc Library: Basics and Beyond 🚀](https://youtu.be/knMvKPKBzGE) - Talk given at [Flutter Europe](https://fluttereurope.dev) about the basics of the bloc library, by [Felix Angelov](https://github.com/felangel).
- [Flutter Bloc Library Tutorial](https://www.youtube.com/watch?v=hTExlt1nJZI) - Introduction to the Bloc Library, by [Reso Coder](https://resocoder.com).
- [Flutter Youtube Search](https://www.youtube.com/watch?v=BJY8nuYUM7M) - How to build a Youtube Search app which interacts with an API using the bloc and flutter_bloc packages, by [Reso Coder](https://resocoder.com).
- [Flutter Bloc - AUTOMATIC LOOKUP - v0.20 (and Up), Updated Tutorial](https://www.youtube.com/watch?v=_vOpPuVfmiU) - Updated Tutorial on the Flutter Bloc Package, by [Reso Coder](https://resocoder.com).
- [Dynamic Theming with flutter_bloc](https://www.youtube.com/watch?v=YYbhkg-W8Mg) - Tutorial on how to use the flutter_bloc package to implement dynamic theming, by [Reso Coder](https://resocoder.com).
- [Persist Bloc State in Flutter](https://www.youtube.com/watch?v=vSOpZd_FFEY) - Tutorial on how to use the hydrated_bloc package to automatically persist app state, by [Reso Coder](https://resocoder.com).
- [State Management Foundation](https://www.youtube.com/watch?v=S2KmxzgsTwk&t=731s) - Introduction to state management using the flutter_bloc package, by [Techie Blossom](https://techieblossom.com).
- [Flutter Football Player Search](https://www.youtube.com/watch?v=S2KmxzgsTwk) - How to build a Football Player Search app which interacts with an API using the bloc and flutter_bloc packages, by [Techie Blossom](https://techieblossom.com).
- [Learning the Flutter Bloc Package](https://www.youtube.com/watch?v=eAiCPl3yk9A&t=1s) - Learning the flutter_bloc package live, by [Robert Brunhage](https://www.youtube.com/channel/UCSLIg5O0JiYO1i2nD4RclaQ)
- [Bloc Test Tutorial](https://www.youtube.com/watch?v=S6jFBiiP0Mc) - Tutorial on how to unit test blocs using the bloc_test package, by [Reso Coder](https://resocoder.com).
- [Bloc - from Zero to Hero](https://www.youtube.com/playlist?list=PLptHs0ZDJKt_T-oNj_6Q98v-tBnVf-S_o) - Playlist which includes everything needed to get started with bloc, by [Flutterly](https://www.youtube.com/channel/UC5PYcSe3to4mtm3SPCUmjvw).
- [Bloc (Full Course, 11+ Hours) - Flutter State Management Course](https://youtu.be/Mn254cnduOY) - 11+ hour video tutorial on Bloc and Flutter Bloc. In this video you will learn how to create fully fledged production-ready apps with Bloc and Firebase as your backend, by [Vandad Nahavandipoor](https://www.youtube.com/channel/UC8NpGP0AOQ0kX9ZRcohiPeQ).

### Written Resources

- [DevonFw Flutter Guide](https://github.com/devonfw-forge/devonfw4flutter) - A guide on building structured & scalable applications with Flutter and BLoC, by [Sebastian Faust](https://github.com/Fasust)
- [Using Google´s Flutter Framework for the Development of a Large-Scale Reference Application](https://epb.bibl.th-koeln.de/frontdoor/index/index/docId/1498) - Scientific paper describing how to build [a large-scale Flutter application](https://github.com/devonfw-forge/devonfw4flutter-mts-app) with BLoC, by [Sebastian Faust](https://github.com/Fasust)

### Extensions

- [Feature Scaffolding for VSCode](https://marketplace.visualstudio.com/items?itemName=KiritchoukC.flutter-clean-architecture) - A VSCode extension inspired by [Reso Coder's](https://resocoder.com) clean architecture tutorials, which helps quickly scaffold features, by [Kiritchouk Clément](https://github.com/KiritchoukC).

## Maintainers

- [Felix Angelov](https://github.com/felangel)


================================================
FILE: analysis_options.yaml
================================================
analyzer:
  exclude:
    - bricks/**

  language:
    strict-casts: true
    strict-inference: true
    strict-raw-types: true

  errors:
    close_sinks: ignore
    missing_required_param: error
    missing_return: error
    record_literal_one_positional_no_trailing_comma: error

formatter:
  page_width: 80
  trailing_commas: preserve

linter:
  rules:
    - always_declare_return_types
    - always_put_required_named_parameters_first
    - always_use_package_imports
    - annotate_overrides
    - annotate_redeclares
    - avoid_bool_literals_in_conditional_expressions
    - avoid_catching_errors
    - avoid_double_and_int_checks
    - avoid_dynamic_calls
    - avoid_empty_else
    - avoid_equals_and_hash_code_on_mutable_classes
    - avoid_escaping_inner_quotes
    - avoid_field_initializers_in_const_classes
    - avoid_final_parameters
    - avoid_function_literals_in_foreach_calls
    - avoid_init_to_null
    - avoid_js_rounded_ints
    - avoid_multiple_declarations_per_line
    - avoid_null_checks_in_equality_operators
    - avoid_positional_boolean_parameters
    - avoid_print
    - avoid_private_typedef_functions
    - avoid_redundant_argument_values
    - avoid_relative_lib_imports
    - avoid_renaming_method_parameters
    - avoid_return_types_on_setters
    - avoid_returning_null_for_void
    - avoid_returning_this
    - avoid_setters_without_getters
    - avoid_shadowing_type_parameters
    - avoid_single_cascade_in_expression_statements
    - avoid_slow_async_io
    - avoid_type_to_string
    - avoid_types_as_parameter_names
    - avoid_unnecessary_containers
    - avoid_unused_constructor_parameters
    - avoid_void_async
    - avoid_web_libraries_in_flutter
    - await_only_futures
    - camel_case_extensions
    - camel_case_types
    - cancel_subscriptions
    - cascade_invocations
    - cast_nullable_to_non_nullable
    - collection_methods_unrelated_type
    - combinators_ordering
    - comment_references
    - conditional_uri_does_not_exist
    - constant_identifier_names
    - control_flow_in_finally
    - curly_braces_in_flow_control_structures
    - dangling_library_doc_comments
    - depend_on_referenced_packages
    - deprecated_consistency
    - deprecated_member_use_from_same_package
    - directives_ordering
    - do_not_use_environment
    - empty_catches
    - empty_constructor_bodies
    - empty_statements
    - eol_at_end_of_file
    - exhaustive_cases
    - file_names
    - flutter_style_todos
    - hash_and_equals
    - implementation_imports
    - implicit_call_tearoffs
    - implicit_reopen
    - invalid_case_patterns
    - join_return_with_assignment
    - leading_newlines_in_multiline_strings
    - library_annotations
    - library_names
    - library_prefixes
    - library_private_types_in_public_api
    - lines_longer_than_80_chars
    - literal_only_boolean_expressions
    - matching_super_parameters
    - missing_code_block_language_in_doc_comment
    - missing_whitespace_between_adjacent_strings
    - no_adjacent_strings_in_list
    - no_default_cases
    - no_duplicate_case_values
    - no_leading_underscores_for_library_prefixes
    - no_leading_underscores_for_local_identifiers
    - no_literal_bool_comparisons
    - no_logic_in_create_state
    - no_runtimeType_toString
    - no_self_assignments
    - no_wildcard_variable_uses
    - non_constant_identifier_names
    - noop_primitive_operations
    - null_check_on_nullable_type_parameter
    - null_closures
    - omit_local_variable_types
    - omit_obvious_local_variable_types
    - one_member_abstracts
    - only_throw_errors
    - overridden_fields
    - package_api_docs
    - package_names
    - package_prefixed_library_names
    - parameter_assignments
    - prefer_adjacent_string_concatenation
    - prefer_asserts_in_initializer_lists
    - prefer_asserts_with_message
    - prefer_collection_literals
    - prefer_conditional_assignment
    - prefer_const_constructors
    - prefer_const_constructors_in_immutables
    - prefer_const_declarations
    - prefer_const_literals_to_create_immutables
    - prefer_constructors_over_static_methods
    - prefer_contains
    - prefer_final_fields
    - prefer_final_in_for_each
    - prefer_final_locals
    - prefer_for_elements_to_map_fromIterable
    - prefer_foreach
    - prefer_function_declarations_over_variables
    - prefer_generic_function_type_aliases
    - prefer_if_elements_to_conditional_expressions
    - prefer_if_null_operators
    - prefer_initializing_formals
    - prefer_inlined_adds
    - prefer_int_literals
    - prefer_interpolation_to_compose_strings
    - prefer_is_empty
    - prefer_is_not_empty
    - prefer_is_not_operator
    - prefer_iterable_whereType
    - prefer_mixin
    - prefer_null_aware_method_calls
    - prefer_null_aware_operators
    - prefer_single_quotes
    - prefer_spread_collections
    - prefer_typing_uninitialized_variables
    - prefer_void_to_null
    - provide_deprecation_message
    - public_member_api_docs
    - recursive_getters
    - require_trailing_commas
    - secure_pubspec_urls
    - sized_box_for_whitespace
    - sized_box_shrink_expand
    - slash_for_doc_comments
    - sort_child_properties_last
    - sort_constructors_first
    - sort_pub_dependencies
    - sort_unnamed_constructors_first
    - strict_top_level_inference
    - switch_on_type
    - test_types_in_equals
    - throw_in_finally
    - tighten_type_of_initializing_formals
    - type_annotate_public_apis
    - type_init_formals
    - type_literal_in_constant_pattern
    - unawaited_futures
    - unnecessary_await_in_return
    - unnecessary_brace_in_string_interps
    - unnecessary_breaks
    - unnecessary_const
    - unnecessary_constructor_name
    - unnecessary_getters_setters
    - unnecessary_ignore
    - unnecessary_lambdas
    - unnecessary_late
    - unnecessary_library_directive
    - unnecessary_new
    - unnecessary_null_aware_assignments
    - unnecessary_null_aware_operator_on_extension_on_nullable
    - unnecessary_null_checks
    - unnecessary_null_in_if_null_operators
    - unnecessary_nullable_for_final_variable_declarations
    - unnecessary_overrides
    - unnecessary_parenthesis
    - unnecessary_raw_strings
    - unnecessary_statements
    - unnecessary_string_escapes
    - unnecessary_string_interpolations
    - unnecessary_this
    - unnecessary_to_list_in_spreads
    - unnecessary_unawaited
    - unnecessary_underscores
    - unreachable_from_main
    - unrelated_type_equality_checks
    - unsafe_html
    - use_build_context_synchronously
    - use_colored_box
    - use_decorated_box
    - use_enums
    - use_full_hex_values_for_flutter_colors
    - use_function_type_syntax_for_parameters
    - use_if_null_to_convert_nulls_to_bools
    - use_is_even_rather_than_modulo
    - use_key_in_widget_constructors
    - use_late_for_private_fields_and_variables
    - use_named_constants
    - use_null_aware_elements
    - use_raw_strings
    - use_rethrow_when_possible
    - use_setters_to_change_properties
    - use_string_buffers
    - use_string_in_part_of_directives
    - use_super_parameters
    - use_test_throws_matchers
    - use_to_and_as_if_applicable
    - use_truncating_division
    - valid_regexps
    - void_checks


================================================
FILE: bricks/README.md
================================================
# Bloc Bricks 🧱

[Mason](https://github.com/felangel/mason) support for the [Bloc Library](https://bloclibrary.dev). A collection of bricks for effectively working with the bloc state management library.

## Installation

Ensure you have the [mason_cli](https://github.com/felangel/mason/tree/master/packages/mason_cli) installed. Bricks can be installed from [brickhub.dev](https://brickhub.dev).

```sh
mason add <BRICK>
```

## Bricks

| Brick                  | Description                              |
| ---------------------- | ---------------------------------------- |
| `bloc`                 | Generate a new Bloc                      |
| `cubit`                | Generate a new Cubit                     |
| `hydrated_bloc`        | Generate a new HydratedBloc              |
| `hydrated_cubit`       | Generate a new HydratedCubit             |
| `replay_bloc`          | Generate a new ReplayBloc                |
| `replay_cubit`         | Generate a new ReplayCubit               |
| `flutter_bloc_feature` | Generate a new Flutter feature with bloc |


================================================
FILE: bricks/bloc/CHANGELOG.md
================================================
# 0.4.0

- chore(deps): upgrade to `mason ^0.1.0`
- chore(deps): upgrade hooks to `dart ^3.5.4`

# 0.3.1

- chore: update copyright year
- chore: update logo image refs

# 0.3.0

- feat: add support for `sealed` events using Dart 3

# 0.2.0

- feat: add support for `equatable`
- feat: add support for `freezed`

# 0.1.3+2

- docs: use dark logo variant

# 0.1.3+1

- docs: adjust logo size in README

# 0.1.3

- docs: add badges to README

# 0.1.2

- docs: minor README update

# 0.1.1

- refactor: upgrade to shorthand lambda syntax (`mason >= 0.1.0-dev.15`)

# 0.1.0

- feat: initial release with support for basic bloc generation


================================================
FILE: bricks/bloc/LICENSE
================================================
MIT License

Copyright (c) 2026 Felix Angelov

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: bricks/bloc/README.md
================================================
<p align="center">
<img style="height:100px" src="https://raw.githubusercontent.com/felangel/bloc/master/assets/logos/bloc_dark.png" alt="Bloc" />
</p>

<p align="center">
<a href="https://github.com/felangel/bloc/actions"><img src="https://github.com/felangel/bloc/actions/workflows/main.yaml/badge.svg" alt="build"></a>
<a href="https://codecov.io/gh/felangel/bloc"><img src="https://codecov.io/gh/felangel/Bloc/branch/master/graph/badge.svg" alt="codecov"></a>
<a href="https://github.com/felangel/bloc"><img src="https://img.shields.io/github/stars/felangel/bloc.svg?style=flat&logo=github&colorB=deeppink&label=stars" alt="Star on Github"></a>
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-purple.svg" alt="License: MIT"></a>
<a href="https://discord.gg/bloc"><img src="https://img.shields.io/discord/649708778631200778.svg?logo=discord&color=blue" alt="Discord"></a>
<a href="https://github.com/felangel/bloc"><img src="https://tinyurl.com/bloc-library" alt="Bloc Library"></a>
<a href="https://github.com/felangel/mason"><img src="https://img.shields.io/endpoint?url=https%3A%2F%2Ftinyurl.com%2Fmason-badge" alt="Powered by Mason"></a>
</p>

Generate a new Bloc in [Dart][1]. Built for the [bloc state management library][2].

## Usage 🚀

```sh
mason make bloc --name counter --style basic
```

## Variables ✨

| Variable | Description                 | Default                             | Type     |
| -------- | --------------------------- | ----------------------------------- | -------- |
| `name`   | The name of the bloc class  | `counter`                           | `string` |
| `style`  | The style of bloc generated | `basic (basic, equatable, freezed)` | `enum`   |

## Output 📦

```sh
├── counter_bloc.dart
├── counter_event.dart
└── counter_state.dart
```

[1]: https://dart.dev
[2]: https://github.com/felangel/bloc


================================================
FILE: bricks/bloc/__brick__/{{name.snakeCase()}}_bloc.dart
================================================
{{#use_freezed}}{{> freezed_bloc }}{{/use_freezed}}{{#use_equatable}}{{> equatable_bloc }}{{/use_equatable}}{{#use_basic}}{{> basic_bloc }}{{/use_basic}}

================================================
FILE: bricks/bloc/__brick__/{{name.snakeCase()}}_event.dart
================================================
{{#use_freezed}}{{> freezed_event }}{{/use_freezed}}{{#use_equatable}}{{> equatable_event }}{{/use_equatable}}{{#use_basic}}{{> basic_event }}{{/use_basic}}

================================================
FILE: bricks/bloc/__brick__/{{name.snakeCase()}}_state.dart
================================================
{{#use_freezed}}{{> freezed_state }}{{/use_freezed}}{{#use_equatable}}{{> equatable_state }}{{/use_equatable}}{{#use_basic}}{{> basic_state }}{{/use_basic}}

================================================
FILE: bricks/bloc/__brick__/{{~ basic_bloc }}
================================================
import 'package:bloc/bloc.dart';

part '{{name.snakeCase()}}_event.dart';
part '{{name.snakeCase()}}_state.dart';

class {{name.pascalCase()}}Bloc extends Bloc<{{name.pascalCase()}}Event, {{name.pascalCase()}}State> {
  {{name.pascalCase()}}Bloc() : super(const {{name.pascalCase()}}State()) {
    on<{{name.pascalCase()}}Event>((event, emit) {
      // TODO: implement event handler
    });
  }
}


================================================
FILE: bricks/bloc/__brick__/{{~ basic_event }}
================================================
part of '{{name.snakeCase()}}_bloc.dart';

sealed class {{name.pascalCase()}}Event {
  const {{name.pascalCase()}}Event();
}


================================================
FILE: bricks/bloc/__brick__/{{~ basic_state }}
================================================
part of '{{name.snakeCase()}}_bloc.dart';

class {{name.pascalCase()}}State {
  const {{name.pascalCase()}}State();
}


================================================
FILE: bricks/bloc/__brick__/{{~ equatable_bloc }}
================================================
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';

part '{{name.snakeCase()}}_event.dart';
part '{{name.snakeCase()}}_state.dart';

class {{name.pascalCase()}}Bloc extends Bloc<{{name.pascalCase()}}Event, {{name.pascalCase()}}State> {
  {{name.pascalCase()}}Bloc() : super(const {{name.pascalCase()}}State()) {
    on<{{name.pascalCase()}}Event>((event, emit) {
      // TODO: implement event handler
    });
  }
}


================================================
FILE: bricks/bloc/__brick__/{{~ equatable_event }}
================================================
part of '{{name.snakeCase()}}_bloc.dart';

sealed class {{name.pascalCase()}}Event extends Equatable {
  const {{name.pascalCase()}}Event();

  @override
  List<Object> get props => [];
}


================================================
FILE: bricks/bloc/__brick__/{{~ equatable_state }}
================================================
part of '{{name.snakeCase()}}_bloc.dart';

class {{name.pascalCase()}}State extends Equatable {
  const {{name.pascalCase()}}State();

  @override
  List<Object> get props => [];
}


================================================
FILE: bricks/bloc/__brick__/{{~ freezed_bloc }}
================================================
import 'package:bloc/bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';

part '{{name.snakeCase()}}_event.dart';
part '{{name.snakeCase()}}_state.dart';
part '{{name.snakeCase()}}_bloc.freezed.dart';

class {{name.pascalCase()}}Bloc extends Bloc<{{name.pascalCase()}}Event, {{name.pascalCase()}}State> {
  {{name.pascalCase()}}Bloc() : super(const {{name.pascalCase()}}State.initial()) {
    on<{{name.pascalCase()}}Event>((event, emit) {
      // TODO: implement event handler
    });
  }
}


================================================
FILE: bricks/bloc/__brick__/{{~ freezed_event }}
================================================
part of '{{name.snakeCase()}}_bloc.dart';

@freezed
class {{name.pascalCase()}}Event with _${{name.pascalCase()}}Event {
  const factory {{name.pascalCase()}}Event.started() = _Started;
}


================================================
FILE: bricks/bloc/__brick__/{{~ freezed_state }}
================================================
part of '{{name.snakeCase()}}_bloc.dart';

@freezed
class {{name.pascalCase()}}State with _${{name.pascalCase()}}State {
  const factory {{name.pascalCase()}}State.initial() = _Initial;
}


================================================
FILE: bricks/bloc/brick.yaml
================================================
name: bloc
description: Generate a new Bloc in Dart. Built for the bloc state management library.
version: 0.4.0
repository: https://github.com/felangel/bloc/tree/master/bricks/bloc

environment:
  mason: ^0.1.0

vars:
  name:
    type: string
    description: The name of the bloc class.
    default: counter
    prompt: What is the bloc name?
  style:
    type: enum
    description: The style of bloc generated.
    default: basic
    prompt: What is the bloc style?
    values:
      - basic
      - equatable
      - freezed


================================================
FILE: bricks/bloc/hooks/pre_gen.dart
================================================
import 'package:mason/mason.dart';

Future<void> run(HookContext context) async {
  final style = context.vars['style'];
  context.vars = {
    ...context.vars,
    'use_basic': style == 'basic',
    'use_equatable': style == 'equatable',
    'use_freezed': style == 'freezed',
  };
}


================================================
FILE: bricks/bloc/hooks/pubspec.yaml
================================================
name: bloc_hooks

environment:
  sdk: ^3.10.0

dependencies:
  mason: ^0.1.0


================================================
FILE: bricks/cubit/CHANGELOG.md
================================================
# 0.3.0

- chore(deps): upgrade to `mason ^0.1.0`
- chore(deps): upgrade hooks to `dart ^3.5.4`

# 0.2.1

- chore: update copyright year
- chore: update logo image refs

# 0.2.0

- feat: add support for `equatable`
- feat: add support for `freezed`

# 0.1.3

- docs: add badges to README
- docs: use dark logo variant

# 0.1.2

- docs: minor README update

# 0.1.1

- refactor: upgrade to shorthand lambda syntax (`mason >= 0.1.0-dev.15`)

# 0.1.0

- feat: initial release with support for basic cubit generation


================================================
FILE: bricks/cubit/LICENSE
================================================
MIT License

Copyright (c) 2026 Felix Angelov

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: bricks/cubit/README.md
================================================
<p align="center">
<img style="height:100px" src="https://raw.githubusercontent.com/felangel/bloc/master/assets/logos/cubit_dark.png" alt="Cubit" />
</p>

<p align="center">
<a href="https://github.com/felangel/bloc/actions"><img src="https://github.com/felangel/bloc/actions/workflows/main.yaml/badge.svg" alt="build"></a>
<a href="https://codecov.io/gh/felangel/bloc"><img src="https://codecov.io/gh/felangel/Bloc/branch/master/graph/badge.svg" alt="codecov"></a>
<a href="https://github.com/felangel/bloc"><img src="https://img.shields.io/github/stars/felangel/bloc.svg?style=flat&logo=github&colorB=deeppink&label=stars" alt="Star on Github"></a>
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-purple.svg" alt="License: MIT"></a>
<a href="https://discord.gg/bloc"><img src="https://img.shields.io/discord/649708778631200778.svg?logo=discord&color=blue" alt="Discord"></a>
<a href="https://github.com/felangel/bloc"><img src="https://tinyurl.com/bloc-library" alt="Bloc Library"></a>
<a href="https://github.com/felangel/mason"><img src="https://img.shields.io/endpoint?url=https%3A%2F%2Ftinyurl.com%2Fmason-badge" alt="Powered by Mason"></a>
</p>

Generate a new Cubit in [Dart][1]. Built for the [bloc state management library][2].

## Usage 🚀

```sh
mason make cubit --name counter --style basic
```

## Variables ✨

| Variable | Description                  | Default                             | Type     |
| -------- | ---------------------------- | ----------------------------------- | -------- |
| `name`   | The name of the cubit class  | `counter`                           | `string` |
| `style`  | The style of cubit generated | `basic (basic, equatable, freezed)` | `enum`   |

## Output 📦

```sh
├── counter_cubit.dart
└── counter_state.dart
```

[1]: https://dart.dev
[2]: https://github.com/felangel/bloc


================================================
FILE: bricks/cubit/__brick__/{{name.snakeCase()}}_cubit.dart
================================================
{{#use_freezed}}{{> freezed_cubit }}{{/use_freezed}}{{#use_equatable}}{{> equatable_cubit }}{{/use_equatable}}{{#use_basic}}{{> basic_cubit }}{{/use_basic}}

================================================
FILE: bricks/cubit/__brick__/{{name.snakeCase()}}_state.dart
================================================
{{#use_freezed}}{{> freezed_state }}{{/use_freezed}}{{#use_equatable}}{{> equatable_state }}{{/use_equatable}}{{#use_basic}}{{> basic_state }}{{/use_basic}}

================================================
FILE: bricks/cubit/__brick__/{{~ basic_cubit }}
================================================
import 'package:bloc/bloc.dart';

part '{{name.snakeCase()}}_state.dart';

class {{name.pascalCase()}}Cubit extends Cubit<{{name.pascalCase()}}State> {
  {{name.pascalCase()}}Cubit() : super(const {{name.pascalCase()}}State());
}


================================================
FILE: bricks/cubit/__brick__/{{~ basic_state }}
================================================
part of '{{name.snakeCase()}}_cubit.dart';

class {{name.pascalCase()}}State {
  const {{name.pascalCase()}}State();
}


================================================
FILE: bricks/cubit/__brick__/{{~ equatable_cubit }}
================================================
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';

part '{{name.snakeCase()}}_state.dart';

class {{name.pascalCase()}}Cubit extends Cubit<{{name.pascalCase()}}State> {
  {{name.pascalCase()}}Cubit() : super(const {{name.pascalCase()}}State());
}


================================================
FILE: bricks/cubit/__brick__/{{~ equatable_state }}
================================================
part of '{{name.snakeCase()}}_cubit.dart';

class {{name.pascalCase()}}State extends Equatable {
  const {{name.pascalCase()}}State();

  @override
  List<Object> get props => [];
}


================================================
FILE: bricks/cubit/__brick__/{{~ freezed_cubit }}
================================================
import 'package:bloc/bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';

part '{{name.snakeCase()}}_state.dart';
part '{{name.snakeCase()}}_cubit.freezed.dart';

class {{name.pascalCase()}}Cubit extends Cubit<{{name.pascalCase()}}State> {
  {{name.pascalCase()}}Cubit() : super(const {{name.pascalCase()}}State.initial());
}


================================================
FILE: bricks/cubit/__brick__/{{~ freezed_state }}
================================================
part of '{{name.snakeCase()}}_cubit.dart';

@freezed
class {{name.pascalCase()}}State with _${{name.pascalCase()}}State {
  const factory {{name.pascalCase()}}State.initial() = _Initial;
}


================================================
FILE: bricks/cubit/brick.yaml
================================================
name: cubit
description: Generate a new Cubit in Dart. Built for the bloc state management library.
version: 0.3.0
repository: https://github.com/felangel/bloc/tree/master/bricks/cubit

environment:
  mason: ^0.1.0

vars:
  name:
    type: string
    description: The name of the cubit class.
    default: counter
    prompt: Please enter the cubit name.
  style:
    type: enum
    description: The style of cubit generated.
    default: basic
    prompt: What is the cubit style?
    values:
      - basic
      - equatable
      - freezed


================================================
FILE: bricks/cubit/hooks/pre_gen.dart
================================================
import 'package:mason/mason.dart';

Future<void> run(HookContext context) async {
  final style = context.vars['style'];
  context.vars = {
    ...context.vars,
    'use_basic': style == 'basic',
    'use_equatable': style == 'equatable',
    'use_freezed': style == 'freezed',
  };
}


================================================
FILE: bricks/cubit/hooks/pubspec.yaml
================================================
name: cubit_hooks

environment:
  sdk: ^3.10.0

dependencies:
  mason: ^0.1.0


================================================
FILE: bricks/flutter_bloc_feature/CHANGELOG.md
================================================
# 0.4.0

- chore(deps): upgrade to `mason ^0.1.0`
- chore(deps): upgrade hooks to `dart ^3.5.4`

# 0.3.2

- deps: upgrade to mason v0.1.0-dev.57

# 0.3.1

- chore: update copyright year
- chore: update logo image refs

# 0.3.0

- feat: upgrade to Dart 3.0
  - use `sealed` classes for bloc events

# 0.2.1

- fix: upgrade to mason v0.1.0-dev.40
  - deps: remove dependency on `package:recase`

# 0.2.0

- feat: add support for `equatable`
- feat: add support for `freezed`

# 0.1.0+1

- feat: initial release 🎉


================================================
FILE: bricks/flutter_bloc_feature/LICENSE
================================================
MIT License

Copyright (c) 2026 Felix Angelov

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: bricks/flutter_bloc_feature/README.md
================================================
<p align="center">
<img style="height:100px" src="https://raw.githubusercontent.com/felangel/bloc/master/assets/logos/bloc_dark.png" alt="Bloc" />
</p>

<p align="center">
<a href="https://github.com/felangel/bloc/actions"><img src="https://github.com/felangel/bloc/actions/workflows/main.yaml/badge.svg" alt="build"></a>
<a href="https://codecov.io/gh/felangel/bloc"><img src="https://codecov.io/gh/felangel/Bloc/branch/master/graph/badge.svg" alt="codecov"></a>
<a href="https://github.com/felangel/bloc"><img src="https://img.shields.io/github/stars/felangel/bloc.svg?style=flat&logo=github&colorB=deeppink&label=stars" alt="Star on Github"></a>
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-purple.svg" alt="License: MIT"></a>
<a href="https://discord.gg/bloc"><img src="https://img.shields.io/discord/649708778631200778.svg?logo=discord&color=blue" alt="Discord"></a>
<a href="https://github.com/felangel/bloc"><img src="https://tinyurl.com/bloc-library" alt="Bloc Library"></a>
<a href="https://github.com/felangel/mason"><img src="https://img.shields.io/endpoint?url=https%3A%2F%2Ftinyurl.com%2Fmason-badge" alt="Powered by Mason"></a>
</p>

Generate a new Flutter feature with bloc. Built for the [bloc state management library][1].

## Usage 🚀

```sh
mason make flutter_bloc_feature --name counter --type bloc --style basic
```

## Variables ✨

| Variable | Description                 | Default                             | Type     |
| -------- | --------------------------- | ----------------------------------- | -------- |
| `name`   | The name of the feature     | `counter`                           | `string` |
| `type`   | The type of the bloc        | `bloc`                              | `enum`   |
| `style`  | The style of bloc generated | `basic (basic, equatable, freezed)` | `enum`   |

## Output 📦

```sh
── counter
│   ├── bloc
│   │   ├── counter_bloc.dart
│   │   ├── counter_event.dart
│   │   └── counter_state.dart
│   ├── counter.dart
│   └── view
│       ├── counter_page.dart
│       └── view.dart
```

[1]: https://github.com/felangel/bloc


================================================
FILE: bricks/flutter_bloc_feature/__brick__/{{name.snakeCase()}}/view/view.dart
================================================
export './{{name.snakeCase()}}_page.dart';


================================================
FILE: bricks/flutter_bloc_feature/__brick__/{{name.snakeCase()}}/view/{{name.snakeCase()}}_page.dart
================================================
import 'package:flutter/widgets.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

import '../{{name.snakeCase()}}.dart';

class {{name.pascalCase()}}Page extends StatelessWidget {
  const {{name.pascalCase()}}Page({super.key});

  @override
  Widget build(BuildContext context) {
{{#is_bloc}}{{> bloc_provider }}{{/is_bloc}}{{^is_bloc}}{{> cubit_bloc_provider }}{{/is_bloc}}
  }
}

class {{name.pascalCase()}}View extends StatelessWidget {
  const {{name.pascalCase()}}View({super.key});

  @override
  Widget build(BuildContext context) {
{{#is_bloc}}{{> bloc_builder }}{{/is_bloc}}{{^is_bloc}}{{> cubit_bloc_builder }}{{/is_bloc}}
  }
}


================================================
FILE: bricks/flutter_bloc_feature/__brick__/{{name.snakeCase()}}/{{name.snakeCase()}}.dart
================================================
export '{{{bloc_export}}}';
export './view/view.dart';


================================================
FILE: bricks/flutter_bloc_feature/__brick__/{{~ bloc_builder }}
================================================
    return BlocBuilder<{{name.pascalCase()}}Bloc, {{name.pascalCase()}}State>(
      builder: (context, state) {
        // TODO: return correct widget based on the state.
        return const SizedBox();
      },
    );

================================================
FILE: bricks/flutter_bloc_feature/__brick__/{{~ bloc_provider }}
================================================
    return BlocProvider(
      create: (_) => {{name.pascalCase()}}Bloc(),
      child: const {{name.pascalCase()}}View(),
    );

================================================
FILE: bricks/flutter_bloc_feature/__brick__/{{~ cubit_bloc_builder }}
================================================
    return BlocBuilder<{{name.pascalCase()}}Cubit, {{name.pascalCase()}}State>(
      builder: (context, state) {
        // TODO: return correct widget based on the state.
        return const SizedBox();
      },
    );

================================================
FILE: bricks/flutter_bloc_feature/__brick__/{{~ cubit_bloc_provider }}
================================================
    return BlocProvider(
      create: (_) => {{name.pascalCase()}}Cubit(),
      child: const {{name.pascalCase()}}View(),
    );

================================================
FILE: bricks/flutter_bloc_feature/brick.yaml
================================================
name: flutter_bloc_feature
description: Generate a new Flutter feature with bloc. Built for the bloc state management library.
repository: https://github.com/felangel/bloc/tree/master/bricks/flutter_bloc_feature
version: 0.4.0

environment:
  mason: ^0.1.0

vars:
  name:
    type: string
    description: The name of the feature
    default: counter
    prompt: What is your feature called?
  type:
    type: enum
    description: The type of bloc used.
    default: bloc
    prompt: What type of bloc do you want to use?
    values:
      - bloc
      - cubit
      - hydrated_bloc
      - hydrated_cubit
      - replay_bloc
      - replay_cubit
  style:
    type: enum
    description: The style of bloc generated.
    default: basic
    prompt: What is the bloc style?
    values:
      - basic
      - equatable
      - freezed


================================================
FILE: bricks/flutter_bloc_feature/hooks/.gitignore
================================================
.dart_tool
.packages
pubspec.lock


================================================
FILE: bricks/flutter_bloc_feature/hooks/post_gen.dart
================================================
import 'dart:io';

import 'package:mason/mason.dart';

Future<void> run(HookContext context) async {
  await _runDartFormat(context);
  await _runDartFix(context);
}

Future<void> _runDartFormat(HookContext context) async {
  final formatProgress = context.logger.progress('Running "dart format ."');
  await Process.run('dart', ['format', '.']);
  formatProgress.complete();
}

Future<void> _runDartFix(HookContext context) async {
  final formatProgress = context.logger.progress('Running "dart fix --apply"');
  await Process.run('dart', ['fix', '--apply']);
  formatProgress.complete();
}


================================================
FILE: bricks/flutter_bloc_feature/hooks/pre_gen.dart
================================================
// ignore_for_file: constant_identifier_names

import 'dart:io';

import 'package:mason/mason.dart';
import 'package:path/path.dart' as path;

enum BlocType {
  bloc,
  cubit,
  hydrated_bloc,
  hydrated_cubit,
  replay_bloc,
  replay_cubit,
}

final brickVersions = {
  BlocType.bloc: '^0.4.0',
  BlocType.cubit: '^0.3.0',
  BlocType.hydrated_bloc: '^0.4.0',
  BlocType.hydrated_cubit: '^0.3.0',
  BlocType.replay_bloc: '^0.3.0',
  BlocType.replay_cubit: '^0.3.0',
};

Future<void> run(HookContext context) async {
  final blocType = _blocTypeFromContext(context);
  final progress = context.logger.progress('Making brick ${blocType.name}');
  final name = context.vars['name'] as String;
  final style = context.vars['style'] as String;
  final brick = Brick.version(
    name: blocType.name,
    version: brickVersions[blocType]!,
  );
  final generator = await MasonGenerator.fromBrick(brick);
  final blocDirectoryName = blocType.toDirectoryName();
  final directory = Directory(
    path.join(Directory.current.path, name.snakeCase, blocDirectoryName),
  );
  final target = DirectoryGeneratorTarget(directory);
  var vars = <String, dynamic>{'name': name, 'style': style};
  await generator.hooks.preGen(vars: vars, onVarsChanged: (v) => vars = v);
  final files = await generator.generate(
    target,
    vars: vars,
    logger: context.logger,
    fileConflictResolution: FileConflictResolution.overwrite,
  );
  await generator.hooks.postGen(vars: vars);
  final blocExport =
      './$blocDirectoryName/${name.snakeCase}_$blocDirectoryName.dart';
  progress.complete('Made brick ${blocType.name}');
  context.logger.logFilesGenerated(files.length);
  context.vars = {
    ...context.vars,
    'bloc_export': blocExport,
    'is_bloc': blocDirectoryName == 'bloc',
  };
}

BlocType _blocTypeFromContext(HookContext context) {
  final type = context.vars['type'] as String;
  switch (type) {
    case 'cubit':
      return BlocType.cubit;
    case 'hydrated_bloc':
      return BlocType.hydrated_bloc;
    case 'hydrated_cubit':
      return BlocType.hydrated_cubit;
    case 'replay_bloc':
      return BlocType.replay_bloc;
    case 'replay_cubit':
      return BlocType.replay_cubit;
    case 'bloc':
    default:
      return BlocType.bloc;
  }
}

extension on BlocType {
  String toDirectoryName() {
    switch (this) {
      case BlocType.bloc:
      case BlocType.hydrated_bloc:
      case BlocType.replay_bloc:
        return 'bloc';
      case BlocType.cubit:
      case BlocType.hydrated_cubit:
      case BlocType.replay_cubit:
        return 'cubit';
    }
  }
}

extension on Logger {
  void logFilesGenerated(int fileCount) {
    if (fileCount == 1) {
      this
        ..info(
          '${lightGreen.wrap('\u2713')} '
          'Generated $fileCount file:',
        )
        ..flush((message) => info(darkGray.wrap(message)));
    } else {
      this
        ..info(
          '${lightGreen.wrap('\u2713')} '
          'Generated $fileCount file(s):',
        )
        ..flush((message) => info(darkGray.wrap(message)));
    }
  }
}


================================================
FILE: bricks/flutter_bloc_feature/hooks/pubspec.yaml
================================================
name: flutter_bloc_feature_hooks

environment:
  sdk: ^3.10.0

dependencies:
  mason: ^0.1.0
  path: ^1.8.2


================================================
FILE: bricks/hydrated_bloc/CHANGELOG.md
================================================
# 0.4.0

- chore(deps): upgrade to `mason ^0.1.0`
- chore(deps): upgrade hooks to `dart ^3.5.4`

# 0.3.1

- chore: update copyright year
- chore: update logo image refs

# 0.3.0

- feat: add support for `sealed` events using Dart 3

# 0.2.0

- feat: add support for `equatable`
- feat: add support for `freezed`

# 0.1.2

- docs: add badges to README
- docs: use dark logo variant

# 0.1.1

- docs: minor README update

# 0.1.0

- feat: initial release with support for basic hydrated bloc generation


================================================
FILE: bricks/hydrated_bloc/LICENSE
================================================
MIT License

Copyright (c) 2026 Felix Angelov

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: bricks/hydrated_bloc/README.md
================================================
<p align="center">
<img style="height:100px" src="https://raw.githubusercontent.com/felangel/bloc/master/assets/logos/hydrated_bloc_dark.png" alt="Bloc" />
</p>

<p align="center">
<a href="https://github.com/felangel/bloc/actions"><img src="https://github.com/felangel/bloc/actions/workflows/main.yaml/badge.svg" alt="build"></a>
<a href="https://codecov.io/gh/felangel/bloc"><img src="https://codecov.io/gh/felangel/Bloc/branch/master/graph/badge.svg" alt="codecov"></a>
<a href="https://github.com/felangel/bloc"><img src="https://img.shields.io/github/stars/felangel/bloc.svg?style=flat&logo=github&colorB=deeppink&label=stars" alt="Star on Github"></a>
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-purple.svg" alt="License: MIT"></a>
<a href="https://discord.gg/bloc"><img src="https://img.shields.io/discord/649708778631200778.svg?logo=discord&color=blue" alt="Discord"></a>
<a href="https://github.com/felangel/bloc"><img src="https://tinyurl.com/bloc-library" alt="Bloc Library"></a>
<a href="https://github.com/felangel/mason"><img src="https://img.shields.io/endpoint?url=https%3A%2F%2Ftinyurl.com%2Fmason-badge" alt="Powered by Mason"></a>
</p>

Generate a new HydratedBloc in [Dart][1]. Built for the [bloc state management library][2].

## Usage 🚀

```sh
mason make hydrated_bloc --name counter --style basic
```

## Variables ✨

| Variable | Description                 | Default                             | Type     |
| -------- | --------------------------- | ----------------------------------- | -------- |
| `name`   | The name of the bloc class  | `counter`                           | `string` |
| `style`  | The style of bloc generated | `basic (basic, equatable, freezed)` | `enum`   |

## Output 📦

```sh
├── counter_bloc.dart
├── counter_event.dart
└── counter_state.dart
```

[1]: https://dart.dev
[2]: https://github.com/felangel/bloc


================================================
FILE: bricks/hydrated_bloc/__brick__/{{name.snakeCase()}}_bloc.dart
================================================
{{#use_freezed}}{{> freezed_bloc }}{{/use_freezed}}{{#use_equatable}}{{> equatable_bloc }}{{/use_equatable}}{{#use_basic}}{{> basic_bloc }}{{/use_basic}}

================================================
FILE: bricks/hydrated_bloc/__brick__/{{name.snakeCase()}}_event.dart
================================================
{{#use_freezed}}{{> freezed_event }}{{/use_freezed}}{{#use_equatable}}{{> equatable_event }}{{/use_equatable}}{{#use_basic}}{{> basic_event }}{{/use_basic}}

================================================
FILE: bricks/hydrated_bloc/__brick__/{{name.snakeCase()}}_state.dart
================================================
{{#use_freezed}}{{> freezed_state }}{{/use_freezed}}{{#use_equatable}}{{> equatable_state }}{{/use_equatable}}{{#use_basic}}{{> basic_state }}{{/use_basic}}

================================================
FILE: bricks/hydrated_bloc/__brick__/{{~ basic_bloc }}
================================================
import 'package:hydrated_bloc/hydrated_bloc.dart';

part '{{name.snakeCase()}}_event.dart';
part '{{name.snakeCase()}}_state.dart';

class {{name.pascalCase()}}Bloc extends HydratedBloc<{{name.pascalCase()}}Event, {{name.pascalCase()}}State> {
  {{name.pascalCase()}}Bloc() : super(const {{name.pascalCase()}}State()) {
    on<{{name.pascalCase()}}Event>((event, emit) {
      // TODO: implement event handler
    });
  }

  @override
  Map<String, dynamic> toJson({{name.pascalCase()}}State state) {
    // TODO: implement toJson
  }

  @override
  {{name.pascalCase()}}State fromJson(Map<String, dynamic> json) {
    // TODO: implement fromJson
  }
}


================================================
FILE: bricks/hydrated_bloc/__brick__/{{~ basic_event }}
================================================
part of '{{name.snakeCase()}}_bloc.dart';

sealed class {{name.pascalCase()}}Event {
  const {{name.pascalCase()}}Event();
}


================================================
FILE: bricks/hydrated_bloc/__brick__/{{~ basic_state }}
================================================
part of '{{name.snakeCase()}}_bloc.dart';

class {{name.pascalCase()}}State {
  const {{name.pascalCase()}}State();
}


================================================
FILE: bricks/hydrated_bloc/__brick__/{{~ equatable_bloc }}
================================================
import 'package:equatable/equatable.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';

part '{{name.snakeCase()}}_event.dart';
part '{{name.snakeCase()}}_state.dart';

class {{name.pascalCase()}}Bloc extends HydratedBloc<{{name.pascalCase()}}Event, {{name.pascalCase()}}State> {
  {{name.pascalCase()}}Bloc() : super(const {{name.pascalCase()}}State()) {
    on<{{name.pascalCase()}}Event>((event, emit) {
      // TODO: implement event handler
    });
  }

  @override
  Map<String, dynamic> toJson({{name.pascalCase()}}State state) {
    // TODO: implement toJson
  }

  @override
  {{name.pascalCase()}}State fromJson(Map<String, dynamic> json) {
    // TODO: implement fromJson
  }
}


================================================
FILE: bricks/hydrated_bloc/__brick__/{{~ equatable_event }}
================================================
part of '{{name.snakeCase()}}_bloc.dart';

sealed class {{name.pascalCase()}}Event extends Equatable {
  const {{name.pascalCase()}}Event();

  @override
  List<Object> get props => [];
}


================================================
FILE: bricks/hydrated_bloc/__brick__/{{~ equatable_state }}
================================================
part of '{{name.snakeCase()}}_bloc.dart';

class {{name.pascalCase()}}State extends Equatable {
  const {{name.pascalCase()}}State();

  @override
  List<Object> get props => [];
}


================================================
FILE: bricks/hydrated_bloc/__brick__/{{~ freezed_bloc }}
================================================
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';

part '{{name.snakeCase()}}_event.dart';
part '{{name.snakeCase()}}_state.dart';
part '{{name.snakeCase()}}_bloc.freezed.dart';

class {{name.pascalCase()}}Bloc extends HydratedBloc<{{name.pascalCase()}}Event, {{name.pascalCase()}}State> {
  {{name.pascalCase()}}Bloc() : super(const {{name.pascalCase()}}State.initial()) {
    on<{{name.pascalCase()}}Event>((event, emit) {
      // TODO: implement event handler
    });
  }

  @override
  Map<String, dynamic> toJson({{name.pascalCase()}}State state) {
    // TODO: implement toJson
  }

  @override
  {{name.pascalCase()}}State fromJson(Map<String, dynamic> json) {
    // TODO: implement fromJson
  }
}


================================================
FILE: bricks/hydrated_bloc/__brick__/{{~ freezed_event }}
================================================
part of '{{name.snakeCase()}}_bloc.dart';

@freezed
class {{name.pascalCase()}}Event with _${{name.pascalCase()}}Event {
  const factory {{name.pascalCase()}}Event.started() = _Started;
}


================================================
FILE: bricks/hydrated_bloc/__brick__/{{~ freezed_state }}
================================================
part of '{{name.snakeCase()}}_bloc.dart';

@freezed
class {{name.pascalCase()}}State with _${{name.pascalCase()}}State {
  const factory {{name.pascalCase()}}State.initial() = _Initial;
}


================================================
FILE: bricks/hydrated_bloc/brick.yaml
================================================
name: hydrated_bloc
description: Generate a new HydratedBloc in Dart. Built for the bloc state management library.
version: 0.4.0
repository: https://github.com/felangel/bloc/tree/master/bricks/hydrated_bloc

environment:
  mason: ^0.1.0

vars:
  name:
    type: string
    description: The name of the bloc class.
    default: counter
    prompt: Please enter the bloc name.
  style:
    type: enum
    description: The style of bloc generated.
    default: basic
    prompt: What is the bloc style?
    values:
      - basic
      - equatable
      - freezed


================================================
FILE: bricks/hydrated_bloc/hooks/pre_gen.dart
================================================
import 'package:mason/mason.dart';

Future<void> run(HookContext context) async {
  final style = context.vars['style'];
  context.vars = {
    ...context.vars,
    'use_basic': style == 'basic',
    'use_equatable': style == 'equatable',
    'use_freezed': style == 'freezed',
  };
}


================================================
FILE: bricks/hydrated_bloc/hooks/pubspec.yaml
================================================
name: hydrated_bloc_hooks

environment:
  sdk: ^3.10.0

dependencies:
  mason: ^0.1.0


================================================
FILE: bricks/hydrated_cubit/CHANGELOG.md
================================================
# 0.3.0

- chore(deps): upgrade to `mason ^0.1.0`
- chore(deps): upgrade hooks to `dart ^3.5.4`

# 0.2.1

- chore: update copyright year
- chore: update logo image refs

# 0.2.0

- feat: add support for `equatable`
- feat: add support for `freezed`

# 0.1.3

- fix: part and imports

# 0.1.2

- docs: add badges to README
- docs: use dark logo variant

# 0.1.1

- docs: minor README update

# 0.1.0

- feat: initial release with support for basic hydrated cubit generation


================================================
FILE: bricks/hydrated_cubit/LICENSE
================================================
MIT License

Copyright (c) 2026 Felix Angelov

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: bricks/hydrated_cubit/README.md
================================================
<p align="center">
<img style="height:100px" src="https://raw.githubusercontent.com/felangel/bloc/master/assets/logos/hydrated_cubit_dark.png" alt="Hydrated Cubit" />
</p>

<p align="center">
<a href="https://github.com/felangel/bloc/actions"><img src="https://github.com/felangel/bloc/actions/workflows/main.yaml/badge.svg" alt="build"></a>
<a href="https://codecov.io/gh/felangel/bloc"><img src="https://codecov.io/gh/felangel/Bloc/branch/master/graph/badge.svg" alt="codecov"></a>
<a href="https://github.com/felangel/bloc"><img src="https://img.shields.io/github/stars/felangel/bloc.svg?style=flat&logo=github&colorB=deeppink&label=stars" alt="Star on Github"></a>
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-purple.svg" alt="License: MIT"></a>
<a href="https://discord.gg/bloc"><img src="https://img.shields.io/discord/649708778631200778.svg?logo=discord&color=blue" alt="Discord"></a>
<a href="https://github.com/felangel/bloc"><img src="https://tinyurl.com/bloc-library" alt="Bloc Library"></a>
<a href="https://github.com/felangel/mason"><img src="https://img.shields.io/endpoint?url=https%3A%2F%2Ftinyurl.com%2Fmason-badge" alt="Powered by Mason"></a>
</p>

Generate a new HydratedCubit in [Dart][1]. Built for the [bloc state management library][2].

## Usage 🚀

```sh
mason make hydrated_cubit --name counter --style basic
```

## Variables ✨

| Variable | Description                  | Default                             | Type     |
| -------- | ---------------------------- | ----------------------------------- | -------- |
| `name`   | The name of the cubit class  | `counter`                           | `string` |
| `style`  | The style of cubit generated | `basic (basic, equatable, freezed)` | `enum`   |

## Output 📦

```sh
├── counter_cubit.dart
└── counter_state.dart
```

[1]: https://dart.dev
[2]: https://github.com/felangel/bloc


================================================
FILE: bricks/hydrated_cubit/__brick__/{{name.snakeCase()}}_cubit.dart
================================================
{{#use_freezed}}{{> freezed_cubit }}{{/use_freezed}}{{#use_equatable}}{{> equatable_cubit }}{{/use_equatable}}{{#use_basic}}{{> basic_cubit }}{{/use_basic}}

================================================
FILE: bricks/hydrated_cubit/__brick__/{{name.snakeCase()}}_state.dart
================================================
{{#use_freezed}}{{> freezed_state }}{{/use_freezed}}{{#use_equatable}}{{> equatable_state }}{{/use_equatable}}{{#use_basic}}{{> basic_state }}{{/use_basic}}

================================================
FILE: bricks/hydrated_cubit/__brick__/{{~ basic_cubit }}
================================================
import 'package:hydrated_bloc/hydrated_bloc.dart';

part '{{name.snakeCase()}}_state.dart';

class {{name.pascalCase()}}Cubit extends HydratedCubit<{{name.pascalCase()}}State> {
  {{name.pascalCase()}}Cubit() : super(const {{name.pascalCase()}}State());

  @override
  Map<String, dynamic> toJson({{name.pascalCase()}}State state) {
    // TODO: implement toJson
  }

  @override
  {{name.pascalCase()}}State fromJson(Map<String, dynamic> json) {
    // TODO: implement fromJson
  }
}


================================================
FILE: bricks/hydrated_cubit/__brick__/{{~ basic_state }}
================================================
part of '{{name.snakeCase()}}_cubit.dart';

class {{name.pascalCase()}}State {
  const {{name.pascalCase()}}State();
}


================================================
FILE: bricks/hydrated_cubit/__brick__/{{~ equatable_cubit }}
================================================
import 'package:equatable/equatable.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';

part '{{name.snakeCase()}}_state.dart';

class {{name.pascalCase()}}Cubit extends HydratedCubit<{{name.pascalCase()}}State> {
  {{name.pascalCase()}}Cubit() : super(const {{name.pascalCase()}}State());

  @override
  Map<String, dynamic> toJson({{name.pascalCase()}}State state) {
    // TODO: implement toJson
  }

  @override
  {{name.pascalCase()}}State fromJson(Map<String, dynamic> json) {
    // TODO: implement fromJson
  }
}


================================================
FILE: bricks/hydrated_cubit/__brick__/{{~ equatable_state }}
================================================
part of '{{name.snakeCase()}}_cubit.dart';

class {{name.pascalCase()}}State extends Equatable {
  const {{name.pascalCase()}}State();

  @override
  List<Object> get props => [];
}


================================================
FILE: bricks/hydrated_cubit/__brick__/{{~ freezed_cubit }}
================================================
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart';

part '{{name.snakeCase()}}_state.dart';
part '{{name.snakeCase()}}_cubit.freezed.dart';

class {{name.pascalCase()}}Cubit extends HydratedCubit<{{name.pascalCase()}}State> {
  {{name.pascalCase()}}Cubit() : super(const {{name.pascalCase()}}State.initial());

  @override
  Map<String, dynamic> toJson({{name.pascalCase()}}State state) {
    // TODO: implement toJson
  }

  @override
  {{name.pascalCase()}}State fromJson(Map<String, dynamic> json) {
    // TODO: implement fromJson
  }
}


================================================
FILE: bricks/hydrated_cubit/__brick__/{{~ freezed_state }}
================================================
part of '{{name.snakeCase()}}_cubit.dart';

@freezed
class {{name.pascalCase()}}State with _${{name.pascalCase()}}State {
  const factory {{name.pascalCase()}}State.initial() = _Initial;
}


================================================
FILE: bricks/hydrated_cubit/brick.yaml
================================================
name: hydrated_cubit
description: Generate a new HydratedCubit in Dart. Built for the bloc state management library.
version: 0.3.0
repository: https://github.com/felangel/bloc/tree/master/bricks/hydrated_cubit

environment:
  mason: ^0.1.0

vars:
  name:
    type: string
    description: The name of the cubit class.
    default: counter
    prompt: Please enter the cubit name.
  style:
    type: enum
    description: The style of cubit generated.
    default: basic
    prompt: What is the cubit style?
    values:
      - basic
      - equatable
      - freezed


================================================
FILE: bricks/hydrated_cubit/hooks/pre_gen.dart
================================================
import 'package:mason/mason.dart';

Future<void> run(HookContext context) async {
  final style = context.vars['style'];
  context.vars = {
    ...context.vars,
    'use_basic': style == 'basic',
    'use_equatable': style == 'equatable',
    'use_freezed': style == 'freezed',
  };
}


================================================
FILE: bricks/hydrated_cubit/hooks/pubspec.yaml
================================================
name: hydrated_cubit_hooks

environment:
  sdk: ^3.10.0

dependencies:
  mason: ^0.1.0


================================================
FILE: bricks/mason.yaml
================================================
bricks:
  bloc:
    path: ./bloc
  cubit:
    path: ./cubit
  hydrated_bloc:
    path: ./hydrated_bloc
  hydrated_cubit:
    path: ./hydrated_cubit
  replay_bloc:
    path: ./replay_bloc
  replay_cubit:
    path: ./replay_cubit
  flutter_bloc_feature:
    path: ./flutter_bloc_feature

================================================
FILE: bricks/replay_bloc/CHANGELOG.md
================================================
# 0.3.0

- chore(deps): upgrade to `mason ^0.1.0`
- chore(deps): upgrade hooks to `dart ^3.5.4`

# 0.2.1

- chore: update copyright year
- chore: update logo image refs

# 0.2.0

- feat: add support for `equatable`
- feat: add support for `freezed`

# 0.1.3

- fix: add missing `extends ReplayEvent`

# 0.1.2

- docs: add badges to README
- docs: use dark logo variant

# 0.1.1

- docs: minor README update

# 0.1.0

- feat: initial release with support for basic replay bloc generation


================================================
FILE: bricks/replay_bloc/LICENSE
================================================
MIT License

Copyright (c) 2026 Felix Angelov

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: bricks/replay_bloc/README.md
================================================
<p align="center">
<img style="height:100px" src="https://raw.githubusercontent.com/felangel/bloc/master/assets/logos/replay_bloc_dark.png" alt="Bloc" />
</p>

<p align="center">
<a href="https://github.com/felangel/bloc/actions"><img src="https://github.com/felangel/bloc/actions/workflows/main.yaml/badge.svg" alt="build"></a>
<a href="https://codecov.io/gh/felangel/bloc"><img src="https://codecov.io/gh/felangel/Bloc/branch/master/graph/badge.svg" alt="codecov"></a>
<a href="https://github.com/felangel/bloc"><img src="https://img.shields.io/github/stars/felangel/bloc.svg?style=flat&logo=github&colorB=deeppink&label=stars" alt="Star on Github"></a>
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-purple.svg" alt="License: MIT"></a>
<a href="https://discord.gg/bloc"><img src="https://img.shields.io/discord/649708778631200778.svg?logo=discord&color=blue" alt="Discord"></a>
<a href="https://github.com/felangel/bloc"><img src="https://tinyurl.com/bloc-library" alt="Bloc Library"></a>
<a href="https://github.com/felangel/mason"><img src="https://img.shields.io/endpoint?url=https%3A%2F%2Ftinyurl.com%2Fmason-badge" alt="Powered by Mason"></a>
</p>

Generate a new ReplayBloc in [Dart][1]. Built for the [bloc state management library][2].

## Usage 🚀

```sh
mason make replay_bloc --name counter --style basic
```

## Variables ✨

| Variable | Description                 | Default                             | Type     |
| -------- | --------------------------- | ----------------------------------- | -------- |
| `name`   | The name of the bloc class  | `counter`                           | `string` |
| `style`  | The style of bloc generated | `basic (basic, equatable, freezed)` | `enum`   |

## Output 📦

```sh
├── counter_bloc.dart
├── counter_event.dart
└── counter_state.dart
```

[1]: https://dart.dev
[2]: https://github.com/felangel/bloc


================================================
FILE: bricks/replay_bloc/__brick__/{{name.snakeCase()}}_bloc.dart
================================================
{{#use_freezed}}{{> freezed_bloc }}{{/use_freezed}}{{#use_equatable}}{{> equatable_bloc }}{{/use_equatable}}{{#use_basic}}{{> basic_bloc }}{{/use_basic}}

================================================
FILE: bricks/replay_bloc/__brick__/{{name.snakeCase()}}_event.dart
================================================
{{#use_freezed}}{{> freezed_event }}{{/use_freezed}}{{#use_equatable}}{{> equatable_event }}{{/use_equatable}}{{#use_basic}}{{> basic_event }}{{/use_basic}}

================================================
FILE: bricks/replay_bloc/__brick__/{{name.snakeCase()}}_state.dart
================================================
{{#use_freezed}}{{> freezed_state }}{{/use_freezed}}{{#use_equatable}}{{> equatable_state }}{{/use_equatable}}{{#use_basic}}{{> basic_state }}{{/use_basic}}

================================================
FILE: bricks/replay_bloc/__brick__/{{~ basic_bloc }}
================================================
import 'package:replay_bloc/replay_bloc.dart';

part '{{name.snakeCase()}}_event.dart';
part '{{name.snakeCase()}}_state.dart';

class {{name.pascalCase()}}Bloc extends ReplayBloc<{{name.pascalCase()}}Event, {{name.pascalCase()}}State> {
  {{name.pascalCase()}}Bloc() : super(const {{name.pascalCase()}}State()) {
    on<{{name.pascalCase()}}Event>((event, emit) {
      // TODO: implement event handler
    });
  }
}


================================================
FILE: bricks/replay_bloc/__brick__/{{~ basic_event }}
================================================
part of '{{name.snakeCase()}}_bloc.dart';

abstract class {{name.pascalCase()}}Event extends ReplayEvent {
  const {{name.pascalCase()}}Event();
}


================================================
FILE: bricks/replay_bloc/__brick__/{{~ basic_state }}
================================================
part of '{{name.snakeCase()}}_bloc.dart';

class {{name.pascalCase()}}State {
  const {{name.pascalCase()}}State();
}


================================================
FILE: bricks/replay_bloc/__brick__/{{~ equatable_bloc }}
================================================
import 'package:equatable/equatable.dart';
import 'package:replay_bloc/replay_bloc.dart';

part '{{name.snakeCase()}}_event.dart';
part '{{name.snakeCase()}}_state.dart';

class {{name.pascalCase()}}Bloc extends ReplayBloc<{{name.pascalCase()}}Event, {{name.pascalCase()}}State> {
  {{name.pascalCase()}}Bloc() : super(const {{name.pascalCase()}}State()) {
    on<{{name.pascalCase()}}Event>((event, emit) {
      // TODO: implement event handler
    });
  }
}


================================================
FILE: bricks/replay_bloc/__brick__/{{~ equatable_event }}
================================================
part of '{{name.snakeCase()}}_bloc.dart';

abstract class {{name.pascalCase()}}Event extends ReplayEvent with EquatableMixin {
  const {{name.pascalCase()}}Event();

  @override
  List<Object> get props => [];
}


================================================
FILE: bricks/replay_bloc/__brick__/{{~ equatable_state }}
================================================
part of '{{name.snakeCase()}}_bloc.dart';

class {{name.pascalCase()}}State extends Equatable {
  const {{name.pascalCase()}}State();

  @override
  List<Object> get props => [];
}


================================================
FILE: bricks/replay_bloc/__brick__/{{~ freezed_bloc }}
================================================
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:replay_bloc/replay_bloc.dart';

part '{{name.snakeCase()}}_event.dart';
part '{{name.snakeCase()}}_state.dart';
part '{{name.snakeCase()}}_bloc.freezed.dart';

class {{name.pascalCase()}}Bloc extends ReplayBloc<{{name.pascalCase()}}Event, {{name.pascalCase()}}State> {
  {{name.pascalCase()}}Bloc() : super(const {{name.pascalCase()}}State.initial()) {
    on<{{name.pascalCase()}}Event>((event, emit) {
      // TODO: implement event handler
    });
  }
}


================================================
FILE: bricks/replay_bloc/__brick__/{{~ freezed_event }}
================================================
part of '{{name.snakeCase()}}_bloc.dart';

@freezed
class {{name.pascalCase()}}Event extends ReplayEvent with _${{name.pascalCase()}}Event {
  const factory {{name.pascalCase()}}Event.started() = _Started;
}


================================================
FILE: bricks/replay_bloc/__brick__/{{~ freezed_state }}
================================================
part of '{{name.snakeCase()}}_bloc.dart';

@freezed
class {{name.pascalCase()}}State with _${{name.pascalCase()}}State {
  const factory {{name.pascalCase()}}State.initial() = _Initial;
}


================================================
FILE: bricks/replay_bloc/brick.yaml
================================================
name: replay_bloc
description: Generate a new ReplayBloc in Dart. Built for the bloc state management library.
version: 0.3.0
repository: https://github.com/felangel/bloc/tree/master/bricks/replay_bloc

environment:
  mason: ^0.1.0

vars:
  name:
    type: string
    description: The name of the bloc class.
    default: counter
    prompt: Please enter the bloc name.
  style:
    type: enum
    description: The style of bloc generated.
    default: basic
    prompt: What is the bloc style?
    values:
      - basic
      - equatable
      - freezed


================================================
FILE: bricks/replay_bloc/hooks/pre_gen.dart
================================================
import 'package:mason/mason.dart';

Future<void> run(HookContext context) async {
  final style = context.vars['style'];
  context.vars = {
    ...context.vars,
    'use_basic': style == 'basic',
    'use_equatable': style == 'equatable',
    'use_freezed': style == 'freezed',
  };
}


================================================
FILE: bricks/replay_bloc/hooks/pubspec.yaml
================================================
name: replay_bloc_hooks

environment:
  sdk: ^3.10.0

dependencies:
  mason: ^0.1.0


================================================
FILE: bricks/replay_cubit/CHANGELOG.md
================================================
# 0.3.0

- chore(deps): upgrade to `mason ^0.1.0`
- chore(deps): upgrade hooks to `dart ^3.5.4`

# 0.2.1

- chore: update copyright year
- chore: update logo image refs

# 0.2.0

- feat: add support for `equatable`
- feat: add support for `freezed`

# 0.1.3

- fix: part and imports

# 0.1.2

- docs: add badges to README
- docs: use dark logo variant

# 0.1.1

- docs: minor README update

# 0.1.0

- feat: initial release with support for basic replay cubit generation


================================================
FILE: bricks/replay_cubit/LICENSE
================================================
MIT License

Copyright (c) 2026 Felix Angelov

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: bricks/replay_cubit/README.md
================================================
<p align="center">
<img style="height:100px" src="https://raw.githubusercontent.com/felangel/bloc/master/assets/logos/replay_cubit_dark.png" alt="Replay Cubit" />
</p>

<p align="center">
<a href="https://github.com/felangel/bloc/actions"><img src="https://github.com/felangel/bloc/actions/workflows/main.yaml/badge.svg" alt="build"></a>
<a href="https://codecov.io/gh/felangel/bloc"><img src="https://codecov.io/gh/felangel/Bloc/branch/master/graph/badge.svg" alt="codecov"></a>
<a href="https://github.com/felangel/bloc"><img src="https://img.shields.io/github/stars/felangel/bloc.svg?style=flat&logo=github&colorB=deeppink&label=stars" alt="Star on Github"></a>
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-purple.svg" alt="License: MIT"></a>
<a href="https://discord.gg/bloc"><img src="https://img.shields.io/discord/649708778631200778.svg?logo=discord&color=blue" alt="Discord"></a>
<a href="https://github.com/felangel/bloc"><img src="https://tinyurl.com/bloc-library" alt="Bloc Library"></a>
<a href="https://github.com/felangel/mason"><img src="https://img.shields.io/endpoint?url=https%3A%2F%2Ftinyurl.com%2Fmason-badge" alt="Powered by Mason"></a>
</p>

Generate a new ReplayCubit in [Dart][1]. Built for the [bloc state management library][2].

## Usage 🚀

```sh
mason make replay_cubit --name counter --style basic
```

## Variables ✨

| Variable | Description                  | Default                             | Type     |
| -------- | ---------------------------- | ----------------------------------- | -------- |
| `name`   | The name of the cubit class  | `counter`                           | `string` |
| `style`  | The style of cubit generated | `basic (basic, equatable, freezed)` | `enum`   |

## Output 📦

```sh
├── counter_cubit.dart
└── counter_state.dart
```

[1]: https://dart.dev
[2]: https://github.com/felangel/bloc


================================================
FILE: bricks/replay_cubit/__brick__/{{name.snakeCase()}}_cubit.dart
================================================
{{#use_freezed}}{{> freezed_cubit }}{{/use_freezed}}{{#use_equatable}}{{> equatable_cubit }}{{/use_equatable}}{{#use_basic}}{{> basic_cubit }}{{/use_basic}}

================================================
FILE: bricks/replay_cubit/__brick__/{{name.snakeCase()}}_state.dart
================================================
{{#use_freezed}}{{> freezed_state }}{{/use_freezed}}{{#use_equatable}}{{> equatable_state }}{{/use_equatable}}{{#use_basic}}{{> basic_state }}{{/use_basic}}

================================================
FILE: bricks/replay_cubit/__brick__/{{~ basic_cubit }}
================================================
import 'package:replay_bloc/replay_bloc.dart';

part '{{name.snakeCase()}}_state.dart';

class {{name.pascalCase()}}Cubit extends ReplayCubit<{{name.pascalCase()}}State> {
  {{name.pascalCase()}}Cubit() : super(const {{name.pascalCase()}}State());
}


================================================
FILE: bricks/replay_cubit/__brick__/{{~ basic_state }}
================================================
part of '{{name.snakeCase()}}_cubit.dart';

class {{name.pascalCase()}}State {
  const {{name.pascalCase()}}State();
}


================================================
FILE: bricks/replay_cubit/__brick__/{{~ equatable_cubit }}
================================================
import 'package:equatable/equatable.dart';
import 'package:replay_bloc/replay_bloc.dart';

part '{{name.snakeCase()}}_state.dart';

class {{name.pascalCase()}}Cubit extends ReplayCubit<{{name.pascalCase()}}State> {
  {{name.pascalCase()}}Cubit() : super(const {{name.pascalCase()}}State());
}


================================================
FILE: bricks/replay_cubit/__brick__/{{~ equatable_state }}
================================================
part of '{{name.snakeCase()}}_cubit.dart';

class {{name.pascalCase()}}State extends Equatable {
  const {{name.pascalCase()}}State();

  @override
  List<Object> get props => [];
}


================================================
FILE: bricks/replay_cubit/__brick__/{{~ freezed_cubit }}
================================================
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:replay_bloc/replay_bloc.dart';

part '{{name.snakeCase()}}_state.dart';
part '{{name.snakeCase()}}_cubit.freezed.dart';

class {{name.pascalCase()}}Cubit extends ReplayCubit<{{name.pascalCase()}}State> {
  {{name.pascalCase()}}Cubit() : super(const {{name.pascalCase()}}State.initial());
}


================================================
FILE: bricks/replay_cubit/__brick__/{{~ freezed_state }}
================================================
part of '{{name.snakeCase()}}_cubit.dart';

@freezed
class {{name.pascalCase()}}State with _${{name.pascalCase()}}State {
  const factory {{name.pascalCase()}}State.initial() = _Initial;
}


================================================
FILE: bricks/replay_cubit/brick.yaml
================================================
name: replay_cubit
description: Generate a new ReplayCubit in Dart. Built for the bloc state management library.
version: 0.3.0
repository: https://github.com/felangel/bloc/tree/master/bricks/replay_cubit

environment:
  mason: ^0.1.0

vars:
  name:
    type: string
    description: The name of the cubit class.
    default: counter
    prompt: Please enter the cubit name.
  style:
    type: enum
    description: The style of cubit generated.
    default: basic
    prompt: What is the cubit style?
    values:
      - basic
      - equatable
      - freezed


================================================
FILE: bricks/replay_cubit/hooks/pre_gen.dart
================================================
import 'package:mason/mason.dart';

Future<void> run(HookContext context) async {
  final style = context.vars['style'];
  context.vars = {
    ...context.vars,
    'use_basic': style == 'basic',
    'use_equatable': style == 'equatable',
    'use_freezed': style == 'freezed',
  };
}


================================================
FILE: bricks/replay_cubit/hooks/pubspec.yaml
================================================
name: replay_cubit_hooks

environment:
  sdk: ^3.10.0

dependencies:
  mason: ^0.1.0


================================================
FILE: docs/.gitignore
================================================
# build output
dist/
# generated types
.astro/

# dependencies
node_modules/

# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*


# environment variables
.env
.env.production

# macOS-specific files
.DS_Store

# firebase
.firebase

================================================
FILE: docs/.prettierignore
================================================
src/components/**/*.mdx

================================================
FILE: docs/.prettierrc
================================================
{
  "printWidth": 100,
  "semi": true,
  "singleQuote": true,
  "tabWidth": 2,
  "trailingComma": "es5",
  "useTabs": true,
  "plugins": ["prettier-plugin-astro"],
  "overrides": [
    { "files": [".*", "*.json", "*.md", "*.toml", "*.yml"], "options": { "useTabs": false } },
    { "files": ["*.md", "*.mdx"], "options": { "printWidth": 80, "proseWrap": "always" } }
  ]
}


================================================
FILE: docs/astro.config.mjs
================================================
import { defineConfig } from 'astro/config';
import starlight from '@astrojs/starlight';
import starlightLinksValidator from 'starlight-links-validator';
import tailwindcss from '@tailwindcss/vite';

const site = 'https://bloclibrary.dev/';
const locales = {
	root: { label: 'English', lang: 'en' },
	az: { label: 'Azərbaycan', lang: 'az' },
	cs: { label: 'Čeština', lang: 'cs' },
	de: { label: 'Deutsch', lang: 'de' },
	es: { label: 'Español', lang: 'es' },
	fil: { label: 'Filipino', lang: 'fil' },
	fr: { label: 'Français', lang: 'fr' },
	it: { label: 'Italiano', lang: 'it' },
	ja: { label: '日本語', lang: 'ja' },
	ko: { label: '한국어', lang: 'ko' },
	'pt-br': { label: 'Português', lang: 'pt-BR' },
	ru: { label: 'Русский', lang: 'ru' },
	'zh-cn': { label: '简体中文', lang: 'zh-CN' },
	uk: { label: 'Українська', lang: 'uk' },
	ar: { label: 'العربية', lang: 'ar', dir: 'rtl' },
	fa: { label: 'فارسی', lang: 'fa', dir: 'rtl' },
	bn: { label: 'বাংলা', lang: 'bn' },
};

// https://astro.build/config
export default defineConfig({
	site,
	integrations: [
		starlight({
			expressiveCode: { themes: ['dark-plus', 'github-light'] },
			logo: {
				light: 'src/assets/light-bloc-logo.svg',
				dark: 'src/assets/dark-bloc-logo.svg',
				replacesTitle: true,
			},
			title: 'Bloc',
			editLink: { baseUrl: 'https://github.com/felangel/bloc/edit/master/docs/' },
			tagline: 'A predictable state management library for Dart.',
			favicon: 'favicon.ico',
			head: [
				{ tag: 'meta', attrs: { property: 'og:image', content: site + 'og.png?v=1' } },
				{ tag: 'meta', attrs: { property: 'twitter:image', content: site + 'og.png?v=1' } },
			],
			customCss: ['src/tailwind.css', 'src/styles/landing.css', '@fontsource-variable/figtree'],
			social: [
				{ icon: 'github', label: 'GitHub', href: 'https://github.com/felangel/bloc' },
				{ icon: 'discord', label: 'Discord', href: 'https://discord.gg/bloc' },
			],
			defaultLocale: 'root',
			locales,
			sidebar: [
				{
					label: 'Introduction',
					translations: {
						ar: 'المقدمة',
						'zh-CN': '介绍',
						fa: 'مقدمه',
						es: 'Introducción',
						ja: '紹介',
						ru: 'Введение',
						uk: 'Вступ',
					},
					items: [
						{
							label: 'Getting Started',
							link: '/getting-started/',
							translations: {
								ar: 'ابدأ الآن',
								'zh-CN': '快速入门',
								fa: 'شروع شدن',
								es: 'Empezando',
								ja: 'はじめに',
								ru: 'Начало работы',
								uk: 'Початок роботи',
							},
						},
						{
							label: 'Why Bloc?',
							link: '/why-bloc/',
							translations: {
								ar: 'لماذا Bloc؟',
								'zh-CN': '为什么用 Bloc?',
								fa: 'چرا Bloc؟',
								es: '¿Por qué Bloc?',
								ja: 'なぜBloc?',
								ru: 'Почему Bloc?',
								uk: 'Чому Bloc?',
							},
						},
						{
							label: 'Bloc Concepts',
							link: '/bloc-concepts/',
							translations: {
								ar: 'مفاهيم Bloc',
								'zh-CN': 'Bloc 核心概念',
								fa: 'مفاهیم Bloc',
								es: 'Conceptos de Bloc',
								ja: 'Blocのコンセプト',
								ru: 'Концепции Bloc',
								uk: 'Концепції Bloc',
							},
						},
						{
							label: 'Flutter Bloc Concepts',
							link: '/flutter-bloc-concepts/',
							translations: {
								ar: 'مفاهيم Flutter Bloc',
								'zh-CN': 'Flutter Bloc 核心概念',
								fa: 'مفاهیم Bloc فلاتر',
								es: 'Conceptos de Flutter Bloc',
								ja: 'Flutter Blocのコンセプト',
								ru: 'Концепции Flutter Bloc',
								uk: 'Концепції Flutter Bloc',
							},
						},
						{
							label: 'Architecture',
							link: '/architecture/',
							translations: {
								ar: 'البنية المعمارية',
								fa: 'معماری',
								es: 'Arquitectura',
								ja: 'アーキテクチャー',
								ru: 'Архитектура',
								uk: 'Архітектура',
							},
						},
						{
							label: 'Modeling State',
							link: '/modeling-state/',
							translations: {
								ar: 'نمذجة الحالة',
								fa: 'حالت (State) مدل سازی',
								es: 'Modelando el Estado',
								ja: '状態のモデリング',
								ru: 'Моделирование состояния',
								uk: 'Моделювання стану',
							},
						},
						{
							label: 'Testing',
							link: '/testing/',
							translations: {
								ar: 'الاختبارات',
								fa: 'آزمایش کردن',
								es: 'Pruebas',
								ja: 'テスト',
								ru: 'Тестирование',
								uk: 'Тестування',
							},
						},
						{
							label: 'Naming Conventions',
							link: '/naming-conventions/',
							translations: {
								ar: 'اتفاقيات التسمية',
								fa: 'قراردادهای نامگذاری',
								es: 'Convenciones de Nomenclatura',
								ja: '命名規則',
								ru: 'Соглашения об именовании',
								uk: 'Угоди про іменування',
							},
						},
						{
							label: 'Migration Guide',
							link: '/migration/',
							translations: {
								ar: 'دليل الترقية',
								fa: 'راهنمای مهاجرت',
								es: 'Guía de Migración',
								ja: '移行ガイド',
								ru: 'Руководство по миграции',
								uk: 'Посібник з міграції',
							},
						},
						{
							label: 'FAQs',
							link: '/faqs/',
							translations: {
								ar: 'الأسئلة الشائعة',
								fa: 'سوالات متداول',
								es: 'Preguntas Frecuentes',
								ja: 'よくある質問',
								ru: 'Часто задаваемые вопросы',
								uk: 'Часті запитання',
							},
						},
					],
				},
				{
					label: 'Linter',
					badge: { text: 'new' },
					translations: { ar: 'المدقق', uk: 'Лінтер' },
					items: [
						{
							label: 'Overview ',
							link: '/lint/',
							translations: { ar: 'نظرة عامة', fa: 'بررسی اجمالی', ru: 'Обзор', uk: 'Огляд' },
						},
						{
							label: 'Installation ',
							link: '/lint/installation/',
							translations: { ar: 'التثبيت', fa: 'نصب', ru: 'Установка', uk: 'Встановлення' },
						},
						{
							label: 'Configuration ',
							link: '/lint/configuration/',
							translations: {
								ar: 'الإعداد',
								fa: 'پیکربندی',
								ru: 'Конфигурация',
								uk: 'Конфігурація',
							},
						},
						{
							label: 'Customizing Rules ',
							link: '/lint/customizing-rules/',
							translations: {
								ar: 'تخصيص القواعد',
								fa: 'سفارشی سازی قوانین',
								ru: 'Настройка правил',
								uk: 'Налаштування правил',
							},
						},
						{
							label: 'Rules',
							autogenerate: { directory: '/lint-rules' },
							translations: { ar: 'القواعد', fa: 'قوانین', ru: 'Правила', uk: 'Правила' },
						},
					],
				},
				{
					label: 'Tutorials',
					translations: {
						ar: 'الدروس التعليمية',
						fa: 'آموزش ها',
						es: 'Tutoriales',
						ja: 'チュートリアル',
						ru: 'Руководства',
						uk: 'Посібники',
					},
					autogenerate: { directory: 'tutorials' },
				},
				{
					label: 'Tools',
					translations: {
						ar: 'الأدوات',
						fa: 'ابزار',
						es: 'Herramientas',
						ja: 'ツール',
						ru: 'Инструменты',
						uk: 'Інструменти',
					},
					items: [
						{
							label: 'IntelliJ Plugin',
							link: 'https://plugins.jetbrains.com/plugin/12129-bloc',
							translations: {
								ar: 'إضافة IntelliJ',
								fa: 'پلاگین IntelliJ',
								es: 'Plugin de IntelliJ',
								ru: 'Плагин IntelliJ',
								uk: 'Плагін IntelliJ',
							},
						},
						{
							label: 'VSCode Extension',
							link: 'https://marketplace.visualstudio.com/items?itemName=FelixAngelov.bloc',
							translations: {
								ar: 'إضافة VS Code',
								fa: 'پلاگین VSCode',
								es: 'Extensión de VSCode',
								ru: 'Расширение VSCode',
								uk: 'Розширення VSCode',
							},
						},
					],
				},
				{
					label: 'Reference',
					translations: {
						ar: 'المرجع',
						fa: 'مرجع',
						es: 'Referencia',
						ja: 'APIリファレンス',
						ru: 'Справочник',
						uk: 'Довідник',
					},
					items: [
						{
							label: 'angular_bloc',
							link: 'https://pub.dev/documentation/angular_bloc/latest/index.html',
						},
						{ label: 'bloc', link: 'https://pub.dev/documentation/bloc/latest/index.html' },
						{
							label: 'bloc_concurrency',
							link: 'https://pub.dev/documentation/bloc_concurrency/latest/index.html',
						},
						{
							label: 'bloc_lint',
							link: 'https://pub.dev/documentation/bloc_lint/latest/index.html',
						},
						{
							label: 'bloc_test',
							link: 'https://pub.dev/documentation/bloc_test/latest/index.html',
						},
						{
							label: 'bloc_tools',
							link: 'https://pub.dev/documentation/bloc_tools/latest/index.html',
						},
						{
							label: 'flutter_bloc',
							link: 'https://pub.dev/documentation/flutter_bloc/latest/index.html',
						},
						{
							label: 'hydrated_bloc',
							link: 'https://pub.dev/documentation/hydrated_bloc/latest/index.html',
						},
						{
							label: 'replay_bloc',
							link: 'https://pub.dev/documentation/replay_bloc/latest/index.html',
						},
					],
				},
			],
			plugins: [
				starlightLinksValidator({ errorOnFallbackPages: false, errorOnInconsistentLocale: true }),
			],
		}),
	],
	vite: { plugins: [tailwindcss()] },
});


================================================
FILE: docs/package.json
================================================
{
  "name": "docs",
  "type": "module",
  "version": "0.0.1",
  "scripts": {
    "dev": "astro dev",
    "start": "astro dev",
    "build": "astro check && astro build",
    "preview": "astro preview",
    "astro": "astro",
    "format": "prettier --write .",
    "format:check": "prettier --check ."
  },
  "dependencies": {
    "@astrojs/check": "^0.9.6",
    "@astrojs/starlight": "^0.37.6",
    "@astrojs/starlight-tailwind": "^4.0.2",
    "@fontsource-variable/figtree": "^5.2.6",
    "astro": "^5.17.1",
    "sharp": "^0.34.1",
    "tailwindcss": "^4.1.4",
    "typescript": "^5.7.3"
  },
  "devDependencies": {
    "@shikijs/transformers": "^3.3.0",
    "@tailwindcss/vite": "^4.1.4",
    "prettier": "^3.5.3",
    "prettier-plugin-astro": "^0.14.1",
    "prettier-plugin-tailwindcss": "^0.6.11",
    "starlight-links-validator": "^0.16.0"
  }
}


================================================
FILE: docs/public/CNAME
================================================
bloclibrary.dev

================================================
FILE: docs/src/components/architecture/AppIdeaRankingBlocSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class AppIdeaRankingBloc
    extends Bloc<AppIdeaRankingEvent, AppIdeaRankingState> {
  AppIdeaRankingBloc({required AppIdeasRepository appIdeasRepo})
      : _appIdeasRepo = appIdeasRepo,
        super(AppIdeaInitialRankingState()) {
    on<AppIdeaStartRankingEvent>((event, emit) async {
      // When we are told to start ranking app ideas, we will listen to the
      // stream of app ideas and emit a state for each one.
      await emit.forEach(
        _appIdeasRepo.productIdeas(),
        onData: (String idea) => AppIdeaRankingIdeaState(idea: idea),
      );
    });
  }

  final AppIdeasRepository _appIdeasRepo;
}
`;
---

<Code code={code} lang="dart" title="app_idea_ranking_bloc.dart" />


================================================
FILE: docs/src/components/architecture/AppIdeasRepositorySnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class AppIdeasRepository {
  int _currentAppIdea = 0;
  final List<String> _ideas = [
    "Future prediction app that rewards you if you predict the next day's news",
    'Dating app for fish that lets your aquarium occupants find true love',
    'Social media app that pays you when your data is sold',
    'JavaScript framework gambling app that lets you bet on the next big thing',
    'Solitaire app that freezes before you can win',
  ];

  Stream<String> productIdeas() async* {
    while (true) {
      yield _ideas[_currentAppIdea++ % _ideas.length];
      await Future<void>.delayed(const Duration(minutes: 1));
    }
  }
}
`;
---

<Code code={code} lang="dart" title="app_ideas_repository.dart" />


================================================
FILE: docs/src/components/architecture/BlocLooseCouplingPresentationSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class MyWidget extends StatelessWidget {
  const MyWidget({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return BlocListener<FirstBloc, FirstState>(
      listener: (context, state) {
        // When the first bloc's state changes, this will be called.
        //
        // Now we can add an event to the second bloc without it having
        // to know about the first bloc.
        context.read<SecondBloc>().add(SecondEvent());
      },
      child: TextButton(
        child: const Text('Hello'),
        onPressed: () {
          context.read<FirstBloc>().add(FirstEvent());
        },
      ),
    );
  }
}
`;
---

<Code code={code} lang="dart" title="my_widget.dart" />


================================================
FILE: docs/src/components/architecture/BlocTightCouplingSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class TightlyCoupledBloc extends Bloc {
  final OtherBloc otherBloc;
  late final StreamSubscription otherBlocSubscription;

  TightlyCoupledBloc(this.otherBloc) {
    // No matter how much you are tempted to do this, you should not do this!
    // Keep reading for better alternatives!
    otherBlocSubscription = otherBloc.stream.listen((state) {
      add(MyEvent());
    });
  }

  @override
  Future<void> close() {
    otherBlocSubscription.cancel();
    return super.close();
  }
}
`;
---

<Code code={code} lang="dart" title="tightly_coupled_bloc.dart" />


================================================
FILE: docs/src/components/architecture/BusinessLogicComponentSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class BusinessLogicComponent extends Bloc<MyEvent, MyState> {
    BusinessLogicComponent(this.repository) {
        on<AppStarted>((event, emit) async {
            try {
                final data = await repository.getAllDataThatMeetsRequirements();
                emit(Success(data));
            } catch (error) {
                emit(Failure(error));
            }
        });
    }

    final Repository repository;
}
`;
---

<Code code={code} lang="dart" title="business_logic_component.dart" />


================================================
FILE: docs/src/components/architecture/DataProviderSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class DataProvider {
    Future<RawData> readData() async {
        // Read from DB or make network request etc...
    }
}
`;
---

<Code code={code} lang="dart" title="data_provider.dart" />


================================================
FILE: docs/src/components/architecture/PresentationComponentSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class PresentationComponent {
  PresentationComponent({required this.bloc}) {
    bloc.add(AppStarted());
  }

  final Bloc bloc;

  build() {
    // render UI based on bloc state
  }
}
`;
---

<Code code={code} lang="dart" title="presentation_component.dart" />


================================================
FILE: docs/src/components/architecture/RepositorySnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class Repository {
    final DataProviderA dataProviderA;
    final DataProviderB dataProviderB;

    Future<Data> getAllDataThatMeetsRequirements() async {
        final RawDataA dataSetA = await dataProviderA.readData();
        final RawDataB dataSetB = await dataProviderB.readData();

        final Data filteredData = _filterData(dataSetA, dataSetB);
        return filteredData;
    }
}
`;
---

<Code code={code} lang="dart" title="repository.dart" />


================================================
FILE: docs/src/components/code/RemoteCode.astro
================================================
---
import { Code } from '@astrojs/starlight/components';
import { z } from 'astro/zod';

interface Props {
	title: string;
	url: string;
}

const propsSchema = z.object({
	title: z.string(),
	url: z.string(),
});

const { url, title } = propsSchema.parse(Astro.props);

const segments = url.split('.');
const lang = segments[segments.length - 1];
const response = await fetch(url);
const code = await response.text();
---

<Code code={code} lang={lang} title={title} />


================================================
FILE: docs/src/components/concepts/bloc/AuthenticationChangeSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
Change {
  currentState: AuthenticationState.authenticated,
  nextState: AuthenticationState.unauthenticated
}
`;
---

<Code code={code} lang="sh" />


================================================
FILE: docs/src/components/concepts/bloc/AuthenticationStateSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
enum AuthenticationState { unknown, authenticated, unauthenticated }
`;
---

<Code code={code} lang="dart" title="authentication_state.dart" />


================================================
FILE: docs/src/components/concepts/bloc/AuthenticationTransitionSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
Transition {
  currentState: AuthenticationState.authenticated,
  event: LogoutRequested,
  nextState: AuthenticationState.unauthenticated
}
`;
---

<Code code={code} lang="sh" />


================================================
FILE: docs/src/components/concepts/bloc/CountStreamSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
Stream<int> countStream(int max) async* {
    for (int i = 0; i < max; i++) {
        yield i;
    }
}
`;
---

<Code code={code} lang="dart" title="count_stream.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterBlocEventHandlerSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
sealed class CounterEvent {}

final class CounterIncrementPressed extends CounterEvent {}

class CounterBloc extends Bloc<CounterEvent, int> {
  CounterBloc() : super(0) {
    on<CounterIncrementPressed>((event, emit) {
      // handle incoming \`CounterIncrementPressed\` event
    });
  }
}
`;
---

<Code code={code} lang="dart" title="counter_bloc.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterBlocFullSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
sealed class CounterEvent {}
final class CounterIncrementPressed extends CounterEvent {}

class CounterBloc extends Bloc<CounterEvent, int> {
  CounterBloc() : super(0) {
    on<CounterIncrementPressed>((event, emit) => emit(state + 1));
  }
}
`;
---

<Code code={code} lang="dart" title="counter_bloc.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterBlocIncrementSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
sealed class CounterEvent {}

final class CounterIncrementPressed extends CounterEvent {}

class CounterBloc extends Bloc<CounterEvent, int> {
  CounterBloc() : super(0) {
    on<CounterIncrementPressed>((event, emit) {
      emit(state + 1);
    });
  }
}
`;
---

<Code code={code} lang="dart" title="counter_bloc.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterBlocOnChangeOutputSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
Change { currentState: 0, nextState: 1 }
`;
---

<Code code={code} lang="sh" />


================================================
FILE: docs/src/components/concepts/bloc/CounterBlocOnChangeSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
sealed class CounterEvent {}

final class CounterIncrementPressed extends CounterEvent {}

class CounterBloc extends Bloc<CounterEvent, int> {
  CounterBloc() : super(0) {
    on<CounterIncrementPressed>((event, emit) => emit(state + 1));
  }

  @override
  void onChange(Change<int> change) {
    super.onChange(change);
    print(change);
  }
}
`;
---

<Code code={code} lang="dart" title="counter_bloc.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterBlocOnChangeUsageSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
void main() {
  CounterBloc()
    ..add(CounterIncrementPressed())
    ..close();
}
`;
---

<Code code={code} lang="dart" title="main.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterBlocOnErrorOutputSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
Exception: increment error!
#0      new CounterBloc.<anonymous closure> (file:///main.dart:10:58)
#1      Bloc.on.<anonymous closure>.handleEvent (package:bloc/src/bloc.dart:229:26)
#2      Bloc.on.<anonymous closure> (package:bloc/src/bloc.dart:238:9)
#3      _MapStream._handleData (dart:async/stream_pipe.dart:213:31)
#4      _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
#5      _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#6      CastStreamSubscription._onData (dart:_internal/async_cast.dart:85:11)
#7      _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#8      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#9      _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#10     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
#11     _WhereStream._handleData (dart:async/stream_pipe.dart:195:12)
#12     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
#13     _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#14     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#15     _DelayedData.perform (dart:async/stream_impl.dart:515:14)
#16     _PendingEvents.handleNext (dart:async/stream_impl.dart:620:11)
#17     _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:591:7)
#18     _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
#19     _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
#20     _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13)
#21     _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:185:5)

CounterBloc Exception: increment error!
#0      new CounterBloc.<anonymous closure> (file:///main.dart:10:58)
#1      Bloc.on.<anonymous closure>.handleEvent (package:bloc/src/bloc.dart:229:26)
#2      Bloc.on.<anonymous closure> (package:bloc/src/bloc.dart:238:9)
#3      _MapStream._handleData (dart:async/stream_pipe.dart:213:31)
#4      _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
#5      _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#6      CastStreamSubscription._onData (dart:_internal/async_cast.dart:85:11)
#7      _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#8      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#9      _BufferingStreamSubscription._add (dart:async/stream_impl.dart:271:7)
#10     _ForwardingStreamSubscription._add (dart:async/stream_pipe.dart:123:11)
#11     _WhereStream._handleData (dart:async/stream_pipe.dart:195:12)
#12     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:153:13)
#13     _RootZone.runUnaryGuarded (dart:async/zone.dart:1594:10)
#14     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
#15     _DelayedData.perform (dart:async/stream_impl.dart:515:14)
#16     _PendingEvents.handleNext (dart:async/stream_impl.dart:620:11)
#17     _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:591:7)
#18     _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
#19     _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
#20     _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13)
#21     _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:185:5)

Transition { currentState: 0, event: Instance of 'CounterIncrementPressed', nextState: 1 }
CounterBloc Transition { currentState: 0, event: Instance of 'CounterIncrementPressed', nextState: 1 }
CounterBloc Change { currentState: 0, nextState: 1 }
Change { currentState: 0, nextState: 1 }
`;
---

<Code code={code} lang="sh" />


================================================
FILE: docs/src/components/concepts/bloc/CounterBlocOnErrorSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
sealed class CounterEvent {}

final class CounterIncrementPressed extends CounterEvent {}

class CounterBloc extends Bloc<CounterEvent, int> {
  CounterBloc() : super(0) {
    on<CounterIncrementPressed>((event, emit) {
      addError(Exception('increment error!'), StackTrace.current);
      emit(state + 1);
    });
  }

  @override
  void onChange(Change<int> change) {
    super.onChange(change);
    print(change);
  }

  @override
  void onTransition(Transition<CounterEvent, int> transition) {
    print(transition);
    super.onTransition(transition);
  }

  @override
  void onError(Object error, StackTrace stackTrace) {
    print('$error, $stackTrace');
    super.onError(error, stackTrace);
  }
}
`;
---

<Code code={code} lang="dart" title="counter_bloc.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterBlocOnEventSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
sealed class CounterEvent {}

final class CounterIncrementPressed extends CounterEvent {}

class CounterBloc extends Bloc<CounterEvent, int> {
  CounterBloc() : super(0) {
    on<CounterIncrementPressed>((event, emit) => emit(state + 1));
  }

  @override
  void onEvent(CounterEvent event) {
    super.onEvent(event);
    print(event);
  }

  @override
  void onChange(Change<int> change) {
    super.onChange(change);
    print(change);
  }

  @override
  void onTransition(Transition<CounterEvent, int> transition) {
    super.onTransition(transition);
    print(transition);
  }
}
`;
---

<Code code={code} lang="dart" title="counter_bloc.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterBlocOnTransitionOutputSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
Transition { currentState: 0, event: Instance of 'CounterIncrementPressed', nextState: 1 }
Change { currentState: 0, nextState: 1 }
`;
---

<Code code={code} lang="sh" />


================================================
FILE: docs/src/components/concepts/bloc/CounterBlocOnTransitionSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
sealed class CounterEvent {}

final class CounterIncrementPressed extends CounterEvent {}

class CounterBloc extends Bloc<CounterEvent, int> {
  CounterBloc() : super(0) {
    on<CounterIncrementPressed>((event, emit) => emit(state + 1));
  }

  @override
  void onChange(Change<int> change) {
    super.onChange(change);
    print(change);
  }

  @override
  void onTransition(Transition<CounterEvent, int> transition) {
    super.onTransition(transition);
    print(transition);
  }
}
`;
---

<Code code={code} lang="dart" title="counter_bloc.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterBlocSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
sealed class CounterEvent {}

final class CounterIncrementPressed extends CounterEvent {}

class CounterBloc extends Bloc<CounterEvent, int> {
  CounterBloc() : super(0);
}
`;
---

<Code code={code} lang="dart" title="counter_bloc.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterBlocStreamUsageSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
Future<void> main() async {
  final bloc = CounterBloc();
  final subscription = bloc.stream.listen(print); // 1
  bloc.add(CounterIncrementPressed());
  await Future.delayed(Duration.zero);
  await subscription.cancel();
  await bloc.close();
}
`;
---

<Code code={code} lang="dart" title="main.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterBlocUsageSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
Future<void> main() async {
  final bloc = CounterBloc();
  print(bloc.state); // 0
  bloc.add(CounterIncrementPressed());
  await Future.delayed(Duration.zero);
  print(bloc.state); // 1
  await bloc.close();
}
`;
---

<Code code={code} lang="dart" title="main.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterCubitBasicUsageSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
void main() {
  final cubit = CounterCubit();
  print(cubit.state); // 0
  cubit.increment();
  print(cubit.state); // 1
  cubit.close();
}
`;
---

<Code code={code} lang="dart" title="main.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterCubitFullSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class CounterCubit extends Cubit<int> {
  CounterCubit() : super(0);

  void increment() => emit(state + 1);
}
`;
---

<Code code={code} lang="dart" title="counter_cubit.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterCubitIncrementSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class CounterCubit extends Cubit<int> {
  CounterCubit() : super(0);

  void increment() => emit(state + 1);
}
`;
---

<Code code={code} lang="dart" title="counter_cubit.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterCubitInitialStateSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class CounterCubit extends Cubit<int> {
  CounterCubit(int initialState) : super(initialState);
}
`;
---

<Code code={code} lang="dart" title="counter_cubit.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterCubitInstantiationSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
final cubitA = CounterCubit(0); // state starts at 0
final cubitB = CounterCubit(10); // state starts at 10
`;
---

<Code code={code} lang="dart" title="main.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterCubitOnChangeOutputSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
Change { currentState: 0, nextState: 1 }
`;
---

<Code code={code} lang="sh" />


================================================
FILE: docs/src/components/concepts/bloc/CounterCubitOnChangeSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class CounterCubit extends Cubit<int> {
  CounterCubit() : super(0);

  void increment() => emit(state + 1);

  @override
  void onChange(Change<int> change) {
    super.onChange(change);
    print(change);
  }
}
`;
---

<Code code={code} lang="dart" title="counter_cubit.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterCubitOnChangeUsageSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
void main() {
  CounterCubit()
    ..increment()
    ..close();
}
`;
---

<Code code={code} lang="dart" title="main.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterCubitOnErrorOutputSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
Exception: increment error!
#0      CounterCubit.increment (file:///main.dart:7:56)
#1      main (file:///main.dart:41:7)
#2      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
#3      _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)

CounterCubit Exception: increment error!
#0      CounterCubit.increment (file:///main.dart:7:56)
#1      main (file:///main.dart:41:7)
#2      _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:297:19)
#3      _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)

CounterCubit Change { currentState: 0, nextState: 1 }
Change { currentState: 0, nextState: 1 }
`;
---

<Code code={code} lang="sh" />


================================================
FILE: docs/src/components/concepts/bloc/CounterCubitOnErrorSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class CounterCubit extends Cubit<int> {
  CounterCubit() : super(0);

  void increment() {
    addError(Exception('increment error!'), StackTrace.current);
    emit(state + 1);
  }

  @override
  void onChange(Change<int> change) {
    super.onChange(change);
    print(change);
  }

  @override
  void onError(Object error, StackTrace stackTrace) {
    print('$error, $stackTrace');
    super.onError(error, stackTrace);
  }
}
`;
---

<Code code={code} lang="dart" title="counter_cubit.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterCubitSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class CounterCubit extends Cubit<int> {
  CounterCubit() : super(0);
}
`;
---

<Code code={code} lang="dart" title="counter_cubit.dart" />


================================================
FILE: docs/src/components/concepts/bloc/CounterCubitStreamUsageSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
Future<void> main() async {
  final cubit = CounterCubit();
  final subscription = cubit.stream.listen(print); // 1
  cubit.increment();
  await Future.delayed(Duration.zero);
  await subscription.cancel();
  await cubit.close();
}
`;
---

<Code code={code} lang="dart" title="main.dart" />


================================================
FILE: docs/src/components/concepts/bloc/DebounceEventTransformerSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
EventTransformer<T> debounce<T>(Duration duration) {
  return (events, mapper) => events.debounceTime(duration).flatMap(mapper);
}

CounterBloc() : super(0) {
  on<Increment>(
    (event, emit) => emit(state + 1),
    /// Apply the custom \`EventTransformer\` to the \`EventHandler\`.
    transformer: debounce(const Duration(milliseconds: 300)),
  );
}
`;
---

<Code code={code} lang="dart" title="counter_bloc.dart" />


================================================
FILE: docs/src/components/concepts/bloc/SimpleBlocObserverOnChangeOutputSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
CounterCubit Change { currentState: 0, nextState: 1 }
Change { currentState: 0, nextState: 1 }
`;
---

<Code code={code} lang="sh" />


================================================
FILE: docs/src/components/concepts/bloc/SimpleBlocObserverOnChangeSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class SimpleBlocObserver extends BlocObserver {
  @override
  void onChange(BlocBase bloc, Change change) {
    super.onChange(bloc, change);
    print('\${bloc.runtimeType} $change');
  }
}
`;
---

<Code code={code} lang="dart" title="simple_bloc_observer.dart" />


================================================
FILE: docs/src/components/concepts/bloc/SimpleBlocObserverOnChangeUsageSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
void main() {
  Bloc.observer = SimpleBlocObserver();
  CounterCubit()
    ..increment()
    ..close();  
}
`;
---

<Code code={code} lang="dart" title="main.dart" />


================================================
FILE: docs/src/components/concepts/bloc/SimpleBlocObserverOnErrorSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class SimpleBlocObserver extends BlocObserver {
  @override
  void onChange(BlocBase bloc, Change change) {
    super.onChange(bloc, change);
    print('\${bloc.runtimeType} $change');
  }

  @override
  void onError(BlocBase bloc, Object error, StackTrace stackTrace) {
    print('\${bloc.runtimeType} $error $stackTrace');
    super.onError(bloc, error, stackTrace);
  }
}
`;
---

<Code code={code} lang="dart" title="simple_bloc_observer.dart" />


================================================
FILE: docs/src/components/concepts/bloc/SimpleBlocObserverOnEventOutputSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
CounterBloc Instance of 'CounterIncrementPressed'
Instance of 'CounterIncrementPressed'
CounterBloc Transition { currentState: 0, event: Instance of 'CounterIncrementPressed', nextState: 1 }
Transition { currentState: 0, event: Instance of 'CounterIncrementPressed', nextState: 1 }
CounterBloc Change { currentState: 0, nextState: 1 }
Change { currentState: 0, nextState: 1 }
`;
---

<Code code={code} lang="sh" />


================================================
FILE: docs/src/components/concepts/bloc/SimpleBlocObserverOnEventSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class SimpleBlocObserver extends BlocObserver {
  @override
  void onEvent(Bloc bloc, Object? event) {
    super.onEvent(bloc, event);
    print('\${bloc.runtimeType} $event');
  }

  @override
  void onChange(BlocBase bloc, Change change) {
    super.onChange(bloc, change);
    print('\${bloc.runtimeType} $change');
  }

  @override
  void onTransition(Bloc bloc, Transition transition) {
    super.onTransition(bloc, transition);
    print('\${bloc.runtimeType} $transition');
  }
}
`;
---

<Code code={code} lang="dart" title="simple_bloc_observer.dart" />


================================================
FILE: docs/src/components/concepts/bloc/SimpleBlocObserverOnTransitionOutputSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
CounterBloc Transition { currentState: 0, event: Instance of 'CounterIncrementPressed', nextState: 1 }
Transition { currentState: 0, event: Instance of 'CounterIncrementPressed', nextState: 1 }
CounterBloc Change { currentState: 0, nextState: 1 }
Change { currentState: 0, nextState: 1 }
`;
---

<Code code={code} lang="sh" />


================================================
FILE: docs/src/components/concepts/bloc/SimpleBlocObserverOnTransitionSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class SimpleBlocObserver extends BlocObserver {
  @override
  void onChange(BlocBase bloc, Change change) {
    super.onChange(bloc, change);
    print('\${bloc.runtimeType} $change');
  }

  @override
  void onTransition(Bloc bloc, Transition transition) {
    super.onTransition(bloc, transition);
    print('\${bloc.runtimeType} $transition');
  }

  @override
  void onError(BlocBase bloc, Object error, StackTrace stackTrace) {
    print('\${bloc.runtimeType} $error $stackTrace');
    super.onError(bloc, error, stackTrace);
  }
}
`;
---

<Code code={code} lang="dart" title="simple_bloc_observer.dart" />


================================================
FILE: docs/src/components/concepts/bloc/SimpleBlocObserverOnTransitionUsageSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
void main() {
  Bloc.observer = SimpleBlocObserver();
  CounterBloc()
    ..add(CounterIncrementPressed())
    ..close();  
}
`;
---

<Code code={code} lang="dart" title="main.dart" />


================================================
FILE: docs/src/components/concepts/bloc/StreamsMainSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
void main() async {
    /// Initialize a stream of integers 0-9
    Stream<int> stream = countStream(10);
    /// Compute the sum of the stream of integers
    int sum = await sumStream(stream);
    /// Print the sum
    print(sum); // 45
}
`;
---

<Code code={code} lang="dart" title="main.dart" />


================================================
FILE: docs/src/components/concepts/bloc/SumStreamSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
Future<int> sumStream(Stream<int> stream) async {
    int sum = 0;
    await for (int value in stream) {
        sum += value;
    }
    return sum;
}
`;
---

<Code code={code} lang="dart" title="sum_stream.dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/BlocBuilderConditionSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
BlocBuilder<BlocA, BlocAState>(
  buildWhen: (previousState, state) {
    // return true/false to determine whether or not
    // to rebuild the widget with state
  },
  builder: (context, state) {
    // return widget here based on BlocA's state
  },
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/BlocBuilderExplicitBlocSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
BlocBuilder<BlocA, BlocAState>(
  bloc: blocA, // provide the local bloc instance
  builder: (context, state) {
    // return widget here based on BlocA's state
  },
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/BlocBuilderSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
BlocBuilder<BlocA, BlocAState>(
  builder: (context, state) {
    // return widget here based on BlocA's state
  },
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/BlocConsumerConditionSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
BlocConsumer<BlocA, BlocAState>(
  listenWhen: (previous, current) {
    // return true/false to determine whether or not
    // to invoke listener with state
  },
  listener: (context, state) {
    // do stuff here based on BlocA's state
  },
  buildWhen: (previous, current) {
    // return true/false to determine whether or not
    // to rebuild the widget with state
  },
  builder: (context, state) {
    // return widget here based on BlocA's state
  },
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/BlocConsumerSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
BlocConsumer<BlocA, BlocAState>(
  listener: (context, state) {
    // do stuff here based on BlocA's state
  },
  builder: (context, state) {
    // return widget here based on BlocA's state
  },
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/BlocListenerConditionSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
BlocListener<BlocA, BlocAState>(
  listenWhen: (previousState, state) {
    // return true/false to determine whether or not
    // to call listener with state
  },
  listener: (context, state) {
    // do stuff here based on BlocA's state
  },
  child: const SizedBox(),
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/BlocListenerExplicitBlocSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
BlocListener<BlocA, BlocAState>(
  bloc: blocA,
  listener: (context, state) {
    // do stuff here based on BlocA's state
  },
  child: const SizedBox(),
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/BlocListenerSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
BlocListener<BlocA, BlocAState>(
  listener: (context, state) {
    // do stuff here based on BlocA's state
  },
  child: const SizedBox(),
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/BlocProviderEagerSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
BlocProvider(
  lazy: false,
  create: (BuildContext context) => BlocA(),
  child: ChildA(),
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/BlocProviderLookupSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
// with extensions
context.read<BlocA>();

// without extensions
BlocProvider.of<BlocA>(context);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/BlocProviderSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
BlocProvider(
  create: (BuildContext context) => BlocA(),
  child: ChildA(),
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/BlocProviderValueSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
BlocProvider.value(
  value: BlocProvider.of<BlocA>(context),
  child: ScreenA(),
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/BlocSelectorSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
BlocSelector<BlocA, BlocAState, SelectedState>(
  selector: (state) {
    // return selected state based on the provided state.
  },
  builder: (context, state) {
    // return widget here based on the selected state.
  },
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/CounterBlocSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
sealed class CounterEvent {}
final class CounterIncrementPressed extends CounterEvent {}
final class CounterDecrementPressed extends CounterEvent {}

class CounterBloc extends Bloc<CounterEvent, int> {
  CounterBloc() : super(0) {
    on<CounterIncrementPressed>((event, emit) => emit(state + 1));
    on<CounterDecrementPressed>((event, emit) => emit(state - 1));
  }
}
`;
---

<Code code={code} lang="dart" title="counter_bloc.dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/CounterMainSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
void main() => runApp(CounterApp());

class CounterApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: BlocProvider(
        create: (_) => CounterBloc(),
        child: CounterPage(),
      ),
    );
  }
}
`;
---

<Code code={code} lang="dart" title="main.dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/CounterPageSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
class CounterPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Counter')),
      body: BlocBuilder<CounterBloc, int>(
        builder: (context, count) {
          return Center(
            child: Text(
              '$count',
              style: TextStyle(fontSize: 24.0),
            ),
          );
        },
      ),
      floatingActionButton: Column(
        crossAxisAlignment: CrossAxisAlignment.end,
        mainAxisAlignment: MainAxisAlignment.end,
        children: <Widget>[
          Padding(
            padding: EdgeInsets.symmetric(vertical: 5.0),
            child: FloatingActionButton(
              child: Icon(Icons.add),
              onPressed: () => context.read<CounterBloc>().add(CounterIncrementPressed()),
            ),
          ),
          Padding(
            padding: EdgeInsets.symmetric(vertical: 5.0),
            child: FloatingActionButton(
              child: Icon(Icons.remove),
              onPressed: () => context.read<CounterBloc>().add(CounterDecrementPressed()),
            ),
          ),
        ],
      ),
    );
  }
}
`;
---

<Code code={code} lang="dart" title="counter_page.dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/MultiBlocListenerSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
MultiBlocListener(
  listeners: [
    BlocListener<BlocA, BlocAState>(
      listener: (context, state) {},
    ),
    BlocListener<BlocB, BlocBState>(
      listener: (context, state) {},
    ),
    BlocListener<BlocC, BlocCState>(
      listener: (context, state) {},
    ),
  ],
  child: ChildA(),
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/MultiBlocProviderSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
MultiBlocProvider(
  providers: [
    BlocProvider<BlocA>(
      create: (BuildContext context) => BlocA(),
    ),
    BlocProvider<BlocB>(
      create: (BuildContext context) => BlocB(),
    ),
    BlocProvider<BlocC>(
      create: (BuildContext context) => BlocC(),
    ),
  ],
  child: ChildA(),
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/MultiRepositoryProviderSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
MultiRepositoryProvider(
  providers: [
    RepositoryProvider<RepositoryA>(
      create: (context) => RepositoryA(),
    ),
    RepositoryProvider<RepositoryB>(
      create: (context) => RepositoryB(),
    ),
    RepositoryProvider<RepositoryC>(
      create: (context) => RepositoryC(),
    ),
  ],
  child: ChildA(),
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/NestedBlocListenerSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
BlocListener<BlocA, BlocAState>(
  listener: (context, state) {},
  child: BlocListener<BlocB, BlocBState>(
    listener: (context, state) {},
    child: BlocListener<BlocC, BlocCState>(
      listener: (context, state) {},
      child: ChildA(),
    ),
  ),
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/NestedBlocProviderSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
BlocProvider<BlocA>(
  create: (BuildContext context) => BlocA(),
  child: BlocProvider<BlocB>(
    create: (BuildContext context) => BlocB(),
    child: BlocProvider<BlocC>(
      create: (BuildContext context) => BlocC(),
      child: ChildA(),
    ),
  ),
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/NestedRepositoryProviderSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
RepositoryProvider<RepositoryA>(
  create: (context) => RepositoryA(),
  child: RepositoryProvider<RepositoryB>(
    create: (context) => RepositoryB(),
    child: RepositoryProvider<RepositoryC>(
      create: (context) => RepositoryC(),
      child: ChildA(),
    ),
  ),
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/RepositoryProviderDisposeSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
RepositoryProvider<RepositoryA>(
  create: (context) => RepositoryA(),
  dispose: (repository) => repository.dispose(),
  child: ChildA(),
);
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/RepositoryProviderLookupSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
// with extensions
context.read<RepositoryA>();

// without extensions
RepositoryProvider.of<RepositoryA>(context)
`;
---

<Code code={code} lang="dart" />


================================================
FILE: docs/src/components/concepts/flutter-bloc/RepositoryProviderSnippet.astro
================================================
---
import { Code } from '@astrojs/starlight/components';

const code = `
RepositoryProvider(
  create: (context) => 
Download .txt
gitextract_snx3nznv/

├── .github/
│   ├── CODEOWNERS
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── build.md
│   │   ├── chore.md
│   │   ├── ci.md
│   │   ├── config.yml
│   │   ├── documentation.md
│   │   ├── feature_request.md
│   │   ├── performance.md
│   │   ├── refactor.md
│   │   ├── revert.md
│   │   ├── style.md
│   │   └── test.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── actions/
│   │   ├── angular_dart_package/
│   │   │   └── action.yaml
│   │   ├── astro_site/
│   │   │   └── action.yaml
│   │   ├── dart_compile/
│   │   │   └── action.yaml
│   │   ├── dart_package/
│   │   │   └── action.yaml
│   │   └── flutter_package/
│   │       └── action.yaml
│   ├── codecov.yml
│   ├── dependabot.yml
│   └── workflows/
│       └── main.yaml
├── .gitignore
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── analysis_options.yaml
├── bricks/
│   ├── README.md
│   ├── bloc/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __brick__/
│   │   │   ├── {{name.snakeCase()}}_bloc.dart
│   │   │   ├── {{name.snakeCase()}}_event.dart
│   │   │   ├── {{name.snakeCase()}}_state.dart
│   │   │   ├── {{~ basic_bloc }}
│   │   │   ├── {{~ basic_event }}
│   │   │   ├── {{~ basic_state }}
│   │   │   ├── {{~ equatable_bloc }}
│   │   │   ├── {{~ equatable_event }}
│   │   │   ├── {{~ equatable_state }}
│   │   │   ├── {{~ freezed_bloc }}
│   │   │   ├── {{~ freezed_event }}
│   │   │   └── {{~ freezed_state }}
│   │   ├── brick.yaml
│   │   └── hooks/
│   │       ├── pre_gen.dart
│   │       └── pubspec.yaml
│   ├── cubit/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __brick__/
│   │   │   ├── {{name.snakeCase()}}_cubit.dart
│   │   │   ├── {{name.snakeCase()}}_state.dart
│   │   │   ├── {{~ basic_cubit }}
│   │   │   ├── {{~ basic_state }}
│   │   │   ├── {{~ equatable_cubit }}
│   │   │   ├── {{~ equatable_state }}
│   │   │   ├── {{~ freezed_cubit }}
│   │   │   └── {{~ freezed_state }}
│   │   ├── brick.yaml
│   │   └── hooks/
│   │       ├── pre_gen.dart
│   │       └── pubspec.yaml
│   ├── flutter_bloc_feature/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __brick__/
│   │   │   ├── {{name.snakeCase()}}/
│   │   │   │   ├── view/
│   │   │   │   │   ├── view.dart
│   │   │   │   │   └── {{name.snakeCase()}}_page.dart
│   │   │   │   └── {{name.snakeCase()}}.dart
│   │   │   ├── {{~ bloc_builder }}
│   │   │   ├── {{~ bloc_provider }}
│   │   │   ├── {{~ cubit_bloc_builder }}
│   │   │   └── {{~ cubit_bloc_provider }}
│   │   ├── brick.yaml
│   │   └── hooks/
│   │       ├── .gitignore
│   │       ├── post_gen.dart
│   │       ├── pre_gen.dart
│   │       └── pubspec.yaml
│   ├── hydrated_bloc/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __brick__/
│   │   │   ├── {{name.snakeCase()}}_bloc.dart
│   │   │   ├── {{name.snakeCase()}}_event.dart
│   │   │   ├── {{name.snakeCase()}}_state.dart
│   │   │   ├── {{~ basic_bloc }}
│   │   │   ├── {{~ basic_event }}
│   │   │   ├── {{~ basic_state }}
│   │   │   ├── {{~ equatable_bloc }}
│   │   │   ├── {{~ equatable_event }}
│   │   │   ├── {{~ equatable_state }}
│   │   │   ├── {{~ freezed_bloc }}
│   │   │   ├── {{~ freezed_event }}
│   │   │   └── {{~ freezed_state }}
│   │   ├── brick.yaml
│   │   └── hooks/
│   │       ├── pre_gen.dart
│   │       └── pubspec.yaml
│   ├── hydrated_cubit/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __brick__/
│   │   │   ├── {{name.snakeCase()}}_cubit.dart
│   │   │   ├── {{name.snakeCase()}}_state.dart
│   │   │   ├── {{~ basic_cubit }}
│   │   │   ├── {{~ basic_state }}
│   │   │   ├── {{~ equatable_cubit }}
│   │   │   ├── {{~ equatable_state }}
│   │   │   ├── {{~ freezed_cubit }}
│   │   │   └── {{~ freezed_state }}
│   │   ├── brick.yaml
│   │   └── hooks/
│   │       ├── pre_gen.dart
│   │       └── pubspec.yaml
│   ├── mason.yaml
│   ├── replay_bloc/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── __brick__/
│   │   │   ├── {{name.snakeCase()}}_bloc.dart
│   │   │   ├── {{name.snakeCase()}}_event.dart
│   │   │   ├── {{name.snakeCase()}}_state.dart
│   │   │   ├── {{~ basic_bloc }}
│   │   │   ├── {{~ basic_event }}
│   │   │   ├── {{~ basic_state }}
│   │   │   ├── {{~ equatable_bloc }}
│   │   │   ├── {{~ equatable_event }}
│   │   │   ├── {{~ equatable_state }}
│   │   │   ├── {{~ freezed_bloc }}
│   │   │   ├── {{~ freezed_event }}
│   │   │   └── {{~ freezed_state }}
│   │   ├── brick.yaml
│   │   └── hooks/
│   │       ├── pre_gen.dart
│   │       └── pubspec.yaml
│   └── replay_cubit/
│       ├── CHANGELOG.md
│       ├── LICENSE
│       ├── README.md
│       ├── __brick__/
│       │   ├── {{name.snakeCase()}}_cubit.dart
│       │   ├── {{name.snakeCase()}}_state.dart
│       │   ├── {{~ basic_cubit }}
│       │   ├── {{~ basic_state }}
│       │   ├── {{~ equatable_cubit }}
│       │   ├── {{~ equatable_state }}
│       │   ├── {{~ freezed_cubit }}
│       │   └── {{~ freezed_state }}
│       ├── brick.yaml
│       └── hooks/
│           ├── pre_gen.dart
│           └── pubspec.yaml
├── docs/
│   ├── .gitignore
│   ├── .prettierignore
│   ├── .prettierrc
│   ├── astro.config.mjs
│   ├── package.json
│   ├── public/
│   │   └── CNAME
│   ├── src/
│   │   ├── components/
│   │   │   ├── architecture/
│   │   │   │   ├── AppIdeaRankingBlocSnippet.astro
│   │   │   │   ├── AppIdeasRepositorySnippet.astro
│   │   │   │   ├── BlocLooseCouplingPresentationSnippet.astro
│   │   │   │   ├── BlocTightCouplingSnippet.astro
│   │   │   │   ├── BusinessLogicComponentSnippet.astro
│   │   │   │   ├── DataProviderSnippet.astro
│   │   │   │   ├── PresentationComponentSnippet.astro
│   │   │   │   └── RepositorySnippet.astro
│   │   │   ├── code/
│   │   │   │   └── RemoteCode.astro
│   │   │   ├── concepts/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── AuthenticationChangeSnippet.astro
│   │   │   │   │   ├── AuthenticationStateSnippet.astro
│   │   │   │   │   ├── AuthenticationTransitionSnippet.astro
│   │   │   │   │   ├── CountStreamSnippet.astro
│   │   │   │   │   ├── CounterBlocEventHandlerSnippet.astro
│   │   │   │   │   ├── CounterBlocFullSnippet.astro
│   │   │   │   │   ├── CounterBlocIncrementSnippet.astro
│   │   │   │   │   ├── CounterBlocOnChangeOutputSnippet.astro
│   │   │   │   │   ├── CounterBlocOnChangeSnippet.astro
│   │   │   │   │   ├── CounterBlocOnChangeUsageSnippet.astro
│   │   │   │   │   ├── CounterBlocOnErrorOutputSnippet.astro
│   │   │   │   │   ├── CounterBlocOnErrorSnippet.astro
│   │   │   │   │   ├── CounterBlocOnEventSnippet.astro
│   │   │   │   │   ├── CounterBlocOnTransitionOutputSnippet.astro
│   │   │   │   │   ├── CounterBlocOnTransitionSnippet.astro
│   │   │   │   │   ├── CounterBlocSnippet.astro
│   │   │   │   │   ├── CounterBlocStreamUsageSnippet.astro
│   │   │   │   │   ├── CounterBlocUsageSnippet.astro
│   │   │   │   │   ├── CounterCubitBasicUsageSnippet.astro
│   │   │   │   │   ├── CounterCubitFullSnippet.astro
│   │   │   │   │   ├── CounterCubitIncrementSnippet.astro
│   │   │   │   │   ├── CounterCubitInitialStateSnippet.astro
│   │   │   │   │   ├── CounterCubitInstantiationSnippet.astro
│   │   │   │   │   ├── CounterCubitOnChangeOutputSnippet.astro
│   │   │   │   │   ├── CounterCubitOnChangeSnippet.astro
│   │   │   │   │   ├── CounterCubitOnChangeUsageSnippet.astro
│   │   │   │   │   ├── CounterCubitOnErrorOutputSnippet.astro
│   │   │   │   │   ├── CounterCubitOnErrorSnippet.astro
│   │   │   │   │   ├── CounterCubitSnippet.astro
│   │   │   │   │   ├── CounterCubitStreamUsageSnippet.astro
│   │   │   │   │   ├── DebounceEventTransformerSnippet.astro
│   │   │   │   │   ├── SimpleBlocObserverOnChangeOutputSnippet.astro
│   │   │   │   │   ├── SimpleBlocObserverOnChangeSnippet.astro
│   │   │   │   │   ├── SimpleBlocObserverOnChangeUsageSnippet.astro
│   │   │   │   │   ├── SimpleBlocObserverOnErrorSnippet.astro
│   │   │   │   │   ├── SimpleBlocObserverOnEventOutputSnippet.astro
│   │   │   │   │   ├── SimpleBlocObserverOnEventSnippet.astro
│   │   │   │   │   ├── SimpleBlocObserverOnTransitionOutputSnippet.astro
│   │   │   │   │   ├── SimpleBlocObserverOnTransitionSnippet.astro
│   │   │   │   │   ├── SimpleBlocObserverOnTransitionUsageSnippet.astro
│   │   │   │   │   ├── StreamsMainSnippet.astro
│   │   │   │   │   └── SumStreamSnippet.astro
│   │   │   │   └── flutter-bloc/
│   │   │   │       ├── BlocBuilderConditionSnippet.astro
│   │   │   │       ├── BlocBuilderExplicitBlocSnippet.astro
│   │   │   │       ├── BlocBuilderSnippet.astro
│   │   │   │       ├── BlocConsumerConditionSnippet.astro
│   │   │   │       ├── BlocConsumerSnippet.astro
│   │   │   │       ├── BlocListenerConditionSnippet.astro
│   │   │   │       ├── BlocListenerExplicitBlocSnippet.astro
│   │   │   │       ├── BlocListenerSnippet.astro
│   │   │   │       ├── BlocProviderEagerSnippet.astro
│   │   │   │       ├── BlocProviderLookupSnippet.astro
│   │   │   │       ├── BlocProviderSnippet.astro
│   │   │   │       ├── BlocProviderValueSnippet.astro
│   │   │   │       ├── BlocSelectorSnippet.astro
│   │   │   │       ├── CounterBlocSnippet.astro
│   │   │   │       ├── CounterMainSnippet.astro
│   │   │   │       ├── CounterPageSnippet.astro
│   │   │   │       ├── MultiBlocListenerSnippet.astro
│   │   │   │       ├── MultiBlocProviderSnippet.astro
│   │   │   │       ├── MultiRepositoryProviderSnippet.astro
│   │   │   │       ├── NestedBlocListenerSnippet.astro
│   │   │   │       ├── NestedBlocProviderSnippet.astro
│   │   │   │       ├── NestedRepositoryProviderSnippet.astro
│   │   │   │       ├── RepositoryProviderDisposeSnippet.astro
│   │   │   │       ├── RepositoryProviderLookupSnippet.astro
│   │   │   │       ├── RepositoryProviderSnippet.astro
│   │   │   │       ├── WeatherAppSnippet.astro
│   │   │   │       ├── WeatherMainSnippet.astro
│   │   │   │       ├── WeatherPageSnippet.astro
│   │   │   │       └── WeatherRepositorySnippet.astro
│   │   │   ├── faqs/
│   │   │   │   ├── BlocExternalForEachSnippet.astro
│   │   │   │   ├── BlocInternalAddEventSnippet.astro
│   │   │   │   ├── BlocInternalEventSnippet.astro
│   │   │   │   ├── BlocProviderBad1Snippet.astro
│   │   │   │   ├── BlocProviderGood1Snippet.astro
│   │   │   │   ├── BlocProviderGood2Snippet.astro
│   │   │   │   ├── EquatableBlocTestSnippet.astro
│   │   │   │   ├── EquatableEmitSnippet.astro
│   │   │   │   ├── NoEquatableBlocTestSnippet.astro
│   │   │   │   ├── SingleStateSnippet.astro
│   │   │   │   ├── SingleStateUsageSnippet.astro
│   │   │   │   ├── StateNotUpdatingBad1Snippet.astro
│   │   │   │   ├── StateNotUpdatingBad2Snippet.astro
│   │   │   │   ├── StateNotUpdatingBad3Snippet.astro
│   │   │   │   ├── StateNotUpdatingGood1Snippet.astro
│   │   │   │   ├── StateNotUpdatingGood2Snippet.astro
│   │   │   │   └── StateNotUpdatingGood3Snippet.astro
│   │   │   ├── getting-started/
│   │   │   │   ├── ImportTabs.astro
│   │   │   │   └── InstallationTabs.astro
│   │   │   ├── landing/
│   │   │   │   ├── Card.astro
│   │   │   │   ├── Discord.astro
│   │   │   │   ├── ListCard.astro
│   │   │   │   ├── SplitCard.astro
│   │   │   │   └── SponsorsGrid.astro
│   │   │   ├── lint/
│   │   │   │   ├── BlocLintBasicAnalysisOptionsSnippet.astro
│   │   │   │   ├── BlocLintChangingSeveritySnippet.astro
│   │   │   │   ├── BlocLintDisablingRulesSnippet.astro
│   │   │   │   ├── BlocLintEnablingRulesSnippet.astro
│   │   │   │   ├── BlocLintExcludingFilesSnippet.astro
│   │   │   │   ├── BlocLintIgnoreForFileSnippet.astro
│   │   │   │   ├── BlocLintIgnoreForLineSnippet.astro
│   │   │   │   ├── BlocLintMultipleRecommendedAnalysisOptionsSnippet.astro
│   │   │   │   ├── BlocLintRecommendedAnalysisOptionsSnippet.astro
│   │   │   │   ├── BlocToolsLintHelpOutputSnippet.astro
│   │   │   │   ├── ImportFlutterInfoOutputSnippet.astro
│   │   │   │   ├── ImportFlutterInfoSnippet.mdx
│   │   │   │   ├── ImportFlutterWarningOutputSnippet.astro
│   │   │   │   ├── ImportFlutterWarningSnippet.mdx
│   │   │   │   ├── InstallBlocLintSnippet.astro
│   │   │   │   ├── InstallBlocToolsSnippet.astro
│   │   │   │   ├── RunBlocLintCounterCubitSnippet.astro
│   │   │   │   ├── RunBlocLintInCurrentDirectorySnippet.astro
│   │   │   │   └── RunBlocLintInSrcTestSnippet.astro
│   │   │   ├── lint-rules/
│   │   │   │   ├── EnableRuleSnippet.astro
│   │   │   │   ├── avoid_build_context_extensions/
│   │   │   │   │   ├── BadSnippet.mdx
│   │   │   │   │   └── GoodSnippet.astro
│   │   │   │   ├── avoid_flutter_imports/
│   │   │   │   │   ├── BadSnippet.mdx
│   │   │   │   │   └── GoodSnippet.astro
│   │   │   │   ├── avoid_public_bloc_methods/
│   │   │   │   │   ├── BadSnippet.mdx
│   │   │   │   │   └── GoodSnippet.astro
│   │   │   │   ├── avoid_public_fields/
│   │   │   │   │   ├── BadSnippet.mdx
│   │   │   │   │   └── GoodSnippet.astro
│   │   │   │   ├── prefer_bloc/
│   │   │   │   │   ├── BadSnippet.mdx
│   │   │   │   │   └── GoodSnippet.astro
│   │   │   │   ├── prefer_build_context_extensions/
│   │   │   │   │   ├── BadSnippet.mdx
│   │   │   │   │   └── GoodSnippet.astro
│   │   │   │   ├── prefer_cubit/
│   │   │   │   │   ├── BadSnippet.mdx
│   │   │   │   │   └── GoodSnippet.astro
│   │   │   │   ├── prefer_file_naming_conventions/
│   │   │   │   │   ├── BadSnippet.mdx
│   │   │   │   │   └── GoodSnippet.astro
│   │   │   │   └── prefer_void_public_cubit_methods/
│   │   │   │       ├── BadSnippet.mdx
│   │   │   │       └── GoodSnippet.astro
│   │   │   ├── modeling-state/
│   │   │   │   ├── ConcreteClassAndStatusEnumSnippet.astro
│   │   │   │   └── SealedClassAndSubclassesSnippet.astro
│   │   │   ├── naming-conventions/
│   │   │   │   ├── EventExamplesBad1Snippet.astro
│   │   │   │   ├── EventExamplesGood1Snippet.astro
│   │   │   │   ├── SingleStateExamplesGood1Snippet.astro
│   │   │   │   ├── StateExamplesBad1Snippet.astro
│   │   │   │   └── StateExamplesGood1Snippet.astro
│   │   │   ├── testing/
│   │   │   │   ├── AddDevDependenciesSnippet.astro
│   │   │   │   ├── CounterBlocSnippet.astro
│   │   │   │   ├── CounterBlocTestBlocTestSnippet.astro
│   │   │   │   ├── CounterBlocTestImportsSnippet.astro
│   │   │   │   ├── CounterBlocTestInitialStateSnippet.astro
│   │   │   │   ├── CounterBlocTestMainSnippet.astro
│   │   │   │   └── CounterBlocTestSetupSnippet.astro
│   │   │   └── tutorials/
│   │   │       ├── FlutterPubGetSnippet.astro
│   │   │       ├── flutter-counter/
│   │   │       │   └── FlutterCreateSnippet.astro
│   │   │       ├── flutter-firebase-login/
│   │   │       │   └── FlutterCreateSnippet.astro
│   │   │       ├── flutter-infinite-list/
│   │   │       │   ├── FlutterCreateSnippet.astro
│   │   │       │   ├── FlutterPubGetSnippet.astro
│   │   │       │   ├── PostBlocInitialStateSnippet.astro
│   │   │       │   ├── PostBlocOnPostFetchedSnippet.astro
│   │   │       │   ├── PostBlocTransformerSnippet.astro
│   │   │       │   └── PostsJsonSnippet.astro
│   │   │       ├── flutter-login/
│   │   │       │   └── FlutterCreateSnippet.astro
│   │   │       ├── flutter-timer/
│   │   │       │   ├── ActionsSnippet.astro
│   │   │       │   ├── BackgroundSnippet.astro
│   │   │       │   ├── FlutterCreateSnippet.astro
│   │   │       │   ├── TimerBlocEmptySnippet.astro
│   │   │       │   ├── TimerBlocInitialStateSnippet.astro
│   │   │       │   ├── TimerBlocOnPausedSnippet.astro
│   │   │       │   ├── TimerBlocOnResumedSnippet.astro
│   │   │       │   ├── TimerBlocOnStartedSnippet.astro
│   │   │       │   ├── TimerBlocOnTickedSnippet.astro
│   │   │       │   ├── TimerBlocTickerSnippet.astro
│   │   │       │   └── TimerPageSnippet.astro
│   │   │       ├── flutter-todos/
│   │   │       │   ├── ActivateVeryGoodCLISnippet.astro
│   │   │       │   ├── EditTodosPageTreeSnippet.astro
│   │   │       │   ├── FlutterCreatePackagesSnippet.astro
│   │   │       │   ├── FlutterCreateSnippet.astro
│   │   │       │   ├── HomePageTreeSnippet.astro
│   │   │       │   ├── ProjectStructureSnippet.astro
│   │   │       │   ├── StatsPageTreeSnippet.astro
│   │   │       │   ├── TodosOverviewPageTreeSnippet.astro
│   │   │       │   └── VeryGoodPackagesGetSnippet.astro
│   │   │       ├── flutter-weather/
│   │   │       │   ├── BuildRunnerBuildSnippet.astro
│   │   │       │   ├── FeatureTreeSnippet.astro
│   │   │       │   ├── FlutterCreateApiClientSnippet.astro
│   │   │       │   ├── FlutterCreateRepositorySnippet.astro
│   │   │       │   ├── FlutterCreateSnippet.astro
│   │   │       │   ├── FlutterTestCoverageSnippet.astro
│   │   │       │   ├── GetWeatherMethodSnippet.astro
│   │   │       │   ├── LocationDartSnippet.astro
│   │   │       │   ├── LocationJsonSnippet.astro
│   │   │       │   ├── LocationSearchMethodSnippet.astro
│   │   │       │   ├── OpenMeteoApiClientTreeSnippet.astro
│   │   │       │   ├── OpenMeteoLibrarySnippet.astro
│   │   │       │   ├── OpenMeteoModelsBarrelTreeSnippet.astro
│   │   │       │   ├── OpenMeteoModelsTreeSnippet.astro
│   │   │       │   ├── RepositoryModelsBarrelTreeSnippet.astro
│   │   │       │   ├── WeatherBarrelDartSnippet.astro
│   │   │       │   ├── WeatherCubitTreeSnippet.astro
│   │   │       │   ├── WeatherDartSnippet.astro
│   │   │       │   ├── WeatherJsonSnippet.astro
│   │   │       │   └── WeatherRepositoryLibrarySnippet.astro
│   │   │       ├── github-search/
│   │   │       │   ├── ActivateStagehandSnippet.astro
│   │   │       │   ├── DartPubGetSnippet.astro
│   │   │       │   ├── FlutterCreateSnippet.astro
│   │   │       │   ├── SetupSnippet.astro
│   │   │       │   └── StagehandSnippet.astro
│   │   │       └── ngdart-counter/
│   │   │           ├── ActivateStagehandSnippet.astro
│   │   │           ├── InstallDependenciesSnippet.astro
│   │   │           └── StagehandSnippet.astro
│   │   ├── content/
│   │   │   ├── config.ts
│   │   │   └── docs/
│   │   │       ├── ar/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── faqs.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── lint/
│   │   │       │   │   ├── configuration.mdx
│   │   │       │   │   ├── customizing-rules.mdx
│   │   │       │   │   ├── index.mdx
│   │   │       │   │   └── installation.mdx
│   │   │       │   ├── lint-rules/
│   │   │       │   │   ├── avoid_build_context_extensions.mdx
│   │   │       │   │   ├── avoid_flutter_imports.mdx
│   │   │       │   │   ├── avoid_public_bloc_methods.mdx
│   │   │       │   │   ├── avoid_public_fields.mdx
│   │   │       │   │   ├── prefer_bloc.mdx
│   │   │       │   │   ├── prefer_build_context_extensions.mdx
│   │   │       │   │   ├── prefer_cubit.mdx
│   │   │       │   │   ├── prefer_file_naming_conventions.mdx
│   │   │       │   │   └── prefer_void_public_cubit_methods.mdx
│   │   │       │   ├── migration.mdx
│   │   │       │   ├── modeling-state.mdx
│   │   │       │   ├── naming-conventions.mdx
│   │   │       │   ├── testing.mdx
│   │   │       │   ├── tutorials/
│   │   │       │   │   ├── flutter-counter.mdx
│   │   │       │   │   ├── flutter-firebase-login.mdx
│   │   │       │   │   ├── flutter-infinite-list.mdx
│   │   │       │   │   ├── flutter-login.mdx
│   │   │       │   │   ├── flutter-timer.mdx
│   │   │       │   │   ├── flutter-todos.mdx
│   │   │       │   │   ├── flutter-weather.mdx
│   │   │       │   │   ├── github-search.mdx
│   │   │       │   │   └── ngdart-counter.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── architecture.mdx
│   │   │       ├── bloc-concepts.mdx
│   │   │       ├── bn/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── faqs.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── migration.mdx
│   │   │       │   ├── modeling-state.mdx
│   │   │       │   ├── naming-conventions.mdx
│   │   │       │   ├── testing.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── de/
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── es/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── faqs.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── migration.mdx
│   │   │       │   ├── modeling-state.mdx
│   │   │       │   ├── naming-conventions.mdx
│   │   │       │   ├── testing.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── fa/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── faqs.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── lint/
│   │   │       │   │   ├── configuration.mdx
│   │   │       │   │   ├── customizing-rules.mdx
│   │   │       │   │   ├── index.mdx
│   │   │       │   │   └── installation.mdx
│   │   │       │   ├── lint-rules/
│   │   │       │   │   ├── avoid_build_context_extensions.mdx
│   │   │       │   │   ├── avoid_flutter_imports.mdx
│   │   │       │   │   ├── avoid_public_bloc_methods.mdx
│   │   │       │   │   ├── avoid_public_fields.mdx
│   │   │       │   │   ├── prefer_bloc.mdx
│   │   │       │   │   ├── prefer_build_context_extensions.mdx
│   │   │       │   │   ├── prefer_cubit.mdx
│   │   │       │   │   ├── prefer_file_naming_conventions.mdx
│   │   │       │   │   └── prefer_void_public_cubit_methods.mdx
│   │   │       │   ├── migration.mdx
│   │   │       │   ├── modeling-state.mdx
│   │   │       │   ├── naming-conventions.mdx
│   │   │       │   ├── testing.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── faqs.mdx
│   │   │       ├── fil/
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── flutter-bloc-concepts.mdx
│   │   │       ├── fr/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── lint/
│   │   │       │   │   ├── index.mdx
│   │   │       │   │   └── installation.mdx
│   │   │       │   ├── testing.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── getting-started.mdx
│   │   │       ├── index.mdx
│   │   │       ├── it/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── faqs.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── lint/
│   │   │       │   │   ├── configuration.mdx
│   │   │       │   │   ├── customizing-rules.mdx
│   │   │       │   │   ├── index.mdx
│   │   │       │   │   └── installation.mdx
│   │   │       │   ├── lint-rules/
│   │   │       │   │   ├── avoid_build_context_extensions.mdx
│   │   │       │   │   ├── avoid_flutter_imports.mdx
│   │   │       │   │   ├── avoid_public_bloc_methods.mdx
│   │   │       │   │   ├── avoid_public_fields.mdx
│   │   │       │   │   ├── prefer_bloc.mdx
│   │   │       │   │   ├── prefer_build_context_extensions.mdx
│   │   │       │   │   ├── prefer_cubit.mdx
│   │   │       │   │   ├── prefer_file_naming_conventions.mdx
│   │   │       │   │   └── prefer_void_public_cubit_methods.mdx
│   │   │       │   ├── migration.mdx
│   │   │       │   ├── modeling-state.mdx
│   │   │       │   ├── naming-conventions.mdx
│   │   │       │   ├── testing.mdx
│   │   │       │   ├── tutorials/
│   │   │       │   │   ├── flutter-counter.mdx
│   │   │       │   │   ├── flutter-firebase-login.mdx
│   │   │       │   │   ├── flutter-infinite-list.mdx
│   │   │       │   │   ├── flutter-login.mdx
│   │   │       │   │   ├── flutter-timer.mdx
│   │   │       │   │   ├── flutter-todos.mdx
│   │   │       │   │   ├── flutter-weather.mdx
│   │   │       │   │   ├── github-search.mdx
│   │   │       │   │   └── ngdart-counter.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── ja/
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── ko/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── faqs.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── modeling-state.mdx
│   │   │       │   ├── naming-conventions.mdx
│   │   │       │   ├── testing.mdx
│   │   │       │   ├── tutorials/
│   │   │       │   │   ├── flutter-counter.mdx
│   │   │       │   │   ├── flutter-firebase-login.mdx
│   │   │       │   │   ├── flutter-infinite-list.mdx
│   │   │       │   │   ├── flutter-login.mdx
│   │   │       │   │   ├── flutter-timer.mdx
│   │   │       │   │   ├── flutter-todos.mdx
│   │   │       │   │   ├── flutter-weather.mdx
│   │   │       │   │   └── github-search.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── lint/
│   │   │       │   ├── configuration.mdx
│   │   │       │   ├── customizing-rules.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   └── installation.mdx
│   │   │       ├── lint-rules/
│   │   │       │   ├── avoid_build_context_extensions.mdx
│   │   │       │   ├── avoid_flutter_imports.mdx
│   │   │       │   ├── avoid_public_bloc_methods.mdx
│   │   │       │   ├── avoid_public_fields.mdx
│   │   │       │   ├── prefer_bloc.mdx
│   │   │       │   ├── prefer_build_context_extensions.mdx
│   │   │       │   ├── prefer_cubit.mdx
│   │   │       │   ├── prefer_file_naming_conventions.mdx
│   │   │       │   └── prefer_void_public_cubit_methods.mdx
│   │   │       ├── migration.mdx
│   │   │       ├── modeling-state.mdx
│   │   │       ├── naming-conventions.mdx
│   │   │       ├── pt-br/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── modeling-state.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── ru/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── faqs.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── lint/
│   │   │       │   │   ├── configuration.mdx
│   │   │       │   │   ├── customizing-rules.mdx
│   │   │       │   │   ├── index.mdx
│   │   │       │   │   └── installation.mdx
│   │   │       │   ├── lint-rules/
│   │   │       │   │   ├── avoid_build_context_extensions.mdx
│   │   │       │   │   ├── avoid_flutter_imports.mdx
│   │   │       │   │   ├── avoid_public_bloc_methods.mdx
│   │   │       │   │   ├── avoid_public_fields.mdx
│   │   │       │   │   ├── prefer_bloc.mdx
│   │   │       │   │   ├── prefer_build_context_extensions.mdx
│   │   │       │   │   ├── prefer_cubit.mdx
│   │   │       │   │   ├── prefer_file_naming_conventions.mdx
│   │   │       │   │   └── prefer_void_public_cubit_methods.mdx
│   │   │       │   ├── migration.mdx
│   │   │       │   ├── modeling-state.mdx
│   │   │       │   ├── naming-conventions.mdx
│   │   │       │   ├── testing.mdx
│   │   │       │   ├── tutorials/
│   │   │       │   │   ├── flutter-counter.mdx
│   │   │       │   │   ├── flutter-firebase-login.mdx
│   │   │       │   │   ├── flutter-infinite-list.mdx
│   │   │       │   │   ├── flutter-login.mdx
│   │   │       │   │   ├── flutter-timer.mdx
│   │   │       │   │   ├── flutter-todos.mdx
│   │   │       │   │   ├── flutter-weather.mdx
│   │   │       │   │   ├── github-search.mdx
│   │   │       │   │   └── ngdart-counter.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── testing.mdx
│   │   │       ├── tutorials/
│   │   │       │   ├── flutter-counter.mdx
│   │   │       │   ├── flutter-firebase-login.mdx
│   │   │       │   ├── flutter-infinite-list.mdx
│   │   │       │   ├── flutter-login.mdx
│   │   │       │   ├── flutter-timer.mdx
│   │   │       │   ├── flutter-todos.mdx
│   │   │       │   ├── flutter-weather.mdx
│   │   │       │   ├── github-search.mdx
│   │   │       │   └── ngdart-counter.mdx
│   │   │       ├── uk/
│   │   │       │   ├── architecture.mdx
│   │   │       │   ├── bloc-concepts.mdx
│   │   │       │   ├── faqs.mdx
│   │   │       │   ├── flutter-bloc-concepts.mdx
│   │   │       │   ├── getting-started.mdx
│   │   │       │   ├── index.mdx
│   │   │       │   ├── lint/
│   │   │       │   │   ├── configuration.mdx
│   │   │       │   │   ├── customizing-rules.mdx
│   │   │       │   │   ├── index.mdx
│   │   │       │   │   └── installation.mdx
│   │   │       │   ├── lint-rules/
│   │   │       │   │   ├── avoid_build_context_extensions.mdx
│   │   │       │   │   ├── avoid_flutter_imports.mdx
│   │   │       │   │   ├── avoid_public_bloc_methods.mdx
│   │   │       │   │   ├── avoid_public_fields.mdx
│   │   │       │   │   ├── prefer_bloc.mdx
│   │   │       │   │   ├── prefer_build_context_extensions.mdx
│   │   │       │   │   ├── prefer_cubit.mdx
│   │   │       │   │   ├── prefer_file_naming_conventions.mdx
│   │   │       │   │   └── prefer_void_public_cubit_methods.mdx
│   │   │       │   ├── migration.mdx
│   │   │       │   ├── modeling-state.mdx
│   │   │       │   ├── naming-conventions.mdx
│   │   │       │   ├── testing.mdx
│   │   │       │   ├── tutorials/
│   │   │       │   │   ├── flutter-counter.mdx
│   │   │       │   │   ├── flutter-firebase-login.mdx
│   │   │       │   │   ├── flutter-infinite-list.mdx
│   │   │       │   │   ├── flutter-login.mdx
│   │   │       │   │   ├── flutter-timer.mdx
│   │   │       │   │   ├── flutter-todos.mdx
│   │   │       │   │   ├── flutter-weather.mdx
│   │   │       │   │   ├── github-search.mdx
│   │   │       │   │   └── ngdart-counter.mdx
│   │   │       │   └── why-bloc.mdx
│   │   │       ├── why-bloc.mdx
│   │   │       └── zh-cn/
│   │   │           ├── bloc-concepts.mdx
│   │   │           ├── flutter-bloc-concepts.mdx
│   │   │           ├── getting-started.mdx
│   │   │           ├── index.mdx
│   │   │           ├── tutorials/
│   │   │           │   └── flutter-counter.mdx
│   │   │           └── why-bloc.mdx
│   │   ├── env.d.ts
│   │   ├── styles/
│   │   │   └── landing.css
│   │   └── tailwind.css
│   └── tsconfig.json
├── examples/
│   ├── angular_counter/
│   │   ├── .gitignore
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── lib/
│   │   │   ├── app_component.css
│   │   │   ├── app_component.dart
│   │   │   ├── app_component.html
│   │   │   └── src/
│   │   │       └── counter_page/
│   │   │           ├── counter_bloc.dart
│   │   │           ├── counter_page_component.css
│   │   │           ├── counter_page_component.dart
│   │   │           └── counter_page_component.html
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   └── web/
│   │       ├── index.html
│   │       ├── main.dart
│   │       └── styles.css
│   ├── bloc_concurrency_visualizer/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── lib/
│   │   │   ├── main.dart
│   │   │   └── timeline/
│   │   │       ├── bloc/
│   │   │       │   ├── timeline_bloc.dart
│   │   │       │   ├── timeline_event.dart
│   │   │       │   └── timeline_state.dart
│   │   │       ├── models/
│   │   │       │   ├── models.dart
│   │   │       │   ├── task.dart
│   │   │       │   └── transformer.dart
│   │   │       ├── timeline.dart
│   │   │       └── view/
│   │   │           └── timeline_page.dart
│   │   ├── pubspec.yaml
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_bloc_with_stream/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   └── .gitignore
│   │   ├── lib/
│   │   │   ├── bloc/
│   │   │   │   ├── ticker_bloc.dart
│   │   │   │   ├── ticker_event.dart
│   │   │   │   └── ticker_state.dart
│   │   │   ├── main.dart
│   │   │   └── ticker/
│   │   │       └── ticker.dart
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── app_test.dart
│   │   │   ├── bloc/
│   │   │   │   ├── ticker_bloc_test.dart
│   │   │   │   ├── ticker_event_test.dart
│   │   │   │   └── ticker_state_test.dart
│   │   │   └── ticker_page_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_complex_list/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   └── .gitignore
│   │   ├── lib/
│   │   │   ├── app.dart
│   │   │   ├── complex_list/
│   │   │   │   ├── complex_list.dart
│   │   │   │   ├── cubit/
│   │   │   │   │   ├── complex_list_cubit.dart
│   │   │   │   │   └── complex_list_state.dart
│   │   │   │   ├── models/
│   │   │   │   │   ├── item.dart
│   │   │   │   │   └── models.dart
│   │   │   │   └── view/
│   │   │   │       ├── complex_list_page.dart
│   │   │   │       └── view.dart
│   │   │   ├── main.dart
│   │   │   ├── repository.dart
│   │   │   └── simple_bloc_observer.dart
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── app_test.dart
│   │   │   ├── complex_list/
│   │   │   │   ├── cubit/
│   │   │   │   │   ├── complex_list_cubit_test.dart
│   │   │   │   │   └── complex_list_state_test.dart
│   │   │   │   ├── models/
│   │   │   │   │   └── item_test.dart
│   │   │   │   └── view/
│   │   │   │       └── complex_list_page_test.dart
│   │   │   └── repository_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_counter/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── integration_test/
│   │   │   └── app_test.dart
│   │   ├── lib/
│   │   │   ├── app.dart
│   │   │   ├── counter/
│   │   │   │   ├── counter.dart
│   │   │   │   ├── cubit/
│   │   │   │   │   └── counter_cubit.dart
│   │   │   │   └── view/
│   │   │   │       ├── counter_page.dart
│   │   │   │       ├── counter_view.dart
│   │   │   │       └── view.dart
│   │   │   ├── counter_observer.dart
│   │   │   └── main.dart
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── app_test.dart
│   │   │   └── counter/
│   │   │       ├── cubit/
│   │   │       │   └── counter_cubit_test.dart
│   │   │       └── view/
│   │   │           ├── counter_page_test.dart
│   │   │           └── counter_view_test.dart
│   │   ├── test_driver/
│   │   │   └── integration_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_dynamic_form/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   └── .gitignore
│   │   ├── lib/
│   │   │   ├── app.dart
│   │   │   ├── main.dart
│   │   │   ├── new_car/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── new_car_bloc.dart
│   │   │   │   │   ├── new_car_event.dart
│   │   │   │   │   └── new_car_state.dart
│   │   │   │   ├── new_car.dart
│   │   │   │   └── view/
│   │   │   │       └── new_car_page.dart
│   │   │   └── new_car_repository.dart
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── app_test.dart
│   │   │   ├── new_car/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── new_car_bloc_test.dart
│   │   │   │   │   ├── new_car_event_test.dart
│   │   │   │   │   └── new_car_state_test.dart
│   │   │   │   └── view/
│   │   │   │       └── new_car_page_test.dart
│   │   │   └── new_car_repository_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_firebase_login/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── android/
│   │   │   ├── .gitignore
│   │   │   ├── app/
│   │   │   │   ├── build.gradle.kts
│   │   │   │   ├── google-services.json
│   │   │   │   └── src/
│   │   │   │       ├── debug/
│   │   │   │       │   └── AndroidManifest.xml
│   │   │   │       ├── main/
│   │   │   │       │   ├── AndroidManifest.xml
│   │   │   │       │   ├── kotlin/
│   │   │   │       │   │   └── com/
│   │   │   │       │   │       └── example/
│   │   │   │       │   │           └── flutter_firebase_login/
│   │   │   │       │   │               └── MainActivity.kt
│   │   │   │       │   └── res/
│   │   │   │       │       ├── drawable/
│   │   │   │       │       │   └── launch_background.xml
│   │   │   │       │       ├── drawable-v21/
│   │   │   │       │       │   └── launch_background.xml
│   │   │   │       │       ├── values/
│   │   │   │       │       │   └── styles.xml
│   │   │   │       │       └── values-night/
│   │   │   │       │           └── styles.xml
│   │   │   │       └── profile/
│   │   │   │           └── AndroidManifest.xml
│   │   │   ├── build.gradle.kts
│   │   │   ├── gradle/
│   │   │   │   └── wrapper/
│   │   │   │       └── gradle-wrapper.properties
│   │   │   ├── gradle.properties
│   │   │   └── settings.gradle.kts
│   │   ├── ios/
│   │   │   ├── .gitignore
│   │   │   ├── Flutter/
│   │   │   │   ├── AppFrameworkInfo.plist
│   │   │   │   ├── Debug.xcconfig
│   │   │   │   └── Release.xcconfig
│   │   │   ├── Podfile
│   │   │   ├── Runner/
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets/
│   │   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   └── LaunchImage.imageset/
│   │   │   │   │       ├── Contents.json
│   │   │   │   │       └── README.md
│   │   │   │   ├── Base.lproj/
│   │   │   │   │   ├── LaunchScreen.storyboard
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── GoogleService-Info.plist
│   │   │   │   ├── Info.plist
│   │   │   │   └── Runner-Bridging-Header.h
│   │   │   ├── Runner.xcodeproj/
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace/
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcshareddata/
│   │   │   │   │       ├── IDEWorkspaceChecks.plist
│   │   │   │   │       └── WorkspaceSettings.xcsettings
│   │   │   │   └── xcshareddata/
│   │   │   │       └── xcschemes/
│   │   │   │           └── Runner.xcscheme
│   │   │   ├── Runner.xcworkspace/
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcshareddata/
│   │   │   │       ├── IDEWorkspaceChecks.plist
│   │   │   │       └── WorkspaceSettings.xcsettings
│   │   │   └── RunnerTests/
│   │   │       └── RunnerTests.swift
│   │   ├── lib/
│   │   │   ├── app/
│   │   │   │   ├── app.dart
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── app_bloc.dart
│   │   │   │   │   ├── app_event.dart
│   │   │   │   │   └── app_state.dart
│   │   │   │   ├── bloc_observer.dart
│   │   │   │   ├── routes/
│   │   │   │   │   └── routes.dart
│   │   │   │   └── view/
│   │   │   │       └── app.dart
│   │   │   ├── home/
│   │   │   │   ├── home.dart
│   │   │   │   ├── view/
│   │   │   │   │   └── home_page.dart
│   │   │   │   └── widgets/
│   │   │   │       ├── avatar.dart
│   │   │   │       └── widgets.dart
│   │   │   ├── login/
│   │   │   │   ├── cubit/
│   │   │   │   │   ├── login_cubit.dart
│   │   │   │   │   └── login_state.dart
│   │   │   │   ├── login.dart
│   │   │   │   └── view/
│   │   │   │       ├── login_form.dart
│   │   │   │       ├── login_page.dart
│   │   │   │       └── view.dart
│   │   │   ├── main.dart
│   │   │   ├── sign_up/
│   │   │   │   ├── cubit/
│   │   │   │   │   ├── sign_up_cubit.dart
│   │   │   │   │   └── sign_up_state.dart
│   │   │   │   ├── sign_up.dart
│   │   │   │   └── view/
│   │   │   │       ├── sign_up_form.dart
│   │   │   │       ├── sign_up_page.dart
│   │   │   │       └── view.dart
│   │   │   └── theme.dart
│   │   ├── packages/
│   │   │   ├── authentication_repository/
│   │   │   │   ├── analysis_options.yaml
│   │   │   │   ├── lib/
│   │   │   │   │   ├── authentication_repository.dart
│   │   │   │   │   └── src/
│   │   │   │   │       ├── authentication_repository.dart
│   │   │   │   │       └── models/
│   │   │   │   │           ├── models.dart
│   │   │   │   │           └── user.dart
│   │   │   │   ├── pubspec.yaml
│   │   │   │   └── test/
│   │   │   │       ├── authentication_repository_test.dart
│   │   │   │       └── models/
│   │   │   │           └── user_test.dart
│   │   │   ├── cache/
│   │   │   │   ├── analysis_options.yaml
│   │   │   │   ├── lib/
│   │   │   │   │   └── cache.dart
│   │   │   │   ├── pubspec.yaml
│   │   │   │   └── test/
│   │   │   │       └── cache_test.dart
│   │   │   └── form_inputs/
│   │   │       ├── analysis_options.yaml
│   │   │       ├── lib/
│   │   │       │   ├── form_inputs.dart
│   │   │       │   └── src/
│   │   │       │       ├── confirmed_password.dart
│   │   │       │       ├── email.dart
│   │   │       │       └── password.dart
│   │   │       └── pubspec.yaml
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   └── test/
│   │       ├── app/
│   │       │   ├── bloc/
│   │       │   │   ├── app_bloc_test.dart
│   │       │   │   └── app_state_test.dart
│   │       │   ├── bloc_observer_test.dart
│   │       │   ├── routes/
│   │       │   │   └── routes_test.dart
│   │       │   └── view/
│   │       │       └── app_test.dart
│   │       ├── home/
│   │       │   ├── view/
│   │       │   │   └── home_page_test.dart
│   │       │   └── widgets/
│   │       │       └── avatar_test.dart
│   │       ├── login/
│   │       │   ├── cubit/
│   │       │   │   ├── login_cubit_test.dart
│   │       │   │   └── login_state_test.dart
│   │       │   └── view/
│   │       │       ├── login_form_test.dart
│   │       │       └── login_page_test.dart
│   │       └── sign_up/
│   │           ├── cubit/
│   │           │   ├── sign_up_cubit_test.dart
│   │           │   └── sign_up_state_test.dart
│   │           └── view/
│   │               ├── sign_up_form_test.dart
│   │               └── sign_up_page_test.dart
│   ├── flutter_form_validation/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   └── .gitignore
│   │   ├── lib/
│   │   │   ├── bloc/
│   │   │   │   ├── my_form_bloc.dart
│   │   │   │   ├── my_form_event.dart
│   │   │   │   └── my_form_state.dart
│   │   │   ├── main.dart
│   │   │   └── models/
│   │   │       ├── email.dart
│   │   │       ├── models.dart
│   │   │       └── password.dart
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_infinite_list/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   └── .gitignore
│   │   ├── lib/
│   │   │   ├── app.dart
│   │   │   ├── main.dart
│   │   │   ├── posts/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── post_bloc.dart
│   │   │   │   │   ├── post_event.dart
│   │   │   │   │   └── post_state.dart
│   │   │   │   ├── models/
│   │   │   │   │   ├── models.dart
│   │   │   │   │   └── post.dart
│   │   │   │   ├── posts.dart
│   │   │   │   ├── view/
│   │   │   │   │   ├── posts_list.dart
│   │   │   │   │   ├── posts_page.dart
│   │   │   │   │   └── view.dart
│   │   │   │   └── widgets/
│   │   │   │       ├── bottom_loader.dart
│   │   │   │       ├── post_list_item.dart
│   │   │   │       └── widgets.dart
│   │   │   └── simple_bloc_observer.dart
│   │   ├── macos/
│   │   │   ├── .gitignore
│   │   │   └── Flutter/
│   │   │       └── GeneratedPluginRegistrant.swift
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── app_test.dart
│   │   │   └── posts/
│   │   │       ├── bloc/
│   │   │       │   ├── post_bloc_test.dart
│   │   │       │   ├── post_event_test.dart
│   │   │       │   └── post_state_test.dart
│   │   │       ├── models/
│   │   │       │   └── post_test.dart
│   │   │       └── view/
│   │   │           ├── posts_list_test.dart
│   │   │           └── posts_page_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_login/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   └── .gitignore
│   │   ├── lib/
│   │   │   ├── app.dart
│   │   │   ├── authentication/
│   │   │   │   ├── authentication.dart
│   │   │   │   └── bloc/
│   │   │   │       ├── authentication_bloc.dart
│   │   │   │       ├── authentication_event.dart
│   │   │   │       └── authentication_state.dart
│   │   │   ├── home/
│   │   │   │   ├── home.dart
│   │   │   │   └── view/
│   │   │   │       └── home_page.dart
│   │   │   ├── login/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── login_bloc.dart
│   │   │   │   │   ├── login_event.dart
│   │   │   │   │   └── login_state.dart
│   │   │   │   ├── login.dart
│   │   │   │   ├── models/
│   │   │   │   │   ├── models.dart
│   │   │   │   │   ├── password.dart
│   │   │   │   │   └── username.dart
│   │   │   │   └── view/
│   │   │   │       ├── login_form.dart
│   │   │   │       ├── login_page.dart
│   │   │   │       └── view.dart
│   │   │   ├── main.dart
│   │   │   └── splash/
│   │   │       ├── splash.dart
│   │   │       └── view/
│   │   │           └── splash_page.dart
│   │   ├── packages/
│   │   │   ├── authentication_repository/
│   │   │   │   ├── analysis_options.yaml
│   │   │   │   ├── lib/
│   │   │   │   │   ├── authentication_repository.dart
│   │   │   │   │   └── src/
│   │   │   │   │       └── authentication_repository.dart
│   │   │   │   └── pubspec.yaml
│   │   │   └── user_repository/
│   │   │       ├── analysis_options.yaml
│   │   │       ├── lib/
│   │   │       │   ├── src/
│   │   │       │   │   ├── models/
│   │   │       │   │   │   ├── models.dart
│   │   │       │   │   │   └── user.dart
│   │   │       │   │   └── user_repository.dart
│   │   │       │   └── user_repository.dart
│   │   │       └── pubspec.yaml
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── authentication/
│   │   │   │   ├── authentication_bloc_test.dart
│   │   │   │   └── authentication_state_test.dart
│   │   │   └── login/
│   │   │       ├── bloc/
│   │   │       │   ├── login_bloc_test.dart
│   │   │       │   ├── login_event_test.dart
│   │   │       │   └── login_state_test.dart
│   │   │       ├── models/
│   │   │       │   ├── password_test.dart
│   │   │       │   └── username_test.dart
│   │   │       └── view/
│   │   │           ├── login_form_test.dart
│   │   │           └── login_page_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_shopping_cart/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   └── .gitignore
│   │   ├── lib/
│   │   │   ├── app.dart
│   │   │   ├── cart/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── cart_bloc.dart
│   │   │   │   │   ├── cart_event.dart
│   │   │   │   │   └── cart_state.dart
│   │   │   │   ├── cart.dart
│   │   │   │   ├── models/
│   │   │   │   │   ├── cart.dart
│   │   │   │   │   └── models.dart
│   │   │   │   └── view/
│   │   │   │       └── cart_page.dart
│   │   │   ├── catalog/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── catalog_bloc.dart
│   │   │   │   │   ├── catalog_event.dart
│   │   │   │   │   └── catalog_state.dart
│   │   │   │   ├── catalog.dart
│   │   │   │   ├── models/
│   │   │   │   │   ├── catalog.dart
│   │   │   │   │   ├── item.dart
│   │   │   │   │   └── models.dart
│   │   │   │   └── view/
│   │   │   │       └── catalog_page.dart
│   │   │   ├── main.dart
│   │   │   ├── shopping_repository.dart
│   │   │   └── simple_bloc_observer.dart
│   │   ├── macos/
│   │   │   ├── .gitignore
│   │   │   └── Flutter/
│   │   │       └── GeneratedPluginRegistrant.swift
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── app_test.dart
│   │   │   ├── cart/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── cart_bloc_test.dart
│   │   │   │   │   ├── cart_event_test.dart
│   │   │   │   │   └── cart_state_test.dart
│   │   │   │   ├── models/
│   │   │   │   │   └── cart_test.dart
│   │   │   │   └── view/
│   │   │   │       └── cart_page_test.dart
│   │   │   ├── catalog/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── catalog_bloc_test.dart
│   │   │   │   │   ├── catalog_event_test.dart
│   │   │   │   │   └── catalog_state_test.dart
│   │   │   │   ├── models/
│   │   │   │   │   ├── catalog_test.dart
│   │   │   │   │   └── item_test.dart
│   │   │   │   └── view/
│   │   │   │       └── catalog_page_test.dart
│   │   │   ├── helper.dart
│   │   │   └── shopping_repository_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_timer/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   └── .gitignore
│   │   ├── lib/
│   │   │   ├── app.dart
│   │   │   ├── main.dart
│   │   │   ├── ticker.dart
│   │   │   └── timer/
│   │   │       ├── bloc/
│   │   │       │   ├── timer_bloc.dart
│   │   │       │   ├── timer_event.dart
│   │   │       │   └── timer_state.dart
│   │   │       ├── timer.dart
│   │   │       └── view/
│   │   │           └── timer_page.dart
│   │   ├── macos/
│   │   │   ├── .gitignore
│   │   │   └── Flutter/
│   │   │       └── GeneratedPluginRegistrant.swift
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── app_test.dart
│   │   │   ├── ticker_test.dart
│   │   │   └── timer/
│   │   │       ├── bloc/
│   │   │       │   ├── timer_bloc_test.dart
│   │   │       │   └── timer_state_test.dart
│   │   │       └── view/
│   │   │           └── timer_page_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_todos/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   ├── .gitignore
│   │   │   └── Podfile
│   │   ├── l10n.yaml
│   │   ├── lib/
│   │   │   ├── app/
│   │   │   │   ├── app.dart
│   │   │   │   └── app_bloc_observer.dart
│   │   │   ├── bootstrap.dart
│   │   │   ├── edit_todo/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── edit_todo_bloc.dart
│   │   │   │   │   ├── edit_todo_event.dart
│   │   │   │   │   └── edit_todo_state.dart
│   │   │   │   ├── edit_todo.dart
│   │   │   │   └── view/
│   │   │   │       ├── edit_todo_page.dart
│   │   │   │       └── view.dart
│   │   │   ├── home/
│   │   │   │   ├── cubit/
│   │   │   │   │   ├── home_cubit.dart
│   │   │   │   │   └── home_state.dart
│   │   │   │   ├── home.dart
│   │   │   │   └── view/
│   │   │   │       ├── home_page.dart
│   │   │   │       └── view.dart
│   │   │   ├── l10n/
│   │   │   │   ├── app_en.arb
│   │   │   │   ├── app_localizations.dart
│   │   │   │   ├── app_localizations_en.dart
│   │   │   │   └── l10n.dart
│   │   │   ├── main_development.dart
│   │   │   ├── main_production.dart
│   │   │   ├── main_staging.dart
│   │   │   ├── stats/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── stats_bloc.dart
│   │   │   │   │   ├── stats_event.dart
│   │   │   │   │   └── stats_state.dart
│   │   │   │   ├── stats.dart
│   │   │   │   └── view/
│   │   │   │       ├── stats_page.dart
│   │   │   │       └── view.dart
│   │   │   ├── theme/
│   │   │   │   └── theme.dart
│   │   │   └── todos_overview/
│   │   │       ├── bloc/
│   │   │       │   ├── todos_overview_bloc.dart
│   │   │       │   ├── todos_overview_event.dart
│   │   │       │   └── todos_overview_state.dart
│   │   │       ├── models/
│   │   │       │   ├── models.dart
│   │   │       │   └── todos_view_filter.dart
│   │   │       ├── todos_overview.dart
│   │   │       ├── view/
│   │   │       │   ├── todos_overview_page.dart
│   │   │       │   └── view.dart
│   │   │       └── widgets/
│   │   │           ├── todo_list_tile.dart
│   │   │           ├── todos_overview_filter_button.dart
│   │   │           ├── todos_overview_options_button.dart
│   │   │           └── widgets.dart
│   │   ├── packages/
│   │   │   ├── local_storage_todos_api/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── README.md
│   │   │   │   ├── analysis_options.yaml
│   │   │   │   ├── lib/
│   │   │   │   │   ├── local_storage_todos_api.dart
│   │   │   │   │   └── src/
│   │   │   │   │       └── local_storage_todos_api.dart
│   │   │   │   ├── pubspec.yaml
│   │   │   │   └── test/
│   │   │   │       └── local_storage_todos_api_test.dart
│   │   │   ├── todos_api/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── README.md
│   │   │   │   ├── analysis_options.yaml
│   │   │   │   ├── lib/
│   │   │   │   │   ├── src/
│   │   │   │   │   │   ├── models/
│   │   │   │   │   │   │   ├── json_map.dart
│   │   │   │   │   │   │   ├── models.dart
│   │   │   │   │   │   │   ├── todo.dart
│   │   │   │   │   │   │   └── todo.g.dart
│   │   │   │   │   │   └── todos_api.dart
│   │   │   │   │   └── todos_api.dart
│   │   │   │   ├── pubspec.yaml
│   │   │   │   └── test/
│   │   │   │       ├── models/
│   │   │   │       │   └── todo_test.dart
│   │   │   │       └── todos_api_test.dart
│   │   │   └── todos_repository/
│   │   │       ├── .gitignore
│   │   │       ├── README.md
│   │   │       ├── analysis_options.yaml
│   │   │       ├── lib/
│   │   │       │   ├── src/
│   │   │       │   │   └── todos_repository.dart
│   │   │       │   └── todos_repository.dart
│   │   │       ├── pubspec.yaml
│   │   │       └── test/
│   │   │           └── todos_repository_test.dart
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── app_test.dart
│   │   │   ├── edit_todo/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── edit_todo_bloc_test.dart
│   │   │   │   │   ├── edit_todo_event_test.dart
│   │   │   │   │   └── edit_todo_state_test.dart
│   │   │   │   └── view/
│   │   │   │       └── edit_todo_page_test.dart
│   │   │   ├── helpers/
│   │   │   │   ├── finders.dart
│   │   │   │   ├── helpers.dart
│   │   │   │   ├── l10n.dart
│   │   │   │   └── pump_app.dart
│   │   │   ├── home/
│   │   │   │   ├── cubit/
│   │   │   │   │   └── home_cubit_test.dart
│   │   │   │   └── view/
│   │   │   │       └── home_page_test.dart
│   │   │   ├── stats/
│   │   │   │   ├── bloc/
│   │   │   │   │   ├── stats_bloc_test.dart
│   │   │   │   │   ├── stats_event_test.dart
│   │   │   │   │   └── stats_state_test.dart
│   │   │   │   └── view/
│   │   │   │       └── stats_page_test.dart
│   │   │   └── todos_overview/
│   │   │       ├── bloc/
│   │   │       │   ├── todos_overview_bloc_test.dart
│   │   │       │   ├── todos_overview_event_test.dart
│   │   │       │   └── todos_overview_state_test.dart
│   │   │       ├── models/
│   │   │       │   └── todos_view_filter_test.dart
│   │   │       ├── view/
│   │   │       │   └── todos_overview_page_test.dart
│   │   │       └── widgets/
│   │   │           ├── todo_list_tile_test.dart
│   │   │           ├── todos_overview_filter_button_test.dart
│   │   │           └── todos_overview_options_button_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_weather/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── build.yaml
│   │   ├── ios/
│   │   │   ├── .gitignore
│   │   │   └── Podfile
│   │   ├── lib/
│   │   │   ├── app.dart
│   │   │   ├── main.dart
│   │   │   ├── search/
│   │   │   │   ├── search.dart
│   │   │   │   └── view/
│   │   │   │       └── search_page.dart
│   │   │   ├── settings/
│   │   │   │   ├── settings.dart
│   │   │   │   └── view/
│   │   │   │       └── settings_page.dart
│   │   │   ├── weather/
│   │   │   │   ├── cubit/
│   │   │   │   │   ├── weather_cubit.dart
│   │   │   │   │   ├── weather_cubit.g.dart
│   │   │   │   │   └── weather_state.dart
│   │   │   │   ├── models/
│   │   │   │   │   ├── models.dart
│   │   │   │   │   ├── weather.dart
│   │   │   │   │   └── weather.g.dart
│   │   │   │   ├── view/
│   │   │   │   │   └── weather_page.dart
│   │   │   │   ├── weather.dart
│   │   │   │   └── widgets/
│   │   │   │       ├── weather_empty.dart
│   │   │   │       ├── weather_error.dart
│   │   │   │       ├── weather_loading.dart
│   │   │   │       ├── weather_populated.dart
│   │   │   │       └── widgets.dart
│   │   │   └── weather_bloc_observer.dart
│   │   ├── linux/
│   │   │   ├── .gitignore
│   │   │   └── flutter/
│   │   │       ├── generated_plugin_registrant.cc
│   │   │       ├── generated_plugin_registrant.h
│   │   │       └── generated_plugins.cmake
│   │   ├── macos/
│   │   │   ├── .gitignore
│   │   │   ├── Flutter/
│   │   │   │   └── GeneratedPluginRegistrant.swift
│   │   │   └── Podfile
│   │   ├── packages/
│   │   │   ├── open_meteo_api/
│   │   │   │   ├── analysis_options.yaml
│   │   │   │   ├── build.yaml
│   │   │   │   ├── lib/
│   │   │   │   │   ├── open_meteo_api.dart
│   │   │   │   │   └── src/
│   │   │   │   │       ├── models/
│   │   │   │   │       │   ├── location.dart
│   │   │   │   │       │   ├── location.g.dart
│   │   │   │   │       │   ├── models.dart
│   │   │   │   │       │   ├── weather.dart
│   │   │   │   │       │   └── weather.g.dart
│   │   │   │   │       └── open_meteo_api_client.dart
│   │   │   │   ├── pubspec.yaml
│   │   │   │   └── test/
│   │   │   │       ├── location_test.dart
│   │   │   │       ├── open_meteo_api_client_test.dart
│   │   │   │       └── weather_test.dart
│   │   │   └── weather_repository/
│   │   │       ├── analysis_options.yaml
│   │   │       ├── build.yaml
│   │   │       ├── lib/
│   │   │       │   ├── src/
│   │   │       │   │   ├── models/
│   │   │       │   │   │   ├── models.dart
│   │   │       │   │   │   ├── weather.dart
│   │   │       │   │   │   └── weather.g.dart
│   │   │       │   │   └── weather_repository.dart
│   │   │       │   └── weather_repository.dart
│   │   │       ├── pubspec.yaml
│   │   │       └── test/
│   │   │           ├── src/
│   │   │           │   └── models/
│   │   │           │       └── weather_test.dart
│   │   │           └── weather_repository_test.dart
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   ├── test/
│   │   │   ├── app_test.dart
│   │   │   ├── helpers/
│   │   │   │   └── hydrated_bloc.dart
│   │   │   ├── search/
│   │   │   │   └── view/
│   │   │   │       └── search_page_test.dart
│   │   │   ├── settings/
│   │   │   │   └── view/
│   │   │   │       └── settings_page_test.dart
│   │   │   └── weather/
│   │   │       ├── cubit/
│   │   │       │   ├── weather_cubit_test.dart
│   │   │       │   └── weather_state_test.dart
│   │   │       ├── view/
│   │   │       │   └── weather_page_test.dart
│   │   │       └── widgets/
│   │   │           ├── weather_empty_test.dart
│   │   │           ├── weather_error_test.dart
│   │   │           ├── weather_loading_test.dart
│   │   │           └── weather_populated_test.dart
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── flutter_wizard/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── ios/
│   │   │   └── .gitignore
│   │   ├── lib/
│   │   │   ├── bloc/
│   │   │   │   ├── profile_wizard_bloc.dart
│   │   │   │   ├── profile_wizard_event.dart
│   │   │   │   └── profile_wizard_state.dart
│   │   │   └── main.dart
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   └── github_search/
│       ├── README.md
│       ├── angular_github_search/
│       │   ├── .gitignore
│       │   ├── CHANGELOG.md
│       │   ├── README.md
│       │   ├── analysis_options.yaml
│       │   ├── lib/
│       │   │   ├── app_component.dart
│       │   │   └── src/
│       │   │       ├── github_search.dart
│       │   │       ├── search_form/
│       │   │       │   ├── search_bar/
│       │   │       │   │   ├── search_bar_component.dart
│       │   │       │   │   └── search_bar_component.html
│       │   │       │   ├── search_body/
│       │   │       │   │   ├── search_body_component.dart
│       │   │       │   │   ├── search_body_component.html
│       │   │       │   │   └── search_results/
│       │   │       │   │       ├── search_result_item/
│       │   │       │   │       │   ├── search_result_item_component.dart
│       │   │       │   │       │   └── search_result_item_component.html
│       │   │       │   │       ├── search_results_component.dart
│       │   │       │   │       └── search_results_component.html
│       │   │       │   ├── search_form_component.dart
│       │   │       │   └── search_form_component.html
│       │   │       └── src.dart
│       │   ├── pubspec.yaml
│       │   ├── pubspec_overrides.yaml
│       │   └── web/
│       │       ├── index.html
│       │       ├── main.dart
│       │       └── styles.css
│       ├── common_github_search/
│       │   ├── analysis_options.yaml
│       │   ├── lib/
│       │   │   ├── common_github_search.dart
│       │   │   └── src/
│       │   │       ├── github_cache.dart
│       │   │       ├── github_client.dart
│       │   │       ├── github_repository.dart
│       │   │       ├── github_search_bloc/
│       │   │       │   ├── github_search_bloc.dart
│       │   │       │   ├── github_search_event.dart
│       │   │       │   └── github_search_state.dart
│       │   │       └── models/
│       │   │           ├── github_user.dart
│       │   │           ├── models.dart
│       │   │           ├── search_result.dart
│       │   │           ├── search_result_error.dart
│       │   │           └── search_result_item.dart
│       │   ├── pubspec.yaml
│       │   └── pubspec_overrides.yaml
│       └── flutter_github_search/
│           ├── .gitignore
│           ├── .metadata
│           ├── README.md
│           ├── analysis_options.yaml
│           ├── ios/
│           │   ├── .gitignore
│           │   └── Podfile
│           ├── lib/
│           │   ├── main.dart
│           │   └── search_form.dart
│           ├── pubspec.yaml
│           ├── pubspec_overrides.yaml
│           └── web/
│               ├── index.html
│               └── manifest.json
├── extensions/
│   ├── intellij/
│   │   ├── README.md
│   │   └── intellij_generator_plugin/
│   │       ├── .gitignore
│   │       ├── build.gradle.kts
│   │       ├── gradle/
│   │       │   └── wrapper/
│   │       │       ├── gradle-wrapper.jar
│   │       │       └── gradle-wrapper.properties
│   │       ├── gradle.properties
│   │       ├── gradlew
│   │       ├── gradlew.bat
│   │       ├── settings.gradle
│   │       └── src/
│   │           └── main/
│   │               ├── java/
│   │               │   └── com/
│   │               │       └── bloc/
│   │               │           └── intellij_generator_plugin/
│   │               │               ├── action/
│   │               │               │   ├── BlocTemplateType.java
│   │               │               │   ├── GenerateBlocAction.kt
│   │               │               │   ├── GenerateBlocDialog.form
│   │               │               │   ├── GenerateBlocDialog.java
│   │               │               │   ├── GenerateCubitAction.kt
│   │               │               │   └── GenerateEquatablePropsAction.kt
│   │               │               ├── generator/
│   │               │               │   ├── BlocGenerator.kt
│   │               │               │   ├── BlocGeneratorFactory.kt
│   │               │               │   ├── CubitGenerator.kt
│   │               │               │   ├── CubitGeneratorFactory.kt
│   │               │               │   └── components/
│   │               │               │       ├── BlocEventGenerator.kt
│   │               │               │       ├── BlocGenerator.kt
│   │               │               │       ├── BlocStateGenerator.kt
│   │               │               │       ├── CubitGenerator.kt
│   │               │               │       └── CubitStateGenerator.kt
│   │               │               ├── intention_action/
│   │               │               │   ├── BlocConvertToMultiBlocListenerIntentionAction.kt
│   │               │               │   ├── BlocConvertToMultiBlocProviderIntentionAction.kt
│   │               │               │   ├── BlocConvertToMultiIntentionAction.kt
│   │               │               │   ├── BlocConvertToMultiRepositoryProviderIntentionAction.kt
│   │               │               │   ├── BlocWrapWithBlocBuilderIntentionAction.kt
│   │               │               │   ├── BlocWrapWithBlocConsumerIntentionAction.kt
│   │               │               │   ├── BlocWrapWithBlocListenerIntentionAction.kt
│   │               │               │   ├── BlocWrapWithBlocProviderIntentionAction.kt
│   │               │               │   ├── BlocWrapWithBlocSelectorIntentionAction.kt
│   │               │               │   ├── BlocWrapWithIntentionAction.kt
│   │               │               │   ├── BlocWrapWithRepositoryProviderIntentionAction.kt
│   │               │               │   ├── Common.kt
│   │               │               │   ├── SnippetType.kt
│   │               │               │   ├── Snippets.kt
│   │               │               │   └── WrapHelper.kt
│   │               │               ├── language_server/
│   │               │               │   ├── BlocLanguageServer.kt
│   │               │               │   ├── BlocLanguageServerFactory.kt
│   │               │               │   └── BlocLanguageServerInstaller.kt
│   │               │               ├── live_templates/
│   │               │               │   └── BlocContext.kt
│   │               │               └── util/
│   │               │                   └── BlocPluginNotification.kt
│   │               └── resources/
│   │                   ├── META-INF/
│   │                   │   └── plugin.xml
│   │                   ├── intentionDescriptions/
│   │                   │   ├── BlocConvertToMultiBlocListenerIntentionAction/
│   │                   │   │   ├── after.java.template
│   │                   │   │   ├── before.java.template
│   │                   │   │   └── description.html
│   │                   │   ├── BlocConvertToMultiBlocProviderIntentionAction/
│   │                   │   │   ├── after.java.template
│   │                   │   │   ├── before.java.template
│   │                   │   │   └── description.html
│   │                   │   ├── BlocConvertToMultiRepositoryProviderIntentionAction/
│   │                   │   │   ├── after.java.template
│   │                   │   │   ├── before.java.template
│   │                   │   │   └── description.html
│   │                   │   ├── BlocWrapWithBlocBuilderIntentionAction/
│   │                   │   │   ├── after.java.template
│   │                   │   │   ├── before.java.template
│   │                   │   │   └── description.html
│   │                   │   ├── BlocWrapWithBlocConsumerIntentionAction/
│   │                   │   │   ├── after.java.template
│   │                   │   │   ├── before.java.template
│   │                   │   │   └── description.html
│   │                   │   ├── BlocWrapWithBlocListenerIntentionAction/
│   │                   │   │   ├── after.java.template
│   │                   │   │   ├── before.java.template
│   │                   │   │   └── description.html
│   │                   │   ├── BlocWrapWithBlocProviderIntentionAction/
│   │                   │   │   ├── after.java.template
│   │                   │   │   ├── before.java.template
│   │                   │   │   └── description.html
│   │                   │   ├── BlocWrapWithBlocSelectorIntentionAction/
│   │                   │   │   ├── after.java.template
│   │                   │   │   ├── before.java.template
│   │                   │   │   └── description.html
│   │                   │   └── BlocWrapWithRepositoryProviderIntentionAction/
│   │                   │       ├── after.java.template
│   │                   │       ├── before.java.template
│   │                   │       └── description.html
│   │                   ├── liveTemplates/
│   │                   │   └── Bloc.xml
│   │                   └── templates/
│   │                       ├── bloc_basic/
│   │                       │   ├── bloc.dart.template
│   │                       │   ├── bloc_event.dart.template
│   │                       │   └── bloc_state.dart.template
│   │                       ├── bloc_equatable/
│   │                       │   ├── bloc.dart.template
│   │                       │   ├── bloc_event.dart.template
│   │                       │   └── bloc_state.dart.template
│   │                       ├── bloc_freezed/
│   │                       │   ├── bloc.dart.template
│   │                       │   ├── bloc_event.dart.template
│   │                       │   └── bloc_state.dart.template
│   │                       ├── cubit_basic/
│   │                       │   ├── cubit.dart.template
│   │                       │   └── cubit_state.dart.template
│   │                       ├── cubit_equatable/
│   │                       │   ├── cubit.dart.template
│   │                       │   └── cubit_state.dart.template
│   │                       └── cubit_freezed/
│   │                           ├── cubit.dart.template
│   │                           └── cubit_state.dart.template
│   ├── vscode/
│   │   ├── .gitignore
│   │   ├── .vscode/
│   │   │   └── launch.json
│   │   ├── .vscodeignore
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── snippets/
│   │   │   ├── bloc.json
│   │   │   ├── bloc_test.json
│   │   │   ├── flutter_bloc.json
│   │   │   └── freezed_bloc.json
│   │   ├── src/
│   │   │   ├── code-actions/
│   │   │   │   ├── bloc-code-action-provider.ts
│   │   │   │   └── index.ts
│   │   │   ├── commands/
│   │   │   │   ├── convert-to.command.ts
│   │   │   │   ├── index.ts
│   │   │   │   ├── new-bloc.command.ts
│   │   │   │   ├── new-cubit.command.ts
│   │   │   │   └── wrap-with.command.ts
│   │   │   ├── extension.ts
│   │   │   ├── language-server/
│   │   │   │   ├── index.ts
│   │   │   │   ├── language-server.ts
│   │   │   │   └── selectors.ts
│   │   │   ├── templates/
│   │   │   │   ├── bloc-event.template.ts
│   │   │   │   ├── bloc-state.template.ts
│   │   │   │   ├── bloc.template.ts
│   │   │   │   ├── cubit-state.template.ts
│   │   │   │   ├── cubit.template.ts
│   │   │   │   └── index.ts
│   │   │   └── utils/
│   │   │       ├── analyze-dependencies.ts
│   │   │       ├── convert-to.ts
│   │   │       ├── downloader.ts
│   │   │       ├── exec.ts
│   │   │       ├── get-bloc-tools-executable.ts
│   │   │       ├── get-bloc-type.ts
│   │   │       ├── get-dart-version.ts
│   │   │       ├── get-latest-package-version.ts
│   │   │       ├── get-pubspec-path.ts
│   │   │       ├── get-pubspec.ts
│   │   │       ├── get-selected-text.ts
│   │   │       ├── get-template-setting.ts
│   │   │       ├── has-dependency.ts
│   │   │       ├── index.ts
│   │   │       ├── install-bloc-tools.ts
│   │   │       ├── retry.ts
│   │   │       ├── set-show-context-menu.ts
│   │   │       ├── update-pubspec-dependency.ts
│   │   │       └── wrap-with.ts
│   │   ├── tsconfig.json
│   │   ├── tslint.json
│   │   └── webpack.config.js
│   └── zed/
│       ├── .gitignore
│       ├── CHANGELOG.md
│       ├── Cargo.toml
│       ├── LICENSE
│       ├── README.md
│       ├── extension.toml
│       ├── extension.wasm
│       ├── snippets/
│       │   └── dart.json
│       └── src/
│           └── lib.rs
└── packages/
    ├── angular_bloc/
    │   ├── CHANGELOG.md
    │   ├── LICENSE
    │   ├── README.md
    │   ├── analysis_options.yaml
    │   ├── dart_test.yaml
    │   ├── example/
    │   │   └── example.dart
    │   ├── lib/
    │   │   ├── angular_bloc.dart
    │   │   └── src/
    │   │       └── pipes/
    │   │           ├── bloc_pipe.dart
    │   │           └── pipes.dart
    │   ├── pubspec.yaml
    │   ├── pubspec_overrides.yaml
    │   └── test/
    │       └── bloc_pipe_test.dart
    ├── bloc/
    │   ├── CHANGELOG.md
    │   ├── LICENSE
    │   ├── README.md
    │   ├── analysis_options.yaml
    │   ├── example/
    │   │   └── main.dart
    │   ├── lib/
    │   │   ├── bloc.dart
    │   │   └── src/
    │   │       ├── bloc.dart
    │   │       ├── bloc_base.dart
    │   │       ├── bloc_observer.dart
    │   │       ├── change.dart
    │   │       ├── cubit.dart
    │   │       ├── emitter.dart
    │   │       └── transition.dart
    │   ├── pubspec.yaml
    │   └── test/
    │       ├── bloc_event_transformer_test.dart
    │       ├── bloc_event_transformer_test_legacy.dart
    │       ├── bloc_observer_test.dart
    │       ├── bloc_on_test.dart
    │       ├── bloc_test.dart
    │       ├── blocs/
    │       │   ├── async/
    │       │   │   ├── async_bloc.dart
    │       │   │   ├── async_event.dart
    │       │   │   └── async_state.dart
    │       │   ├── blocs.dart
    │       │   ├── complex/
    │       │   │   ├── complex_bloc.dart
    │       │   │   ├── complex_event.dart
    │       │   │   └── complex_state.dart
    │       │   ├── counter/
    │       │   │   ├── counter.dart
    │       │   │   ├── counter_bloc.dart
    │       │   │   ├── counter_error_bloc.dart
    │       │   │   ├── counter_exception_bloc.dart
    │       │   │   ├── merge_bloc.dart
    │       │   │   ├── on_error_bloc.dart
    │       │   │   ├── on_event_error_bloc.dart
    │       │   │   ├── on_exception_bloc.dart
    │       │   │   └── on_transition_error_bloc.dart
    │       │   ├── seeded/
    │       │   │   └── seeded_bloc.dart
    │       │   ├── simple/
    │       │   │   └── simple_bloc.dart
    │       │   ├── stream/
    │       │   │   ├── restartable_stream_bloc.dart
    │       │   │   ├── stream.dart
    │       │   │   └── stream_bloc.dart
    │       │   └── unawaited/
    │       │       └── unawaited_bloc.dart
    │       ├── cubit_test.dart
    │       ├── cubits/
    │       │   ├── counter_cubit.dart
    │       │   ├── cubits.dart
    │       │   ├── fake_async_cubit.dart
    │       │   └── seeded_cubit.dart
    │       └── transition_test.dart
    ├── bloc_concurrency/
    │   ├── .gitignore
    │   ├── CHANGELOG.md
    │   ├── LICENSE
    │   ├── README.md
    │   ├── analysis_options.yaml
    │   ├── example/
    │   │   └── main.dart
    │   ├── lib/
    │   │   ├── bloc_concurrency.dart
    │   │   └── src/
    │   │       ├── concurrent.dart
    │   │       ├── droppable.dart
    │   │       ├── restartable.dart
    │   │       └── sequential.dart
    │   ├── pubspec.yaml
    │   ├── pubspec_overrides.yaml
    │   └── test/
    │       └── src/
    │           ├── concurrent_test.dart
    │           ├── droppable_test.dart
    │           ├── helpers.dart
    │           ├── restartable_test.dart
    │           └── sequential_test.dart
    ├── bloc_lint/
    │   ├── CHANGELOG.md
    │   ├── LICENSE
    │   ├── README.md
    │   ├── analysis_options.yaml
    │   ├── build.yaml
    │   ├── example/
    │   │   └── main.dart
    │   ├── lib/
    │   │   ├── all.yaml
    │   │   ├── bloc_lint.dart
    │   │   ├── recommended.yaml
    │   │   └── src/
    │   │       ├── analysis_options.dart
    │   │       ├── analysis_options.g.dart
    │   │       ├── diagnostic.dart
    │   │       ├── env.dart
    │   │       ├── lint_rule.dart
    │   │       ├── linter.dart
    │   │       ├── rules/
    │   │       │   ├── avoid_build_context_extensions.dart
    │   │       │   ├── avoid_flutter_imports.dart
    │   │       │   ├── avoid_public_bloc_methods.dart
    │   │       │   ├── avoid_public_fields.dart
    │   │       │   ├── prefer_bloc.dart
    │   │       │   ├── prefer_build_context_extensions.dart
    │   │       │   ├── prefer_cubit.dart
    │   │       │   ├── prefer_file_naming_conventions.dart
    │   │       │   ├── prefer_void_public_cubit_methods.dart
    │   │       │   └── rules.dart
    │   │       ├── string_case.dart
    │   │       └── text_document.dart
    │   ├── pubspec.yaml
    │   └── test/
    │       └── src/
    │           ├── analysis_options_test.dart
    │           ├── diagnostic_test.dart
    │           ├── lint_test_helper.dart
    │           ├── linter_test.dart
    │           ├── rules/
    │           │   ├── avoid_build_context_extensions_test.dart
    │           │   ├── avoid_flutter_imports_test.dart
    │           │   ├── avoid_public_bloc_methods_test.dart
    │           │   ├── avoid_public_fields_test.dart
    │           │   ├── prefer_bloc_test.dart
    │           │   ├── prefer_build_context_extensions_test.dart
    │           │   ├── prefer_cubit_test.dart
    │           │   ├── prefer_file_naming_conventions_test.dart
    │           │   └── prefer_void_public_cubit_methods_test.dart
    │           └── text_document_test.dart
    ├── bloc_test/
    │   ├── CHANGELOG.md
    │   ├── LICENSE
    │   ├── README.md
    │   ├── analysis_options.yaml
    │   ├── example/
    │   │   └── main.dart
    │   ├── lib/
    │   │   ├── bloc_test.dart
    │   │   └── src/
    │   │       ├── bloc_test.dart
    │   │       ├── mock_bloc.dart
    │   │       └── when_listen.dart
    │   ├── pubspec.yaml
    │   ├── pubspec_overrides.yaml
    │   └── test/
    │       ├── bloc_bloc_test_test.dart
    │       ├── bloc_observer_test.dart
    │       ├── blocs/
    │       │   ├── async_counter_bloc.dart
    │       │   ├── blocs.dart
    │       │   ├── complex_bloc.dart
    │       │   ├── counter_bloc.dart
    │       │   ├── debounce_counter_bloc.dart
    │       │   ├── error_counter_bloc.dart
    │       │   ├── exception_counter_bloc.dart
    │       │   ├── instant_emit_bloc.dart
    │       │   ├── multi_counter_bloc.dart
    │       │   ├── side_effect_counter_bloc.dart
    │       │   └── sum_bloc.dart
    │       ├── cubit_bloc_test_test.dart
    │       ├── cubits/
    │       │   ├── async_counter_cubit.dart
    │       │   ├── complex_cubit.dart
    │       │   ├── counter_cubit.dart
    │       │   ├── cubits.dart
    │       │   ├── delayed_counter_cubit.dart
    │       │   ├── error_cubit.dart
    │       │   ├── exception_cubit.dart
    │       │   ├── instant_emit_cubit.dart
    │       │   ├── multi_counter_cubit.dart
    │       │   ├── side_effect_counter_cubit.dart
    │       │   └── sum_cubit.dart
    │       ├── mock_bloc_test.dart
    │       └── when_listen_test.dart
    ├── bloc_tools/
    │   ├── .gitignore
    │   ├── CHANGELOG.md
    │   ├── LICENSE
    │   ├── README.md
    │   ├── analysis_options.yaml
    │   ├── bin/
    │   │   └── bloc.dart
    │   ├── dart_test.yaml
    │   ├── e2e/
    │   │   ├── main.dart
    │   │   └── pubspec.yaml
    │   ├── example/
    │   │   └── README.md
    │   ├── lib/
    │   │   ├── bloc_tools.dart
    │   │   └── src/
    │   │       ├── command_runner.dart
    │   │       ├── commands/
    │   │       │   ├── commands.dart
    │   │       │   ├── language_server/
    │   │       │   │   └── language_server_command.dart
    │   │       │   ├── lint/
    │   │       │   │   └── lint_command.dart
    │   │       │   └── new/
    │   │       │       ├── bundles/
    │   │       │       │   ├── bloc_bundle.dart
    │   │       │       │   ├── bundles.dart
    │   │       │       │   ├── cubit_bundle.dart
    │   │       │       │   ├── hydrated_bloc_bundle.dart
    │   │       │       │   ├── hydrated_cubit_bundle.dart
    │   │       │       │   ├── replay_bloc_bundle.dart
    │   │       │       │   └── replay_cubit_bundle.dart
    │   │       │       └── new_command.dart
    │   │       ├── lsp/
    │   │       │   ├── language_server.dart
    │   │       │   ├── text_document.dart
    │   │       │   └── text_documents.dart
    │   │       └── version.dart
    │   ├── pubspec.yaml
    │   ├── pubspec_overrides.yaml
    │   └── test/
    │       ├── ensure_build_test.dart
    │       └── src/
    │           ├── command_runner_test.dart
    │           ├── commands/
    │           │   ├── language_server/
    │           │   │   └── language_server_command_test.dart
    │           │   ├── lint/
    │           │   │   └── lint_command_test.dart
    │           │   └── new/
    │           │       └── new_test.dart
    │           └── lsp/
    │               ├── language_server_test.dart
    │               └── text_document_test.dart
    ├── flutter_bloc/
    │   ├── CHANGELOG.md
    │   ├── LICENSE
    │   ├── README.md
    │   ├── analysis_options.yaml
    │   ├── example/
    │   │   ├── .gitignore
    │   │   ├── .metadata
    │   │   ├── README.md
    │   │   ├── analysis_options.yaml
    │   │   ├── lib/
    │   │   │   └── main.dart
    │   │   ├── pubspec.yaml
    │   │   ├── pubspec_overrides.yaml
    │   │   └── web/
    │   │       ├── index.html
    │   │       └── manifest.json
    │   ├── lib/
    │   │   ├── flutter_bloc.dart
    │   │   └── src/
    │   │       ├── bloc_builder.dart
    │   │       ├── bloc_consumer.dart
    │   │       ├── bloc_listener.dart
    │   │       ├── bloc_provider.dart
    │   │       ├── bloc_selector.dart
    │   │       ├── multi_bloc_listener.dart
    │   │       ├── multi_bloc_provider.dart
    │   │       ├── multi_repository_provider.dart
    │   │       └── repository_provider.dart
    │   ├── pubspec.yaml
    │   ├── pubspec_overrides.yaml
    │   └── test/
    │       ├── bloc_builder_test.dart
    │       ├── bloc_consumer_test.dart
    │       ├── bloc_listener_test.dart
    │       ├── bloc_provider_test.dart
    │       ├── bloc_selector_test.dart
    │       ├── multi_bloc_listener_test.dart
    │       ├── multi_bloc_provider_test.dart
    │       ├── multi_repository_provider_test.dart
    │       └── repository_provider_test.dart
    ├── hydrated_bloc/
    │   ├── .gitignore
    │   ├── CHANGELOG.md
    │   ├── LICENSE
    │   ├── README.md
    │   ├── analysis_options.yaml
    │   ├── benchmark/
    │   │   └── README.md
    │   ├── build.yaml
    │   ├── example/
    │   │   ├── .gitignore
    │   │   ├── .metadata
    │   │   ├── README.md
    │   │   ├── analysis_options.yaml
    │   │   ├── lib/
    │   │   │   └── main.dart
    │   │   ├── pubspec.yaml
    │   │   ├── pubspec_overrides.yaml
    │   │   └── web/
    │   │       ├── index.html
    │   │       └── manifest.json
    │   ├── lib/
    │   │   ├── hydrated_bloc.dart
    │   │   └── src/
    │   │       ├── _migration/
    │   │       │   ├── _migration_io.dart
    │   │       │   └── _migration_stub.dart
    │   │       ├── hydrated_bloc.dart
    │   │       ├── hydrated_cipher.dart
    │   │       └── hydrated_storage.dart
    │   ├── pubspec.yaml
    │   ├── pubspec_overrides.yaml
    │   └── test/
    │       ├── cubits/
    │       │   ├── bad_cubit.dart
    │       │   ├── cubits.dart
    │       │   ├── cyclic_cubit.dart
    │       │   ├── freezed_cubit.dart
    │       │   ├── freezed_cubit.freezed.dart
    │       │   ├── freezed_cubit.g.dart
    │       │   ├── from_json_state_cubit.dart
    │       │   ├── json_serializable_cubit.dart
    │       │   ├── json_serializable_cubit.g.dart
    │       │   ├── list_cubit.dart
    │       │   ├── manual_cubit.dart
    │       │   ├── season_palette_cubit.dart
    │       │   └── simple_cubit.dart
    │       ├── e2e_test.dart
    │       ├── hive_interference_test.dart
    │       ├── hydrated_aes_cipher_test.dart
    │       ├── hydrated_bloc_test.dart
    │       ├── hydrated_cubit_test.dart
    │       ├── hydrated_cyclic_error_test.dart
    │       ├── hydrated_mixin_test.dart
    │       └── hydrated_storage_test.dart
    └── replay_bloc/
        ├── .gitignore
        ├── CHANGELOG.md
        ├── LICENSE
        ├── README.md
        ├── analysis_options.yaml
        ├── example/
        │   ├── .gitignore
        │   ├── .metadata
        │   ├── README.md
        │   ├── analysis_options.yaml
        │   ├── lib/
        │   │   └── main.dart
        │   ├── pubspec.yaml
        │   ├── pubspec_overrides.yaml
        │   └── web/
        │       ├── index.html
        │       └── manifest.json
        ├── lib/
        │   ├── replay_bloc.dart
        │   └── src/
        │       ├── change_stack.dart
        │       ├── replay_bloc.dart
        │       └── replay_cubit.dart
        ├── pubspec.yaml
        ├── pubspec_overrides.yaml
        └── test/
            ├── blocs/
            │   └── counter_bloc.dart
            ├── cubits/
            │   └── counter_cubit.dart
            ├── main.dart
            ├── replay_bloc_test.dart
            └── replay_cubit_test.dart
Download .txt
SYMBOL INDEX (2163 symbols across 531 files)

FILE: bricks/bloc/hooks/pre_gen.dart
  function run (line 3) | Future<void> run(HookContext context)

FILE: bricks/cubit/hooks/pre_gen.dart
  function run (line 3) | Future<void> run(HookContext context)

FILE: bricks/flutter_bloc_feature/__brick__/{{name.snakeCase()}}/view/{{name.snakeCase()}}_page.dart
  class pascalCase (line 6) | class {{name.pascalCase()}}Page extends StatelessWidget {
  function Page (line 7) | Page({super.key})
  function build (line 10) | Widget build(BuildContext context)
  class pascalCase (line 15) | class {{name.pascalCase()}}View extends StatelessWidget {
  function View (line 16) | View({super.key})
  function build (line 19) | Widget build(BuildContext context)

FILE: bricks/flutter_bloc_feature/hooks/post_gen.dart
  function run (line 5) | Future<void> run(HookContext context)
  function _runDartFormat (line 10) | Future<void> _runDartFormat(HookContext context)
  function _runDartFix (line 16) | Future<void> _runDartFix(HookContext context)

FILE: bricks/flutter_bloc_feature/hooks/pre_gen.dart
  type BlocType (line 8) | enum BlocType {
  function run (line 26) | Future<void> run(HookContext context)
  function _blocTypeFromContext (line 61) | BlocType _blocTypeFromContext(HookContext context)
  function toDirectoryName (line 81) | String toDirectoryName()
  function logFilesGenerated (line 96) | void logFilesGenerated(int fileCount)

FILE: bricks/hydrated_bloc/hooks/pre_gen.dart
  function run (line 3) | Future<void> run(HookContext context)

FILE: bricks/hydrated_cubit/hooks/pre_gen.dart
  function run (line 3) | Future<void> run(HookContext context)

FILE: bricks/replay_bloc/hooks/pre_gen.dart
  function run (line 3) | Future<void> run(HookContext context)

FILE: bricks/replay_cubit/hooks/pre_gen.dart
  function run (line 3) | Future<void> run(HookContext context)

FILE: examples/angular_counter/lib/app_component.dart
  class AppComponent (line 5) | @Component(

FILE: examples/angular_counter/lib/src/counter_page/counter_bloc.dart
  class CounterEvent (line 4) | sealed class CounterEvent {}
  class CounterIncrementPressed (line 7) | final class CounterIncrementPressed extends CounterEvent {}
  class CounterDecrementPressed (line 10) | final class CounterDecrementPressed extends CounterEvent {}
  class CounterBloc (line 15) | class CounterBloc extends Bloc<CounterEvent, int> {

FILE: examples/angular_counter/lib/src/counter_page/counter_page_component.dart
  class CounterPageComponent (line 9) | @Component(
    method ngOnDestroy (line 24) | void ngOnDestroy()
    method increment (line 29) | void increment()
    method decrement (line 32) | void decrement()

FILE: examples/angular_counter/web/main.dart
  class SimpleBlocObserver (line 7) | class SimpleBlocObserver extends BlocObserver {
    method onEvent (line 11) | void onEvent(Bloc<dynamic, dynamic> bloc, Object? event)
    method onTransition (line 17) | void onTransition(
    method onError (line 26) | void onError(BlocBase<dynamic> bloc, Object error, StackTrace stackTrace)
  function main (line 32) | void main()

FILE: examples/bloc_concurrency_visualizer/lib/main.dart
  function main (line 4) | void main()
  class MyApp (line 6) | class MyApp extends StatelessWidget {
    method build (line 10) | Widget build(BuildContext context)

FILE: examples/bloc_concurrency_visualizer/lib/timeline/bloc/timeline_bloc.dart
  class TimelineBloc (line 11) | class TimelineBloc extends Bloc<TimelineEvent, TimelineState> {
    method _onTaskQueued (line 28) | Future<void> _onTaskQueued(
    method _onTaskAdded (line 47) | Future<void> _onTaskAdded(
  function create (line 89) | EventTransformer<_TimelineTaskAdded> create()

FILE: examples/bloc_concurrency_visualizer/lib/timeline/bloc/timeline_event.dart
  class TimelineEvent (line 3) | sealed class TimelineEvent {
  class TimelineTaskQueued (line 7) | class TimelineTaskQueued extends TimelineEvent {
  class _TimelineTaskAdded (line 11) | class _TimelineTaskAdded extends TimelineEvent {
  class TimelineCompleted (line 17) | class TimelineCompleted extends TimelineEvent {
  class TimelineReset (line 21) | class TimelineReset extends TimelineEvent {

FILE: examples/bloc_concurrency_visualizer/lib/timeline/bloc/timeline_state.dart
  class TimelineState (line 3) | class TimelineState extends Equatable {

FILE: examples/bloc_concurrency_visualizer/lib/timeline/models/task.dart
  type TaskStatus (line 4) | enum TaskStatus { queued, running, finished, canceled }
  class Task (line 6) | class Task extends Equatable {
    method run (line 38) | Task run()
    method finish (line 40) | Task finish({required double end})
    method cancel (line 44) | Task cancel({required double end})
    method _copyWith (line 48) | Task _copyWith({TaskStatus? status, double? end})

FILE: examples/bloc_concurrency_visualizer/lib/timeline/models/transformer.dart
  type Transformer (line 1) | enum Transformer { concurrent, sequential, droppable, restartable }

FILE: examples/bloc_concurrency_visualizer/lib/timeline/view/timeline_page.dart
  class TimelinePage (line 5) | class TimelinePage extends StatelessWidget {
    method build (line 9) | Widget build(BuildContext context)
  class TimelineView (line 23) | class TimelineView extends StatefulWidget {
    method createState (line 29) | State<TimelineView> createState()
  class _TimelineViewState (line 32) | class _TimelineViewState extends State<TimelineView>
    method initState (line 41) | void initState()
    method _onAnimation (line 52) | void _onAnimation()
    method dispose (line 61) | void dispose()
    method build (line 68) | Widget build(BuildContext context)
  class Timeline (line 133) | class Timeline extends StatelessWidget {
    method build (line 149) | Widget build(BuildContext context)
  class _BarBackground (line 226) | class _BarBackground extends StatelessWidget {
    method build (line 242) | Widget build(BuildContext context)
  class _BarForeground (line 264) | class _BarForeground extends StatelessWidget {
    method build (line 282) | Widget build(BuildContext context)

FILE: examples/flutter_bloc_with_stream/lib/bloc/ticker_bloc.dart
  class TickerBloc (line 13) | class TickerBloc extends Bloc<TickerEvent, TickerState> {

FILE: examples/flutter_bloc_with_stream/lib/bloc/ticker_event.dart
  class TickerEvent (line 7) | sealed class TickerEvent extends Equatable {
  class TickerStarted (line 19) | final class TickerStarted extends TickerEvent {
  class _TickerTicked (line 24) | final class _TickerTicked extends TickerEvent {

FILE: examples/flutter_bloc_with_stream/lib/bloc/ticker_state.dart
  class TickerState (line 7) | sealed class TickerState extends Equatable {
  class TickerInitial (line 16) | final class TickerInitial extends TickerState {}
  class TickerTickSuccess (line 22) | final class TickerTickSuccess extends TickerState {
  class TickerComplete (line 36) | final class TickerComplete extends TickerState {

FILE: examples/flutter_bloc_with_stream/lib/main.dart
  function main (line 6) | void main()
  class TickerApp (line 13) | class TickerApp extends MaterialApp {
  class TickerPage (line 30) | class TickerPage extends StatelessWidget {
    method build (line 35) | Widget build(BuildContext context)

FILE: examples/flutter_bloc_with_stream/lib/ticker/ticker.dart
  class Ticker (line 4) | class Ticker {
    method tick (line 6) | Stream<int> tick()

FILE: examples/flutter_bloc_with_stream/test/app_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_bloc_with_stream/test/bloc/ticker_bloc_test.dart
  class _MockTicker (line 9) | class _MockTicker extends Mock implements Ticker {}
  function main (line 11) | void main()

FILE: examples/flutter_bloc_with_stream/test/bloc/ticker_event_test.dart
  function main (line 6) | void main()

FILE: examples/flutter_bloc_with_stream/test/bloc/ticker_state_test.dart
  function main (line 6) | void main()

FILE: examples/flutter_bloc_with_stream/test/ticker_page_test.dart
  class _MockTickerBloc (line 11) | class _MockTickerBloc extends MockBloc<TickerEvent, TickerState>
  function pumpTickerPage (line 15) | Future<void> pumpTickerPage(TickerBloc tickerBloc)
  function main (line 24) | void main()

FILE: examples/flutter_complex_list/lib/app.dart
  class App (line 6) | class App extends MaterialApp {

FILE: examples/flutter_complex_list/lib/complex_list/cubit/complex_list_cubit.dart
  class ComplexListCubit (line 10) | class ComplexListCubit extends Cubit<ComplexListState> {
    method fetchList (line 17) | Future<void> fetchList()
    method deleteItem (line 26) | Future<void> deleteItem(String id)

FILE: examples/flutter_complex_list/lib/complex_list/cubit/complex_list_state.dart
  type ListStatus (line 3) | enum ListStatus { loading, success, failure }
  class ComplexListState (line 5) | final class ComplexListState extends Equatable {

FILE: examples/flutter_complex_list/lib/complex_list/models/item.dart
  class Item (line 3) | class Item extends Equatable {
    method copyWith (line 14) | Item copyWith({String? id, String? value, bool? isDeleting})

FILE: examples/flutter_complex_list/lib/complex_list/view/complex_list_page.dart
  class ComplexListPage (line 6) | class ComplexListPage extends StatelessWidget {
    method build (line 10) | Widget build(BuildContext context)
  class ComplexListView (line 22) | class ComplexListView extends StatelessWidget {
    method build (line 26) | Widget build(BuildContext context)
  class ItemView (line 39) | class ItemView extends StatelessWidget {
    method build (line 45) | Widget build(BuildContext context)
  class ItemTile (line 62) | class ItemTile extends StatelessWidget {
    method build (line 73) | Widget build(BuildContext context)

FILE: examples/flutter_complex_list/lib/main.dart
  function main (line 8) | void main()

FILE: examples/flutter_complex_list/lib/repository.dart
  class Repository (line 6) | class Repository {
    method _randomRange (line 9) | int _randomRange(int min, int max)
    method fetchItems (line 11) | Future<List<Item>> fetchItems()
    method _generateItemsList (line 16) | List<Item> _generateItemsList(int length)
    method deleteItem (line 23) | Future<void> deleteItem(String id)

FILE: examples/flutter_complex_list/lib/simple_bloc_observer.dart
  class SimpleBlocObserver (line 3) | class SimpleBlocObserver extends BlocObserver {
    method onError (line 7) | void onError(BlocBase<dynamic> bloc, Object error, StackTrace stackTrace)
    method onChange (line 14) | void onChange(BlocBase<dynamic> bloc, Change<dynamic> change)

FILE: examples/flutter_complex_list/test/app_test.dart
  class MockRepository (line 8) | class MockRepository extends Mock implements Repository {}
  function main (line 10) | void main()

FILE: examples/flutter_complex_list/test/complex_list/cubit/complex_list_cubit_test.dart
  class _MockRepository (line 7) | class _MockRepository extends Mock implements Repository {}
  function main (line 9) | void main()

FILE: examples/flutter_complex_list/test/complex_list/cubit/complex_list_state_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_complex_list/test/complex_list/models/item_test.dart
  function main (line 4) | void main()

FILE: examples/flutter_complex_list/test/complex_list/view/complex_list_page_test.dart
  class _MockRepository (line 9) | class _MockRepository extends Mock implements Repository {}
  class _MockComplexListCubit (line 11) | class _MockComplexListCubit extends MockCubit<ComplexListState>
  function pumpListPage (line 15) | Future<void> pumpListPage(Repository repository)
  function pumpListView (line 26) | Future<void> pumpListView(ComplexListCubit listCubit)
  function main (line 38) | void main()

FILE: examples/flutter_complex_list/test/repository_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_counter/integration_test/app_test.dart
  function main (line 6) | void main()
  function pumpApp (line 45) | Future<void> pumpApp()
  function incrementCounter (line 50) | Future<void> incrementCounter()
  function decrementCounter (line 57) | Future<void> decrementCounter()

FILE: examples/flutter_counter/lib/app.dart
  class CounterApp (line 7) | class CounterApp extends MaterialApp {

FILE: examples/flutter_counter/lib/counter/cubit/counter_cubit.dart
  class CounterCubit (line 6) | class CounterCubit extends Cubit<int> {
    method increment (line 11) | void increment()
    method decrement (line 14) | void decrement()

FILE: examples/flutter_counter/lib/counter/view/counter_page.dart
  class CounterPage (line 9) | class CounterPage extends StatelessWidget {
    method build (line 14) | Widget build(BuildContext context)

FILE: examples/flutter_counter/lib/counter/view/counter_view.dart
  class CounterView (line 9) | class CounterView extends StatelessWidget {
    method build (line 14) | Widget build(BuildContext context)

FILE: examples/flutter_counter/lib/counter_observer.dart
  class CounterObserver (line 7) | class CounterObserver extends BlocObserver {
    method onChange (line 12) | void onChange(BlocBase<dynamic> bloc, Change<dynamic> change)

FILE: examples/flutter_counter/lib/main.dart
  function main (line 6) | void main()

FILE: examples/flutter_counter/test/app_test.dart
  function main (line 7) | void main()

FILE: examples/flutter_counter/test/counter/cubit/counter_cubit_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_counter/test/counter/view/counter_page_test.dart
  function main (line 6) | void main()

FILE: examples/flutter_counter/test/counter/view/counter_view_test.dart
  class _MockCounterCubit (line 10) | class _MockCounterCubit extends MockCubit<int> implements CounterCubit {}
  function main (line 15) | void main()

FILE: examples/flutter_counter/test_driver/integration_test.dart
  function main (line 3) | Future<void> main()

FILE: examples/flutter_dynamic_form/lib/app.dart
  class MyApp (line 6) | class MyApp extends StatelessWidget {
    method build (line 12) | Widget build(BuildContext context)

FILE: examples/flutter_dynamic_form/lib/main.dart
  function main (line 5) | void main()

FILE: examples/flutter_dynamic_form/lib/new_car/bloc/new_car_bloc.dart
  class NewCarBloc (line 9) | class NewCarBloc extends Bloc<NewCarEvent, NewCarState> {
    method _onEvent (line 18) | Future<void> _onEvent(NewCarEvent event, Emitter<NewCarState> emit)
    method _onNewCarFormLoaded (line 27) | Future<void> _onNewCarFormLoaded(
    method _onNewCarBrandChanged (line 36) | Future<void> _onNewCarBrandChanged(
    method _onNewCarModelChanged (line 56) | Future<void> _onNewCarModelChanged(
    method _onNewCarYearChanged (line 83) | Future<void> _onNewCarYearChanged(

FILE: examples/flutter_dynamic_form/lib/new_car/bloc/new_car_event.dart
  class NewCarEvent (line 3) | sealed class NewCarEvent extends Equatable {
  class NewCarFormLoaded (line 10) | final class NewCarFormLoaded extends NewCarEvent {
  class NewCarBrandChanged (line 14) | final class NewCarBrandChanged extends NewCarEvent {
  class NewCarModelChanged (line 23) | final class NewCarModelChanged extends NewCarEvent {
  class NewCarYearChanged (line 32) | final class NewCarYearChanged extends NewCarEvent {

FILE: examples/flutter_dynamic_form/lib/new_car/bloc/new_car_state.dart
  class NewCarState (line 3) | final class NewCarState extends Equatable {
    method copyWith (line 52) | NewCarState copyWith({

FILE: examples/flutter_dynamic_form/lib/new_car/view/new_car_page.dart
  class NewCarPage (line 6) | class NewCarPage extends StatelessWidget {
    method build (line 10) | Widget build(BuildContext context)
  class NewCarForm (line 22) | class NewCarForm extends StatelessWidget {
    method build (line 26) | Widget build(BuildContext context)
  class _BrandDropdownButton (line 46) | class _BrandDropdownButton extends StatelessWidget {
    method build (line 50) | Widget build(BuildContext context)
  class _ModelDropdownButton (line 71) | class _ModelDropdownButton extends StatelessWidget {
    method build (line 75) | Widget build(BuildContext context)
  class _YearDropdownButton (line 96) | class _YearDropdownButton extends StatelessWidget {
    method build (line 100) | Widget build(BuildContext context)
  class _FormSubmitButton (line 121) | class _FormSubmitButton extends StatelessWidget {
    method build (line 125) | Widget build(BuildContext context)
    method onFormSubmitted (line 128) | void onFormSubmitted()

FILE: examples/flutter_dynamic_form/lib/new_car_repository.dart
  function wait (line 2) | Future<void> wait()
  class NewCarRepository (line 4) | class NewCarRepository {
    method fetchBrands (line 5) | Future<List<String>> fetchBrands()
    method fetchModels (line 10) | Future<List<String>> fetchModels({String? brand})
    method fetchYears (line 24) | Future<List<String>> fetchYears({String? brand, String? model})

FILE: examples/flutter_dynamic_form/test/app_test.dart
  class MockNewCarRepository (line 7) | class MockNewCarRepository extends Mock implements NewCarRepository {}
  function main (line 9) | void main()

FILE: examples/flutter_dynamic_form/test/new_car/bloc/new_car_bloc_test.dart
  class MockNewCarRepository (line 7) | class MockNewCarRepository extends Mock implements NewCarRepository {}
  function main (line 9) | void main()

FILE: examples/flutter_dynamic_form/test/new_car/bloc/new_car_event_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_dynamic_form/test/new_car/bloc/new_car_state_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_dynamic_form/test/new_car/view/new_car_page_test.dart
  class MockNewCarRepository (line 9) | class MockNewCarRepository extends Mock implements NewCarRepository {}
  class MockNewCarBloc (line 11) | class MockNewCarBloc extends MockBloc<NewCarEvent, NewCarState>
  function pumpNewCarPage (line 15) | Future<void> pumpNewCarPage(NewCarRepository newCarRepository)
  function pumpNewCarForm (line 28) | Future<void> pumpNewCarForm(NewCarBloc newCarBloc)
  function main (line 42) | void main()

FILE: examples/flutter_dynamic_form/test/new_car_repository_test.dart
  function main (line 4) | void main()

FILE: examples/flutter_firebase_login/lib/app/bloc/app_bloc.dart
  class AppBloc (line 10) | class AppBloc extends Bloc<AppEvent, AppState> {
    method _onUserSubscriptionRequested (line 20) | Future<void> _onUserSubscriptionRequested(
    method _onLogoutPressed (line 31) | void _onLogoutPressed(

FILE: examples/flutter_firebase_login/lib/app/bloc/app_event.dart
  class AppEvent (line 3) | sealed class AppEvent {
  class AppUserSubscriptionRequested (line 7) | final class AppUserSubscriptionRequested extends AppEvent {
  class AppLogoutPressed (line 11) | final class AppLogoutPressed extends AppEvent {

FILE: examples/flutter_firebase_login/lib/app/bloc/app_state.dart
  type AppStatus (line 3) | enum AppStatus { authenticated, unauthenticated }
  class AppState (line 5) | final class AppState extends Equatable {

FILE: examples/flutter_firebase_login/lib/app/bloc_observer.dart
  class AppBlocObserver (line 4) | class AppBlocObserver extends BlocObserver {
    method onEvent (line 8) | void onEvent(Bloc<dynamic, dynamic> bloc, Object? event)
    method onError (line 14) | void onError(BlocBase<dynamic> bloc, Object error, StackTrace stackTrace)
    method onChange (line 20) | void onChange(BlocBase<dynamic> bloc, Change<dynamic> change)
    method onTransition (line 26) | void onTransition(

FILE: examples/flutter_firebase_login/lib/app/routes/routes.dart
  function onGenerateAppViewPages (line 6) | List<Page<dynamic>> onGenerateAppViewPages(

FILE: examples/flutter_firebase_login/lib/app/view/app.dart
  class App (line 8) | class App extends StatelessWidget {
    method build (line 17) | Widget build(BuildContext context)
  class AppView (line 31) | class AppView extends StatelessWidget {
    method build (line 35) | Widget build(BuildContext context)

FILE: examples/flutter_firebase_login/lib/home/view/home_page.dart
  class HomePage (line 6) | class HomePage extends StatelessWidget {
    method page (line 9) | Page<void> page()
    method build (line 12) | Widget build(BuildContext context)

FILE: examples/flutter_firebase_login/lib/home/widgets/avatar.dart
  class Avatar (line 5) | class Avatar extends StatelessWidget {
    method build (line 11) | Widget build(BuildContext context)

FILE: examples/flutter_firebase_login/lib/login/cubit/login_cubit.dart
  class LoginCubit (line 9) | class LoginCubit extends Cubit<LoginState> {
    method emailChanged (line 14) | void emailChanged(String email)
    method passwordChanged (line 16) | void passwordChanged(String password)
    method logInWithCredentials (line 18) | Future<void> logInWithCredentials()
    method logInWithGoogle (line 34) | Future<void> logInWithGoogle()

FILE: examples/flutter_firebase_login/lib/login/cubit/login_state.dart
  class LoginState (line 3) | final class LoginState extends Equatable {
    method withEmail (line 13) | LoginState withEmail(String email)
    method withPassword (line 17) | LoginState withPassword(String password)
    method withSubmissionInProgress (line 21) | LoginState withSubmissionInProgress()
    method withSubmissionSuccess (line 29) | LoginState withSubmissionSuccess()
    method withSubmissionFailure (line 37) | LoginState withSubmissionFailure([String? error])

FILE: examples/flutter_firebase_login/lib/login/view/login_form.dart
  class LoginForm (line 8) | class LoginForm extends StatelessWidget {
    method build (line 12) | Widget build(BuildContext context)
  class _EmailInput (line 53) | class _EmailInput extends StatelessWidget {
    method build (line 55) | Widget build(BuildContext context)
  class _PasswordInput (line 73) | class _PasswordInput extends StatelessWidget {
    method build (line 75) | Widget build(BuildContext context)
  class _LoginButton (line 94) | class _LoginButton extends StatelessWidget {
    method build (line 96) | Widget build(BuildContext context)
  class _GoogleLoginButton (line 123) | class _GoogleLoginButton extends StatelessWidget {
    method build (line 125) | Widget build(BuildContext context)
  class _SignUpButton (line 145) | class _SignUpButton extends StatelessWidget {
    method build (line 147) | Widget build(BuildContext context)

FILE: examples/flutter_firebase_login/lib/login/view/login_page.dart
  class LoginPage (line 6) | class LoginPage extends StatelessWidget {
    method page (line 9) | Page<void> page()
    method build (line 12) | Widget build(BuildContext context)

FILE: examples/flutter_firebase_login/lib/main.dart
  function main (line 7) | Future<void> main()

FILE: examples/flutter_firebase_login/lib/sign_up/cubit/sign_up_cubit.dart
  class SignUpCubit (line 9) | class SignUpCubit extends Cubit<SignUpState> {
    method emailChanged (line 14) | void emailChanged(String email)
    method passwordChanged (line 16) | void passwordChanged(String password)
    method confirmedPasswordChanged (line 18) | void confirmedPasswordChanged(String confirmedPassword)
    method signUpFormSubmitted (line 22) | Future<void> signUpFormSubmitted()

FILE: examples/flutter_firebase_login/lib/sign_up/cubit/sign_up_state.dart
  class SignUpState (line 3) | final class SignUpState extends Equatable {
    method withEmail (line 20) | SignUpState withEmail(String email)
    method withPassword (line 28) | SignUpState withPassword(String password)
    method withConfirmedPassword (line 39) | SignUpState withConfirmedPassword(String confirmedPassword)
    method withSubmissionInProgress (line 50) | SignUpState withSubmissionInProgress()
    method withSubmissionSuccess (line 59) | SignUpState withSubmissionSuccess()
    method withSubmissionFailure (line 68) | SignUpState withSubmissionFailure([String? error])

FILE: examples/flutter_firebase_login/lib/sign_up/view/sign_up_form.dart
  class SignUpForm (line 6) | class SignUpForm extends StatelessWidget {
    method build (line 10) | Widget build(BuildContext context)
  class _EmailInput (line 42) | class _EmailInput extends StatelessWidget {
    method build (line 44) | Widget build(BuildContext context)
  class _PasswordInput (line 62) | class _PasswordInput extends StatelessWidget {
    method build (line 64) | Widget build(BuildContext context)
  class _ConfirmPasswordInput (line 83) | class _ConfirmPasswordInput extends StatelessWidget {
    method build (line 85) | Widget build(BuildContext context)
  class _SignUpButton (line 104) | class _SignUpButton extends StatelessWidget {
    method build (line 106) | Widget build(BuildContext context)

FILE: examples/flutter_firebase_login/lib/sign_up/view/sign_up_page.dart
  class SignUpPage (line 6) | class SignUpPage extends StatelessWidget {
    method route (line 9) | Route<void> route()
    method build (line 14) | Widget build(BuildContext context)

FILE: examples/flutter_firebase_login/packages/authentication_repository/lib/src/authentication_repository.dart
  class SignUpWithEmailAndPasswordFailure (line 13) | class SignUpWithEmailAndPasswordFailure implements Exception {
  class LogInWithEmailAndPasswordFailure (line 57) | class LogInWithEmailAndPasswordFailure implements Exception {
  class LogInWithGoogleFailure (line 96) | class LogInWithGoogleFailure implements Exception {
  class LogOutFailure (line 148) | class LogOutFailure implements Exception {}
  class AuthenticationRepository (line 153) | class AuthenticationRepository {
    method signUp (line 199) | Future<void> signUp({required String email, required String password})
    method logInWithGoogle (line 215) | Future<void> logInWithGoogle()
    method logInWithEmailAndPassword (line 244) | Future<void> logInWithEmailAndPassword({
    method logOut (line 264) | Future<void> logOut()

FILE: examples/flutter_firebase_login/packages/authentication_repository/lib/src/models/user.dart
  class User (line 8) | class User extends Equatable {

FILE: examples/flutter_firebase_login/packages/authentication_repository/test/authentication_repository_test.dart
  class MockCacheClient (line 15) | class MockCacheClient extends Mock implements CacheClient {}
  class MockFirebaseAuth (line 17) | class MockFirebaseAuth extends Mock implements firebase_auth.FirebaseAut...
  class MockFirebaseCore (line 19) | class MockFirebaseCore extends Mock
  class MockFirebaseUser (line 23) | class MockFirebaseUser extends Mock implements firebase_auth.User {}
  class MockGoogleSignIn (line 25) | class MockGoogleSignIn extends Mock implements GoogleSignIn {}
  class MockGoogleSignInAccount (line 27) | class MockGoogleSignInAccount extends Mock implements GoogleSignInAccoun...
  class MockGoogleSignInAuthentication (line 29) | class MockGoogleSignInAuthentication extends Mock
  class MockUserCredential (line 32) | class MockUserCredential extends Mock implements firebase_auth.UserCrede...
  class FakeAuthCredential (line 34) | class FakeAuthCredential extends Fake implements firebase_auth.AuthCrede...
  class FakeAuthProvider (line 36) | class FakeAuthProvider extends Fake implements AuthProvider {}
  function main (line 38) | void main()

FILE: examples/flutter_firebase_login/packages/authentication_repository/test/models/user_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_firebase_login/packages/cache/lib/cache.dart
  class CacheClient (line 4) | class CacheClient {
    method write (line 11) | void write<T extends Object>({required String key, required T value})
    method read (line 17) | T? read<T extends Object>({required String key})

FILE: examples/flutter_firebase_login/packages/cache/test/cache_test.dart
  function main (line 4) | void main()

FILE: examples/flutter_firebase_login/packages/form_inputs/lib/src/confirmed_password.dart
  type ConfirmedPasswordValidationError (line 4) | enum ConfirmedPasswordValidationError {
  class ConfirmedPassword (line 12) | class ConfirmedPassword
    method validator (line 25) | ConfirmedPasswordValidationError? validator(String? value)

FILE: examples/flutter_firebase_login/packages/form_inputs/lib/src/email.dart
  type EmailValidationError (line 4) | enum EmailValidationError {
  class Email (line 12) | class Email extends FormzInput<String, EmailValidationError> {
    method validator (line 24) | EmailValidationError? validator(String? value)

FILE: examples/flutter_firebase_login/packages/form_inputs/lib/src/password.dart
  type PasswordValidationError (line 4) | enum PasswordValidationError {
  class Password (line 12) | class Password extends FormzInput<String, PasswordValidationError> {
    method validator (line 24) | PasswordValidationError? validator(String? value)

FILE: examples/flutter_firebase_login/test/app/bloc/app_bloc_test.dart
  class MockAuthenticationRepository (line 8) | class MockAuthenticationRepository extends Mock
  class MockUser (line 11) | class MockUser extends Mock implements User {}
  function main (line 13) | void main()
  function buildBloc (line 28) | AppBloc buildBloc()

FILE: examples/flutter_firebase_login/test/app/bloc/app_state_test.dart
  class MockUser (line 7) | class MockUser extends Mock implements User {}
  function main (line 9) | void main()

FILE: examples/flutter_firebase_login/test/app/bloc_observer_test.dart
  class FakeBloc (line 9) | class FakeBloc extends Fake implements Bloc<Object, Object> {}
  class FakeCubit (line 11) | class FakeCubit extends Fake implements Cubit<Object> {}
  class FakeEvent (line 13) | class FakeEvent extends Fake implements Object {}
  class FakeStackTrace (line 15) | class FakeStackTrace extends Fake implements StackTrace {}
  class FakeChange (line 17) | class FakeChange extends Fake implements Change<Object> {}
  class FakeTransition (line 19) | class FakeTransition extends Fake implements Transition<Object, Object> {}
  function main (line 21) | void main()
  function overridePrint (line 70) | void Function() overridePrint(void Function() testFn)

FILE: examples/flutter_firebase_login/test/app/routes/routes_test.dart
  function main (line 7) | void main()

FILE: examples/flutter_firebase_login/test/app/view/app_test.dart
  class MockUser (line 12) | class MockUser extends Mock implements User {}
  class MockAuthenticationRepository (line 14) | class MockAuthenticationRepository extends Mock
  class MockAppBloc (line 17) | class MockAppBloc extends MockBloc<AppEvent, AppState> implements AppBlo...
  function main (line 19) | void main()

FILE: examples/flutter_firebase_login/test/home/view/home_page_test.dart
  class MockAppBloc (line 10) | class MockAppBloc extends MockBloc<AppEvent, AppState> implements AppBlo...
  class MockUser (line 12) | class MockUser extends Mock implements User {}
  function main (line 14) | void main()

FILE: examples/flutter_firebase_login/test/home/widgets/avatar_test.dart
  function main (line 8) | void main()

FILE: examples/flutter_firebase_login/test/login/cubit/login_cubit_test.dart
  class MockAuthenticationRepository (line 8) | class MockAuthenticationRepository extends Mock
  function main (line 11) | void main()

FILE: examples/flutter_firebase_login/test/login/cubit/login_state_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_firebase_login/test/login/view/login_form_test.dart
  class MockAuthenticationRepository (line 10) | class MockAuthenticationRepository extends Mock
  class MockLoginCubit (line 13) | class MockLoginCubit extends MockCubit<LoginState> implements LoginCubit {}
  function main (line 15) | void main()

FILE: examples/flutter_firebase_login/test/login/view/login_page_test.dart
  class MockAuthenticationRepository (line 8) | class MockAuthenticationRepository extends Mock
  function main (line 11) | void main()

FILE: examples/flutter_firebase_login/test/sign_up/cubit/sign_up_cubit_test.dart
  class MockAuthenticationRepository (line 8) | class MockAuthenticationRepository extends Mock
  function main (line 11) | void main()

FILE: examples/flutter_firebase_login/test/sign_up/cubit/sign_up_state_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_firebase_login/test/sign_up/view/sign_up_form_test.dart
  class MockSignUpCubit (line 8) | class MockSignUpCubit extends MockCubit<SignUpState> implements SignUpCu...
  function main (line 10) | void main()

FILE: examples/flutter_firebase_login/test/sign_up/view/sign_up_page_test.dart
  class MockAuthenticationRepository (line 9) | class MockAuthenticationRepository extends Mock
  function main (line 12) | void main()

FILE: examples/flutter_form_validation/lib/bloc/my_form_bloc.dart
  class MyFormBloc (line 11) | class MyFormBloc extends Bloc<MyFormEvent, MyFormState> {
    method _onEmailChanged (line 20) | void _onEmailChanged(EmailChanged event, Emitter<MyFormState> emit)
    method _onPasswordChanged (line 31) | void _onPasswordChanged(PasswordChanged event, Emitter<MyFormState> emit)
    method _onEmailUnfocused (line 42) | void _onEmailUnfocused(EmailUnfocused event, Emitter<MyFormState> emit)
    method _onPasswordUnfocused (line 53) | void _onPasswordUnfocused(
    method _onFormSubmitted (line 67) | Future<void> _onFormSubmitted(

FILE: examples/flutter_form_validation/lib/bloc/my_form_event.dart
  class MyFormEvent (line 3) | sealed class MyFormEvent extends Equatable {
  class EmailChanged (line 10) | final class EmailChanged extends MyFormEvent {
  class EmailUnfocused (line 19) | final class EmailUnfocused extends MyFormEvent {}
  class PasswordChanged (line 21) | final class PasswordChanged extends MyFormEvent {
  class PasswordUnfocused (line 30) | final class PasswordUnfocused extends MyFormEvent {}
  class FormSubmitted (line 32) | final class FormSubmitted extends MyFormEvent {}

FILE: examples/flutter_form_validation/lib/bloc/my_form_state.dart
  class MyFormState (line 3) | final class MyFormState extends Equatable {
    method copyWith (line 16) | MyFormState copyWith({

FILE: examples/flutter_form_validation/lib/main.dart
  function main (line 6) | void main()
  class App (line 8) | class App extends StatelessWidget {
    method build (line 12) | Widget build(BuildContext context)
  class MyForm (line 24) | class MyForm extends StatefulWidget {
    method createState (line 28) | State<MyForm> createState()
  class _MyFormState (line 31) | class _MyFormState extends State<MyForm> {
    method initState (line 36) | void initState()
    method dispose (line 52) | void dispose()
    method build (line 59) | Widget build(BuildContext context)
  class EmailInput (line 95) | class EmailInput extends StatelessWidget {
    method build (line 101) | Widget build(BuildContext context)
  class PasswordInput (line 126) | class PasswordInput extends StatelessWidget {
    method build (line 132) | Widget build(BuildContext context)
  class SubmitButton (line 160) | class SubmitButton extends StatelessWidget {
    method build (line 164) | Widget build(BuildContext context)
  class SuccessDialog (line 175) | class SuccessDialog extends StatelessWidget {
    method build (line 179) | Widget build(BuildContext context)

FILE: examples/flutter_form_validation/lib/models/email.dart
  type EmailValidationError (line 3) | enum EmailValidationError { invalid }
  class Email (line 5) | final class Email extends FormzInput<String, EmailValidationError> {
    method validator (line 14) | EmailValidationError? validator(String? value)

FILE: examples/flutter_form_validation/lib/models/password.dart
  type PasswordValidationError (line 3) | enum PasswordValidationError { invalid }
  class Password (line 5) | final class Password extends FormzInput<String, PasswordValidationError> {
    method validator (line 14) | PasswordValidationError? validator(String? value)

FILE: examples/flutter_infinite_list/lib/app.dart
  class App (line 4) | class App extends MaterialApp {

FILE: examples/flutter_infinite_list/lib/main.dart
  function main (line 7) | void main()

FILE: examples/flutter_infinite_list/lib/posts/bloc/post_bloc.dart
  function throttleDroppable (line 17) | EventTransformer<E> throttleDroppable<E>(Duration duration)
  class PostBloc (line 23) | class PostBloc extends Bloc<PostEvent, PostState> {
    method _onFetched (line 35) | Future<void> _onFetched(
    method _fetchPosts (line 59) | Future<List<Post>> _fetchPosts({required int startIndex})

FILE: examples/flutter_infinite_list/lib/posts/bloc/post_event.dart
  class PostEvent (line 3) | sealed class PostEvent extends Equatable {
  class PostFetched (line 8) | final class PostFetched extends PostEvent {}

FILE: examples/flutter_infinite_list/lib/posts/bloc/post_state.dart
  type PostStatus (line 3) | enum PostStatus { initial, success, failure }
  class PostState (line 5) | final class PostState extends Equatable {
    method copyWith (line 16) | PostState copyWith({
    method toString (line 29) | String toString()

FILE: examples/flutter_infinite_list/lib/posts/models/post.dart
  class Post (line 3) | final class Post extends Equatable {

FILE: examples/flutter_infinite_list/lib/posts/view/posts_list.dart
  class PostsList (line 5) | class PostsList extends StatefulWidget {
    method createState (line 9) | State<PostsList> createState()
  class _PostsListState (line 12) | class _PostsListState extends State<PostsList> {
    method initState (line 16) | void initState()
    method build (line 22) | Widget build(BuildContext context)
    method dispose (line 51) | void dispose()
    method _onScroll (line 56) | void _onScroll()

FILE: examples/flutter_infinite_list/lib/posts/view/posts_page.dart
  class PostsPage (line 6) | class PostsPage extends StatelessWidget {
    method build (line 10) | Widget build(BuildContext context)

FILE: examples/flutter_infinite_list/lib/posts/widgets/bottom_loader.dart
  class BottomLoader (line 3) | class BottomLoader extends StatelessWidget {
    method build (line 7) | Widget build(BuildContext context)

FILE: examples/flutter_infinite_list/lib/posts/widgets/post_list_item.dart
  class PostListItem (line 4) | class PostListItem extends StatelessWidget {
    method build (line 10) | Widget build(BuildContext context)

FILE: examples/flutter_infinite_list/lib/simple_bloc_observer.dart
  class SimpleBlocObserver (line 5) | class SimpleBlocObserver extends BlocObserver {
    method onTransition (line 9) | void onTransition(
    method onError (line 18) | void onError(BlocBase<dynamic> bloc, Object error, StackTrace stackTrace)

FILE: examples/flutter_infinite_list/test/app_test.dart
  function main (line 7) | void main()

FILE: examples/flutter_infinite_list/test/posts/bloc/post_bloc_test.dart
  class MockClient (line 8) | class MockClient extends Mock implements http.Client {}
  function _postsUrl (line 10) | Uri _postsUrl({required int start})
  function main (line 18) | void main()

FILE: examples/flutter_infinite_list/test/posts/bloc/post_event_test.dart
  function main (line 4) | void main()

FILE: examples/flutter_infinite_list/test/posts/bloc/post_state_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_infinite_list/test/posts/models/post_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_infinite_list/test/posts/view/posts_list_test.dart
  class MockPostBloc (line 10) | class MockPostBloc extends MockBloc<PostEvent, PostState> implements Pos...
  function pumpPostsList (line 13) | Future<void> pumpPostsList(PostBloc postBloc)
  function main (line 25) | void main()

FILE: examples/flutter_infinite_list/test/posts/view/posts_page_test.dart
  function main (line 7) | void main()

FILE: examples/flutter_login/lib/app.dart
  class App (line 10) | class App extends StatelessWidget {
    method build (line 14) | Widget build(BuildContext context)
  class AppView (line 35) | class AppView extends StatefulWidget {
    method createState (line 39) | State<AppView> createState()
  class _AppViewState (line 42) | class _AppViewState extends State<AppView> {
    method build (line 48) | Widget build(BuildContext context)

FILE: examples/flutter_login/lib/authentication/bloc/authentication_bloc.dart
  class AuthenticationBloc (line 11) | class AuthenticationBloc
    method _onSubscriptionRequested (line 26) | Future<void> _onSubscriptionRequested(
    method _onLogoutPressed (line 51) | void _onLogoutPressed(
    method _tryGetUser (line 58) | Future<User?> _tryGetUser()

FILE: examples/flutter_login/lib/authentication/bloc/authentication_event.dart
  class AuthenticationEvent (line 3) | sealed class AuthenticationEvent {
  class AuthenticationSubscriptionRequested (line 7) | final class AuthenticationSubscriptionRequested extends AuthenticationEv...
  class AuthenticationLogoutPressed (line 9) | final class AuthenticationLogoutPressed extends AuthenticationEvent {}

FILE: examples/flutter_login/lib/authentication/bloc/authentication_state.dart
  class AuthenticationState (line 3) | class AuthenticationState extends Equatable {

FILE: examples/flutter_login/lib/home/view/home_page.dart
  class HomePage (line 5) | class HomePage extends StatelessWidget {
    method route (line 8) | Route<void> route()
    method build (line 13) | Widget build(BuildContext context)
  class _LogoutButton (line 25) | class _LogoutButton extends StatelessWidget {
    method build (line 29) | Widget build(BuildContext context)
  class _UserId (line 39) | class _UserId extends StatelessWidget {
    method build (line 43) | Widget build(BuildContext context)

FILE: examples/flutter_login/lib/login/bloc/login_bloc.dart
  class LoginBloc (line 10) | class LoginBloc extends Bloc<LoginEvent, LoginState> {
    method _onUsernameChanged (line 22) | void _onUsernameChanged(
    method _onPasswordChanged (line 35) | void _onPasswordChanged(
    method _onSubmitted (line 48) | Future<void> _onSubmitted(

FILE: examples/flutter_login/lib/login/bloc/login_event.dart
  class LoginEvent (line 3) | sealed class LoginEvent extends Equatable {
  class LoginUsernameChanged (line 10) | final class LoginUsernameChanged extends LoginEvent {
  class LoginPasswordChanged (line 19) | final class LoginPasswordChanged extends LoginEvent {
  class LoginSubmitted (line 28) | final class LoginSubmitted extends LoginEvent {

FILE: examples/flutter_login/lib/login/bloc/login_state.dart
  class LoginState (line 3) | final class LoginState extends Equatable {
    method copyWith (line 16) | LoginState copyWith({

FILE: examples/flutter_login/lib/login/models/password.dart
  type PasswordValidationError (line 3) | enum PasswordValidationError { empty }
  class Password (line 5) | class Password extends FormzInput<String, PasswordValidationError> {
    method validator (line 10) | PasswordValidationError? validator(String value)

FILE: examples/flutter_login/lib/login/models/username.dart
  type UsernameValidationError (line 3) | enum UsernameValidationError { empty }
  class Username (line 5) | class Username extends FormzInput<String, UsernameValidationError> {
    method validator (line 10) | UsernameValidationError? validator(String value)

FILE: examples/flutter_login/lib/login/view/login_form.dart
  class LoginForm (line 6) | class LoginForm extends StatelessWidget {
    method build (line 10) | Widget build(BuildContext context)
  class _UsernameInput (line 38) | class _UsernameInput extends StatelessWidget {
    method build (line 40) | Widget build(BuildContext context)
  class _PasswordInput (line 58) | class _PasswordInput extends StatelessWidget {
    method build (line 60) | Widget build(BuildContext context)
  class _LoginButton (line 79) | class _LoginButton extends StatelessWidget {
    method build (line 81) | Widget build(BuildContext context)

FILE: examples/flutter_login/lib/login/view/login_page.dart
  class LoginPage (line 6) | class LoginPage extends StatelessWidget {
    method route (line 9) | Route<void> route()
    method build (line 14) | Widget build(BuildContext context)

FILE: examples/flutter_login/lib/main.dart
  function main (line 4) | void main()

FILE: examples/flutter_login/lib/splash/view/splash_page.dart
  class SplashPage (line 3) | class SplashPage extends StatelessWidget {
    method route (line 6) | Route<void> route()
    method build (line 11) | Widget build(BuildContext context)

FILE: examples/flutter_login/packages/authentication_repository/lib/src/authentication_repository.dart
  type AuthenticationStatus (line 3) | enum AuthenticationStatus { unknown, authenticated, unauthenticated }
  class AuthenticationRepository (line 5) | class AuthenticationRepository {
    method logIn (line 14) | Future<void> logIn({
    method logOut (line 24) | void logOut()
    method dispose (line 28) | void dispose()

FILE: examples/flutter_login/packages/user_repository/lib/src/models/user.dart
  class User (line 3) | class User extends Equatable {

FILE: examples/flutter_login/packages/user_repository/lib/src/user_repository.dart
  class UserRepository (line 6) | class UserRepository {
    method getUser (line 9) | Future<User?> getUser()

FILE: examples/flutter_login/test/authentication/authentication_bloc_test.dart
  class _MockAuthenticationRepository (line 8) | class _MockAuthenticationRepository extends Mock
  class _MockUserRepository (line 11) | class _MockUserRepository extends Mock implements UserRepository {}
  function main (line 13) | void main()
  function buildBloc (line 26) | AuthenticationBloc buildBloc()

FILE: examples/flutter_login/test/authentication/authentication_state_test.dart
  class MockUser (line 7) | class MockUser extends Mock implements User {}
  function main (line 9) | void main()

FILE: examples/flutter_login/test/login/bloc/login_bloc_test.dart
  class MockAuthenticationRepository (line 8) | class MockAuthenticationRepository extends Mock
  function main (line 11) | void main()

FILE: examples/flutter_login/test/login/bloc/login_event_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_login/test/login/bloc/login_state_test.dart
  function main (line 6) | void main()

FILE: examples/flutter_login/test/login/models/password_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_login/test/login/models/username_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_login/test/login/view/login_form_test.dart
  class MockLoginBloc (line 11) | class MockLoginBloc extends MockBloc<LoginEvent, LoginState>
  function main (line 14) | void main()

FILE: examples/flutter_login/test/login/view/login_page_test.dart
  class MockAuthenticationRepository (line 10) | class MockAuthenticationRepository extends Mock
  function main (line 13) | void main()

FILE: examples/flutter_shopping_cart/lib/app.dart
  class App (line 7) | class App extends StatelessWidget {
    method build (line 13) | Widget build(BuildContext context)

FILE: examples/flutter_shopping_cart/lib/cart/bloc/cart_bloc.dart
  class CartBloc (line 11) | class CartBloc extends Bloc<CartEvent, CartState> {
    method _onStarted (line 22) | Future<void> _onStarted(CartStarted event, Emitter<CartState> emit)
    method _onItemAdded (line 32) | Future<void> _onItemAdded(
    method _onItemRemoved (line 47) | void _onItemRemoved(CartItemRemoved event, Emitter<CartState> emit)

FILE: examples/flutter_shopping_cart/lib/cart/bloc/cart_event.dart
  class CartEvent (line 3) | @immutable
  class CartStarted (line 8) | final class CartStarted extends CartEvent {
  class CartItemAdded (line 13) | final class CartItemAdded extends CartEvent {
  class CartItemRemoved (line 22) | final class CartItemRemoved extends CartEvent {

FILE: examples/flutter_shopping_cart/lib/cart/bloc/cart_state.dart
  class CartState (line 3) | @immutable
  class CartLoading (line 8) | final class CartLoading extends CartState {
  class CartLoaded (line 13) | final class CartLoaded extends CartState {
  class CartError (line 22) | final class CartError extends CartState {

FILE: examples/flutter_shopping_cart/lib/cart/models/cart.dart
  class Cart (line 4) | class Cart extends Equatable {

FILE: examples/flutter_shopping_cart/lib/cart/view/cart_page.dart
  class CartPage (line 5) | class CartPage extends StatelessWidget {
    method build (line 9) | Widget build(BuildContext context)
  class CartList (line 32) | class CartList extends StatelessWidget {
    method build (line 36) | Widget build(BuildContext context)
  class CartTotal (line 70) | class CartTotal extends StatelessWidget {
    method build (line 74) | Widget build(BuildContext context)

FILE: examples/flutter_shopping_cart/lib/catalog/bloc/catalog_bloc.dart
  class CatalogBloc (line 9) | class CatalogBloc extends Bloc<CatalogEvent, CatalogState> {
    method _onStarted (line 18) | Future<void> _onStarted(

FILE: examples/flutter_shopping_cart/lib/catalog/bloc/catalog_event.dart
  class CatalogEvent (line 3) | sealed class CatalogEvent extends Equatable {
  class CatalogStarted (line 7) | final class CatalogStarted extends CatalogEvent {

FILE: examples/flutter_shopping_cart/lib/catalog/bloc/catalog_state.dart
  class CatalogState (line 3) | sealed class CatalogState extends Equatable {
  class CatalogLoading (line 10) | final class CatalogLoading extends CatalogState {}
  class CatalogLoaded (line 12) | final class CatalogLoaded extends CatalogState {
  class CatalogError (line 21) | final class CatalogError extends CatalogState {}

FILE: examples/flutter_shopping_cart/lib/catalog/models/catalog.dart
  class Catalog (line 4) | class Catalog extends Equatable {
    method getById (line 9) | Item getById(int id)
    method getByPosition (line 11) | Item getByPosition(int position)

FILE: examples/flutter_shopping_cart/lib/catalog/models/item.dart
  class Item (line 4) | class Item extends Equatable {

FILE: examples/flutter_shopping_cart/lib/catalog/view/catalog_page.dart
  class CatalogPage (line 6) | class CatalogPage extends StatelessWidget {
    method build (line 10) | Widget build(BuildContext context)
  class AddButton (line 42) | class AddButton extends StatelessWidget {
    method build (line 48) | Widget build(BuildContext context)
  class CatalogAppBar (line 77) | class CatalogAppBar extends StatelessWidget {
    method build (line 81) | Widget build(BuildContext context)
  class CatalogListItem (line 95) | class CatalogListItem extends StatelessWidget {
    method build (line 101) | Widget build(BuildContext context)

FILE: examples/flutter_shopping_cart/lib/main.dart
  function main (line 7) | void main()

FILE: examples/flutter_shopping_cart/lib/shopping_repository.dart
  class ShoppingRepository (line 25) | class ShoppingRepository {
    method loadCatalog (line 28) | Future<List<String>> loadCatalog()
    method loadCartItems (line 30) | Future<List<Item>> loadCartItems()
    method addItemToCart (line 32) | void addItemToCart(Item item)
    method removeItemFromCart (line 34) | void removeItemFromCart(Item item)

FILE: examples/flutter_shopping_cart/lib/simple_bloc_observer.dart
  class SimpleBlocObserver (line 5) | class SimpleBlocObserver extends BlocObserver {
    method onEvent (line 9) | void onEvent(Bloc<dynamic, dynamic> bloc, Object? event)
    method onError (line 15) | void onError(BlocBase<dynamic> bloc, Object error, StackTrace stackTrace)
    method onTransition (line 21) | void onTransition(

FILE: examples/flutter_shopping_cart/test/app_test.dart
  class MockShoppingRepository (line 9) | class MockShoppingRepository extends Mock implements ShoppingRepository {}
  function main (line 11) | void main()

FILE: examples/flutter_shopping_cart/test/cart/bloc/cart_bloc_test.dart
  class MockShoppingRepository (line 8) | class MockShoppingRepository extends Mock implements ShoppingRepository {}
  function main (line 10) | void main()

FILE: examples/flutter_shopping_cart/test/cart/bloc/cart_event_test.dart
  class FakeItem (line 5) | class FakeItem extends Fake implements Item {}
  function main (line 7) | void main()

FILE: examples/flutter_shopping_cart/test/cart/bloc/cart_state_test.dart
  class FakeCart (line 4) | class FakeCart extends Fake implements Cart {}
  function main (line 6) | void main()

FILE: examples/flutter_shopping_cart/test/cart/models/cart_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_shopping_cart/test/cart/view/cart_page_test.dart
  function main (line 11) | void main()

FILE: examples/flutter_shopping_cart/test/catalog/bloc/catalog_bloc_test.dart
  class MockShoppingRepository (line 9) | class MockShoppingRepository extends Mock implements ShoppingRepository {}
  function main (line 11) | void main()

FILE: examples/flutter_shopping_cart/test/catalog/bloc/catalog_event_test.dart
  function main (line 4) | void main()

FILE: examples/flutter_shopping_cart/test/catalog/bloc/catalog_state_test.dart
  function main (line 6) | void main()

FILE: examples/flutter_shopping_cart/test/catalog/models/catalog_test.dart
  function main (line 6) | void main()

FILE: examples/flutter_shopping_cart/test/catalog/models/item_test.dart
  function main (line 4) | void main()

FILE: examples/flutter_shopping_cart/test/catalog/view/catalog_page_test.dart
  function main (line 11) | void main()

FILE: examples/flutter_shopping_cart/test/helper.dart
  class MockCartBloc (line 8) | class MockCartBloc extends MockBloc<CartEvent, CartState> implements Car...
  class MockCatalogBloc (line 10) | class MockCatalogBloc extends MockBloc<CatalogEvent, CatalogState>
  function pumpApp (line 14) | Future<void> pumpApp({

FILE: examples/flutter_shopping_cart/test/shopping_repository_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_timer/lib/app.dart
  class App (line 4) | class App extends StatelessWidget {
    method build (line 8) | Widget build(BuildContext context)

FILE: examples/flutter_timer/lib/main.dart
  function main (line 4) | void main()

FILE: examples/flutter_timer/lib/ticker.dart
  class Ticker (line 1) | class Ticker {
    method tick (line 3) | Stream<int> tick({required int ticks})

FILE: examples/flutter_timer/lib/timer/bloc/timer_bloc.dart
  class TimerBloc (line 10) | class TimerBloc extends Bloc<TimerEvent, TimerState> {
    method close (line 27) | Future<void> close()
    method _onStarted (line 32) | void _onStarted(TimerStarted event, Emitter<TimerState> emit)
    method _onPaused (line 40) | void _onPaused(TimerPaused event, Emitter<TimerState> emit)
    method _onResumed (line 47) | void _onResumed(TimerResumed resume, Emitter<TimerState> emit)
    method _onReset (line 54) | void _onReset(TimerReset event, Emitter<TimerState> emit)
    method _onTicked (line 59) | void _onTicked(_TimerTicked event, Emitter<TimerState> emit)

FILE: examples/flutter_timer/lib/timer/bloc/timer_event.dart
  class TimerEvent (line 3) | sealed class TimerEvent {
  class TimerStarted (line 7) | final class TimerStarted extends TimerEvent {
  class TimerPaused (line 12) | final class TimerPaused extends TimerEvent {
  class TimerResumed (line 16) | final class TimerResumed extends TimerEvent {
  class TimerReset (line 20) | class TimerReset extends TimerEvent {
  class _TimerTicked (line 24) | class _TimerTicked extends TimerEvent {

FILE: examples/flutter_timer/lib/timer/bloc/timer_state.dart
  class TimerState (line 3) | sealed class TimerState extends Equatable {
  class TimerInitial (line 11) | final class TimerInitial extends TimerState {
    method toString (line 15) | String toString()
  class TimerRunPause (line 18) | final class TimerRunPause extends TimerState {
    method toString (line 22) | String toString()
  class TimerRunInProgress (line 25) | final class TimerRunInProgress extends TimerState {
    method toString (line 29) | String toString()
  class TimerRunComplete (line 32) | final class TimerRunComplete extends TimerState {

FILE: examples/flutter_timer/lib/timer/view/timer_page.dart
  class TimerPage (line 6) | class TimerPage extends StatelessWidget {
    method build (line 10) | Widget build(BuildContext context)
  class TimerView (line 18) | class TimerView extends StatelessWidget {
    method build (line 22) | Widget build(BuildContext context)
  class TimerText (line 43) | class TimerText extends StatelessWidget {
    method build (line 47) | Widget build(BuildContext context)
  class Actions (line 63) | class Actions extends StatelessWidget {
    method build (line 67) | Widget build(BuildContext context)
  class Background (line 127) | class Background extends StatelessWidget {
    method build (line 131) | Widget build(BuildContext context)

FILE: examples/flutter_timer/test/app_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_timer/test/ticker_test.dart
  function main (line 4) | void main()

FILE: examples/flutter_timer/test/timer/bloc/timer_bloc_test.dart
  class _MockTicker (line 9) | class _MockTicker extends Mock implements Ticker {}
  function main (line 11) | void main()

FILE: examples/flutter_timer/test/timer/bloc/timer_state_test.dart
  function main (line 6) | void main()

FILE: examples/flutter_timer/test/timer/view/timer_page_test.dart
  class _MockTimerBloc (line 10) | class _MockTimerBloc extends MockBloc<TimerEvent, TimerState>
  function pumpTimerView (line 14) | Future<void> pumpTimerView(TimerBloc timerBloc)
  function main (line 23) | void main()
  function findPauseButton (line 144) | FloatingActionButton findPauseButton()

FILE: examples/flutter_todos/lib/app/app.dart
  class App (line 8) | class App extends StatelessWidget {
    method build (line 14) | Widget build(BuildContext context)
  class AppView (line 23) | class AppView extends StatelessWidget {
    method build (line 27) | Widget build(BuildContext context)

FILE: examples/flutter_todos/lib/app/app_bloc_observer.dart
  class AppBlocObserver (line 5) | class AppBlocObserver extends BlocObserver {
    method onChange (line 9) | void onChange(BlocBase<dynamic> bloc, Change<dynamic> change)
    method onError (line 15) | void onError(BlocBase<dynamic> bloc, Object error, StackTrace stackTrace)

FILE: examples/flutter_todos/lib/bootstrap.dart
  function bootstrap (line 11) | void bootstrap({required TodosApi todosApi})

FILE: examples/flutter_todos/lib/edit_todo/bloc/edit_todo_bloc.dart
  class EditTodoBloc (line 8) | class EditTodoBloc extends Bloc<EditTodoEvent, EditTodoState> {
    method _onTitleChanged (line 27) | void _onTitleChanged(
    method _onDescriptionChanged (line 34) | void _onDescriptionChanged(
    method _onSubmitted (line 41) | Future<void> _onSubmitted(

FILE: examples/flutter_todos/lib/edit_todo/bloc/edit_todo_event.dart
  class EditTodoEvent (line 3) | sealed class EditTodoEvent extends Equatable {
  class EditTodoTitleChanged (line 10) | final class EditTodoTitleChanged extends EditTodoEvent {
  class EditTodoDescriptionChanged (line 19) | final class EditTodoDescriptionChanged extends EditTodoEvent {
  class EditTodoSubmitted (line 28) | final class EditTodoSubmitted extends EditTodoEvent {

FILE: examples/flutter_todos/lib/edit_todo/bloc/edit_todo_state.dart
  type EditTodoStatus (line 3) | enum EditTodoStatus { initial, loading, success, failure }
  class EditTodoState (line 12) | final class EditTodoState extends Equatable {
    method copyWith (line 27) | EditTodoState copyWith({

FILE: examples/flutter_todos/lib/edit_todo/view/edit_todo_page.dart
  class EditTodoPage (line 9) | class EditTodoPage extends StatelessWidget {
    method route (line 12) | Route<void> route({Todo? initialTodo})
    method build (line 26) | Widget build(BuildContext context)
  class EditTodoView (line 37) | class EditTodoView extends StatelessWidget {
    method build (line 41) | Widget build(BuildContext context)
  class _TitleField (line 82) | class _TitleField extends StatelessWidget {
    method build (line 86) | Widget build(BuildContext context)
  class _DescriptionField (line 111) | class _DescriptionField extends StatelessWidget {
    method build (line 115) | Widget build(BuildContext context)

FILE: examples/flutter_todos/lib/home/cubit/home_cubit.dart
  class HomeCubit (line 6) | class HomeCubit extends Cubit<HomeState> {
    method setTab (line 9) | void setTab(HomeTab tab)

FILE: examples/flutter_todos/lib/home/cubit/home_state.dart
  type HomeTab (line 3) | enum HomeTab { todos, stats }
  class HomeState (line 5) | final class HomeState extends Equatable {

FILE: examples/flutter_todos/lib/home/view/home_page.dart
  class HomePage (line 8) | class HomePage extends StatelessWidget {
    method build (line 12) | Widget build(BuildContext context)
  class HomeView (line 20) | class HomeView extends StatelessWidget {
    method build (line 24) | Widget build(BuildContext context)
  class _HomeTabButton (line 61) | class _HomeTabButton extends StatelessWidget {
    method build (line 73) | Widget build(BuildContext context)

FILE: examples/flutter_todos/lib/l10n/app_localizations.dart
  class AppLocalizations (line 63) | abstract class AppLocalizations {
    method of (line 69) | AppLocalizations of(BuildContext context)
    method todosOverviewTodoDeletedSnackbarText (line 149) | String todosOverviewTodoDeletedSnackbarText(Object todoTitle)
  class _AppLocalizationsDelegate (line 254) | class _AppLocalizationsDelegate
    method load (line 259) | Future<AppLocalizations> load(Locale locale)
    method isSupported (line 264) | bool isSupported(Locale locale)
    method shouldReload (line 268) | bool shouldReload(_AppLocalizationsDelegate old)
  function lookupAppLocalizations (line 271) | AppLocalizations lookupAppLocalizations(Locale locale)

FILE: examples/flutter_todos/lib/l10n/app_localizations_en.dart
  class AppLocalizationsEn (line 8) | class AppLocalizationsEn extends AppLocalizations {
    method todosOverviewTodoDeletedSnackbarText (line 37) | String todosOverviewTodoDeletedSnackbarText(Object todoTitle)

FILE: examples/flutter_todos/lib/main_development.dart
  function main (line 5) | Future<void> main()

FILE: examples/flutter_todos/lib/main_production.dart
  function main (line 5) | Future<void> main()

FILE: examples/flutter_todos/lib/main_staging.dart
  function main (line 5) | Future<void> main()

FILE: examples/flutter_todos/lib/stats/bloc/stats_bloc.dart
  class StatsBloc (line 8) | class StatsBloc extends Bloc<StatsEvent, StatsState> {
    method _onSubscriptionRequested (line 18) | Future<void> _onSubscriptionRequested(

FILE: examples/flutter_todos/lib/stats/bloc/stats_event.dart
  class StatsEvent (line 3) | sealed class StatsEvent extends Equatable {
  class StatsSubscriptionRequested (line 10) | final class StatsSubscriptionRequested extends StatsEvent {

FILE: examples/flutter_todos/lib/stats/bloc/stats_state.dart
  type StatsStatus (line 3) | enum StatsStatus { initial, loading, success, failure }
  class StatsState (line 5) | final class StatsState extends Equatable {
    method copyWith (line 19) | StatsState copyWith({

FILE: examples/flutter_todos/lib/stats/view/stats_page.dart
  class StatsPage (line 7) | class StatsPage extends StatelessWidget {
    method build (line 11) | Widget build(BuildContext context)
  class StatsView (line 21) | class StatsView extends StatelessWidget {
    method build (line 25) | Widget build(BuildContext context)

FILE: examples/flutter_todos/lib/theme/theme.dart
  class FlutterTodosTheme (line 3) | class FlutterTodosTheme {

FILE: examples/flutter_todos/lib/todos_overview/bloc/todos_overview_bloc.dart
  class TodosOverviewBloc (line 9) | class TodosOverviewBloc extends Bloc<TodosOverviewEvent, TodosOverviewSt...
    method _onSubscriptionRequested (line 25) | Future<void> _onSubscriptionRequested(
    method _onTodoCompletionToggled (line 43) | Future<void> _onTodoCompletionToggled(
    method _onTodoDeleted (line 51) | Future<void> _onTodoDeleted(
    method _onUndoDeletionRequested (line 59) | Future<void> _onUndoDeletionRequested(
    method _onFilterChanged (line 73) | void _onFilterChanged(
    method _onToggleAllRequested (line 80) | Future<void> _onToggleAllRequested(
    method _onClearCompletedRequested (line 88) | Future<void> _onClearCompletedRequested(

FILE: examples/flutter_todos/lib/todos_overview/bloc/todos_overview_event.dart
  class TodosOverviewEvent (line 3) | sealed class TodosOverviewEvent extends Equatable {
  class TodosOverviewSubscriptionRequested (line 10) | final class TodosOverviewSubscriptionRequested extends TodosOverviewEvent {
  class TodosOverviewTodoCompletionToggled (line 14) | final class TodosOverviewTodoCompletionToggled extends TodosOverviewEvent {
  class TodosOverviewTodoDeleted (line 27) | final class TodosOverviewTodoDeleted extends TodosOverviewEvent {
  class TodosOverviewUndoDeletionRequested (line 36) | final class TodosOverviewUndoDeletionRequested extends TodosOverviewEvent {
  class TodosOverviewFilterChanged (line 40) | class TodosOverviewFilterChanged extends TodosOverviewEvent {
  class TodosOverviewToggleAllRequested (line 49) | class TodosOverviewToggleAllRequested extends TodosOverviewEvent {
  class TodosOverviewClearCompletedRequested (line 53) | class TodosOverviewClearCompletedRequested extends TodosOverviewEvent {

FILE: examples/flutter_todos/lib/todos_overview/bloc/todos_overview_state.dart
  type TodosOverviewStatus (line 3) | enum TodosOverviewStatus { initial, loading, success, failure }
  class TodosOverviewState (line 5) | final class TodosOverviewState extends Equatable {
    method copyWith (line 20) | TodosOverviewState copyWith({

FILE: examples/flutter_todos/lib/todos_overview/models/todos_view_filter.dart
  type TodosViewFilter (line 3) | enum TodosViewFilter { all, activeOnly, completedOnly }
  function apply (line 6) | bool apply(Todo todo)
  function applyAll (line 17) | Iterable<Todo> applyAll(Iterable<Todo> todos)

FILE: examples/flutter_todos/lib/todos_overview/view/todos_overview_page.dart
  class TodosOverviewPage (line 9) | class TodosOverviewPage extends StatelessWidget {
    method build (line 13) | Widget build(BuildContext context)
  class TodosOverviewView (line 23) | class TodosOverviewView extends StatelessWidget {
    method build (line 27) | Widget build(BuildContext context)

FILE: examples/flutter_todos/lib/todos_overview/widgets/todo_list_tile.dart
  class TodoListTile (line 4) | class TodoListTile extends StatelessWidget {
    method build (line 19) | Widget build(BuildContext context)

FILE: examples/flutter_todos/lib/todos_overview/widgets/todos_overview_filter_button.dart
  class TodosOverviewFilterButton (line 6) | class TodosOverviewFilterButton extends StatelessWidget {
    method build (line 10) | Widget build(BuildContext context)

FILE: examples/flutter_todos/lib/todos_overview/widgets/todos_overview_options_button.dart
  type TodosOverviewOption (line 6) | @visibleForTesting
  class TodosOverviewOptionsButton (line 9) | class TodosOverviewOptionsButton extends StatelessWidget {
    method build (line 13) | Widget build(BuildContext context)

FILE: examples/flutter_todos/packages/local_storage_todos_api/lib/src/local_storage_todos_api.dart
  class LocalStorageTodosApi (line 12) | class LocalStorageTodosApi extends TodosApi {
    method _getValue (line 33) | String? _getValue(String key)
    method _setValue (line 34) | Future<void> _setValue(String key, String value)
    method _init (line 37) | void _init()
    method getTodos (line 55) | Stream<List<Todo>> getTodos()
    method saveTodo (line 58) | Future<void> saveTodo(Todo todo)
    method deleteTodo (line 72) | Future<void> deleteTodo(String id)
    method clearCompleted (line 85) | Future<int> clearCompleted()
    method completeAll (line 98) | Future<int> completeAll({required bool isCompleted})
    method close (line 112) | Future<void> close()

FILE: examples/flutter_todos/packages/local_storage_todos_api/test/local_storage_todos_api_test.dart
  class MockSharedPreferences (line 8) | class MockSharedPreferences extends Mock implements SharedPreferences {}
  function main (line 10) | void main()
  function createSubject (line 39) | LocalStorageTodosApi createSubject()

FILE: examples/flutter_todos/packages/todos_api/lib/src/models/json_map.dart
  type JsonMap (line 2) | typedef JsonMap = Map<String, dynamic>;

FILE: examples/flutter_todos/packages/todos_api/lib/src/models/todo.dart
  class Todo (line 22) | @immutable
    method copyWith (line 60) | Todo copyWith({
    method fromJson (line 75) | Todo fromJson(JsonMap json)
    method toJson (line 78) | JsonMap toJson()

FILE: examples/flutter_todos/packages/todos_api/lib/src/models/todo.g.dart
  function _$TodoFromJson (line 9) | Todo _$TodoFromJson(Map<String, dynamic> json)
  function _$TodoToJson (line 16) | Map<String, dynamic> _$TodoToJson(Todo instance)

FILE: examples/flutter_todos/packages/todos_api/lib/src/todos_api.dart
  class TodosApi (line 6) | abstract class TodosApi {
    method getTodos (line 11) | Stream<List<Todo>> getTodos()
    method saveTodo (line 16) | Future<void> saveTodo(Todo todo)
    method deleteTodo (line 22) | Future<void> deleteTodo(String id)
    method clearCompleted (line 27) | Future<int> clearCompleted()
    method completeAll (line 32) | Future<int> completeAll({required bool isCompleted})
    method close (line 35) | Future<void> close()
  class TodoNotFoundException (line 39) | class TodoNotFoundException implements Exception {}

FILE: examples/flutter_todos/packages/todos_api/test/models/todo_test.dart
  function main (line 5) | void main()
  function createSubject (line 7) | Todo createSubject({

FILE: examples/flutter_todos/packages/todos_api/test/todos_api_test.dart
  class TestTodosApi (line 4) | class TestTodosApi extends TodosApi {
    method noSuchMethod (line 8) | dynamic noSuchMethod(Invocation invocation)
  function main (line 13) | void main()

FILE: examples/flutter_todos/packages/todos_repository/lib/src/todos_repository.dart
  class TodosRepository (line 6) | class TodosRepository {
    method getTodos (line 15) | Stream<List<Todo>> getTodos()
    method saveTodo (line 20) | Future<void> saveTodo(Todo todo)
    method deleteTodo (line 26) | Future<void> deleteTodo(String id)
    method clearCompleted (line 31) | Future<int> clearCompleted()
    method completeAll (line 36) | Future<int> completeAll({required bool isCompleted})
    method dispose (line 40) | void dispose()

FILE: examples/flutter_todos/packages/todos_repository/test/todos_repository_test.dart
  class MockTodosApi (line 6) | class MockTodosApi extends Mock implements TodosApi {}
  class FakeTodo (line 8) | class FakeTodo extends Fake implements Todo {}
  function main (line 10) | void main()
  function createSubject (line 51) | TodosRepository createSubject()

FILE: examples/flutter_todos/test/app_test.dart
  function main (line 12) | void main()

FILE: examples/flutter_todos/test/edit_todo/bloc/edit_todo_bloc_test.dart
  class MockTodosRepository (line 7) | class MockTodosRepository extends Mock implements TodosRepository {}
  class FakeTodo (line 9) | class FakeTodo extends Fake implements Todo {}
  function main (line 11) | void main()
  function buildBloc (line 23) | EditTodoBloc buildBloc()

FILE: examples/flutter_todos/test/edit_todo/bloc/edit_todo_event_test.dart
  function main (line 6) | void main()

FILE: examples/flutter_todos/test/edit_todo/bloc/edit_todo_state_test.dart
  function main (line 7) | void main()
  function createSubject (line 15) | EditTodoState createSubject({

FILE: examples/flutter_todos/test/edit_todo/view/edit_todo_page_test.dart
  class MockEditTodoBloc (line 11) | class MockEditTodoBloc extends MockBloc<EditTodoEvent, EditTodoState>
  function main (line 14) | void main()
  function buildSubject (line 40) | Widget buildSubject()
  function buildSubject (line 106) | Widget buildSubject()

FILE: examples/flutter_todos/test/helpers/finders.dart
  function bySpecificType (line 9) | Finder bySpecificType<T>()

FILE: examples/flutter_todos/test/helpers/pump_app.dart
  class MockTodosRepository (line 9) | class MockTodosRepository extends Mock implements TodosRepository {}
  function pumpApp (line 12) | Future<void> pumpApp(
  function pumpRoute (line 31) | Future<void> pumpRoute(

FILE: examples/flutter_todos/test/home/cubit/home_cubit_test.dart
  function main (line 5) | void main()
  function buildCubit (line 7) | HomeCubit buildCubit()

FILE: examples/flutter_todos/test/home/view/home_page_test.dart
  class MockHomeCubit (line 13) | class MockHomeCubit extends MockCubit<HomeState> implements HomeCubit {}
  function main (line 15) | void main()
  function buildSubject (line 54) | Widget buildSubject()

FILE: examples/flutter_todos/test/stats/bloc/stats_bloc_test.dart
  class MockTodosRepository (line 7) | class MockTodosRepository extends Mock implements TodosRepository {}
  function main (line 9) | void main()
  function buildBloc (line 24) | StatsBloc buildBloc()

FILE: examples/flutter_todos/test/stats/bloc/stats_event_test.dart
  function main (line 6) | void main()

FILE: examples/flutter_todos/test/stats/bloc/stats_state_test.dart
  function main (line 6) | void main()
  function createSubject (line 8) | StatsState createSubject({

FILE: examples/flutter_todos/test/stats/view/stats_page_test.dart
  class MockStatsBloc (line 11) | class MockStatsBloc extends MockBloc<StatsEvent, StatsState>
  function main (line 14) | void main()
  function buildSubject (line 63) | Widget buildSubject()

FILE: examples/flutter_todos/test/todos_overview/bloc/todos_overview_bloc_test.dart
  class MockTodosRepository (line 7) | class MockTodosRepository extends Mock implements TodosRepository {}
  class FakeTodo (line 9) | class FakeTodo extends Fake implements Todo {}
  function main (line 11) | void main()
  function buildBloc (line 46) | TodosOverviewBloc buildBloc()

FILE: examples/flutter_todos/test/todos_overview/bloc/todos_overview_event_test.dart
  function main (line 7) | void main()

FILE: examples/flutter_todos/test/todos_overview/bloc/todos_overview_state_test.dart
  function main (line 7) | void main()
  function createSubject (line 15) | TodosOverviewState createSubject({

FILE: examples/flutter_todos/test/todos_overview/models/todos_view_filter_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_todos/test/todos_overview/view/todos_overview_page_test.dart
  class MockTodosRepository (line 12) | class MockTodosRepository extends Mock implements TodosRepository {}
  class MockTodosOverviewBloc (line 14) | class MockTodosOverviewBloc
  function main (line 18) | void main()
  function buildSubject (line 89) | Widget buildSubject()

FILE: examples/flutter_todos/test/todos_overview/widgets/todo_list_tile_test.dart
  function main (line 8) | void main()
  function buildSubject (line 29) | Widget buildSubject({Todo? todo})

FILE: examples/flutter_todos/test/todos_overview/widgets/todos_overview_filter_button_test.dart
  class MockTodosOverviewBloc (line 12) | class MockTodosOverviewBloc
  function filterMenuItem (line 17) | Finder filterMenuItem({
  function openPopup (line 31) | Future<void> openPopup()
  function main (line 37) | void main()
  function buildSubject (line 51) | Widget buildSubject()

FILE: examples/flutter_todos/test/todos_overview/widgets/todos_overview_options_button_test.dart
  class MockTodosOverviewBloc (line 14) | class MockTodosOverviewBloc
  function optionMenuItem (line 19) | Finder optionMenuItem({
  function openPopup (line 33) | Future<void> openPopup()
  function main (line 39) | void main()
  function buildSubject (line 53) | Widget buildSubject()

FILE: examples/flutter_weather/lib/app.dart
  class WeatherApp (line 8) | class WeatherApp extends StatelessWidget {
    method build (line 12) | Widget build(BuildContext context)
  class WeatherAppView (line 24) | class WeatherAppView extends StatelessWidget {
    method build (line 28) | Widget build(BuildContext context)

FILE: examples/flutter_weather/lib/main.dart
  function main (line 8) | void main()

FILE: examples/flutter_weather/lib/search/view/search_page.dart
  class SearchPage (line 3) | class SearchPage extends StatefulWidget {
    method route (line 6) | Route<String> route()
    method createState (line 11) | State<SearchPage> createState()
  class _SearchPageState (line 14) | class _SearchPageState extends State<SearchPage> {
    method dispose (line 20) | void dispose()
    method build (line 26) | Widget build(BuildContext context)

FILE: examples/flutter_weather/lib/settings/view/settings_page.dart
  class SettingsPage (line 5) | class SettingsPage extends StatelessWidget {
    method route (line 8) | Route<void> route()
    method build (line 15) | Widget build(BuildContext context)

FILE: examples/flutter_weather/lib/weather/cubit/weather_cubit.dart
  class WeatherCubit (line 11) | class WeatherCubit extends HydratedCubit<WeatherState> {
    method fetchWeather (line 16) | Future<void> fetchWeather(String? city)
    method refreshWeather (line 42) | Future<void> refreshWeather()
    method toggleUnits (line 66) | void toggleUnits()
    method fromJson (line 92) | WeatherState fromJson(Map<String, dynamic> json)
    method toJson (line 96) | Map<String, dynamic> toJson(WeatherState state)
  function toFahrenheit (line 100) | double toFahrenheit()
  function toCelsius (line 101) | double toCelsius()

FILE: examples/flutter_weather/lib/weather/cubit/weather_cubit.g.dart
  function _$WeatherStateFromJson (line 9) | WeatherState _$WeatherStateFromJson(Map<String, dynamic> json)
  function _$WeatherStateToJson (line 38) | Map<String, dynamic> _$WeatherStateToJson(

FILE: examples/flutter_weather/lib/weather/cubit/weather_state.dart
  type WeatherStatus (line 3) | enum WeatherStatus { initial, loading, success, failure }
  class WeatherState (line 12) | @JsonSerializable()
    method copyWith (line 27) | WeatherState copyWith({
    method toJson (line 39) | Map<String, dynamic> toJson()

FILE: examples/flutter_weather/lib/weather/models/weather.dart
  type TemperatureUnits (line 9) | enum TemperatureUnits { fahrenheit, celsius }
  class Temperature (line 16) | @JsonSerializable()
    method toJson (line 25) | Map<String, dynamic> toJson()
  class Weather (line 31) | @JsonSerializable()
    method toJson (line 67) | Map<String, dynamic> toJson()
    method copyWith (line 69) | Weather copyWith({

FILE: examples/flutter_weather/lib/weather/models/weather.g.dart
  function _$TemperatureFromJson (line 9) | Temperature _$TemperatureFromJson(Map<String, dynamic> json)
  function _$TemperatureToJson (line 20) | Map<String, dynamic> _$TemperatureToJson(Temperature instance)
  function _$WeatherFromJson (line 25) | Weather _$WeatherFromJson(Map<String, dynamic> json)
  function _$WeatherToJson (line 49) | Map<String, dynamic> _$WeatherToJson(Weather instance)

FILE: examples/flutter_weather/lib/weather/view/weather_page.dart
  class WeatherPage (line 7) | class WeatherPage extends StatelessWidget {
    method build (line 11) | Widget build(BuildContext context)

FILE: examples/flutter_weather/lib/weather/widgets/weather_empty.dart
  class WeatherEmpty (line 3) | class WeatherEmpty extends StatelessWidget {
    method build (line 7) | Widget build(BuildContext context)

FILE: examples/flutter_weather/lib/weather/widgets/weather_error.dart
  class WeatherError (line 3) | class WeatherError extends StatelessWidget {
    method build (line 7) | Widget build(BuildContext context)

FILE: examples/flutter_weather/lib/weather/widgets/weather_loading.dart
  class WeatherLoading (line 3) | class WeatherLoading extends StatelessWidget {
    method build (line 7) | Widget build(BuildContext context)

FILE: examples/flutter_weather/lib/weather/widgets/weather_populated.dart
  class WeatherPopulated (line 4) | class WeatherPopulated extends StatelessWidget {
    method build (line 17) | Widget build(BuildContext context)
  class _WeatherIcon (line 59) | class _WeatherIcon extends StatelessWidget {
    method build (line 67) | Widget build(BuildContext context)
  class _WeatherBackground (line 92) | class _WeatherBackground extends StatelessWidget {
    method build (line 94) | Widget build(BuildContext context)
  function brighten (line 117) | Color brighten([int percent = 10])
  function formattedTemperature (line 137) | String formattedTemperature(TemperatureUnits units)

FILE: examples/flutter_weather/lib/weather_bloc_observer.dart
  class WeatherBlocObserver (line 5) | class WeatherBlocObserver extends BlocObserver {
    method onEvent (line 9) | void onEvent(Bloc<dynamic, dynamic> bloc, Object? event)
    method onChange (line 15) | void onChange(BlocBase<dynamic> bloc, Change<dynamic> change)
    method onTransition (line 21) | void onTransition(
    method onError (line 30) | void onError(BlocBase<dynamic> bloc, Object error, StackTrace stackTrace)

FILE: examples/flutter_weather/linux/flutter/generated_plugin_registrant.cc
  function fl_register_plugins (line 10) | void fl_register_plugins(FlPluginRegistry* registry) {

FILE: examples/flutter_weather/packages/open_meteo_api/lib/src/models/location.dart
  class Location (line 5) | @JsonSerializable()

FILE: examples/flutter_weather/packages/open_meteo_api/lib/src/models/location.g.dart
  function _$LocationFromJson (line 11) | Location _$LocationFromJson(Map<String, dynamic> json)

FILE: examples/flutter_weather/packages/open_meteo_api/lib/src/models/weather.dart
  class Weather (line 5) | @JsonSerializable()

FILE: examples/flutter_weather/packages/open_meteo_api/lib/src/models/weather.g.dart
  function _$WeatherFromJson (line 11) | Weather _$WeatherFromJson(Map<String, dynamic> json)

FILE: examples/flutter_weather/packages/open_meteo_api/lib/src/open_meteo_api_client.dart
  class LocationRequestFailure (line 8) | class LocationRequestFailure implements Exception {}
  class LocationNotFoundFailure (line 11) | class LocationNotFoundFailure implements Exception {}
  class WeatherRequestFailure (line 14) | class WeatherRequestFailure implements Exception {}
  class WeatherNotFoundFailure (line 17) | class WeatherNotFoundFailure implements Exception {}
  class OpenMeteoApiClient (line 22) | class OpenMeteoApiClient {
    method locationSearch (line 33) | Future<Location> locationSearch(String query)
    method getWeather (line 58) | Future<Weather> getWeather({
    method close (line 86) | void close()

FILE: examples/flutter_weather/packages/open_meteo_api/test/location_test.dart
  function main (line 4) | void main()

FILE: examples/flutter_weather/packages/open_meteo_api/test/open_meteo_api_client_test.dart
  class MockHttpClient (line 6) | class MockHttpClient extends Mock implements http.Client {}
  class MockResponse (line 8) | class MockResponse extends Mock implements http.Response {}
  class FakeUri (line 10) | class FakeUri extends Fake implements Uri {}
  function main (line 12) | void main()

FILE: examples/flutter_weather/packages/open_meteo_api/test/weather_test.dart
  function main (line 4) | void main()

FILE: examples/flutter_weather/packages/weather_repository/lib/src/models/weather.dart
  type WeatherCondition (line 6) | enum WeatherCondition {
  class Weather (line 14) | @JsonSerializable()
    method toJson (line 25) | Map<String, dynamic> toJson()

FILE: examples/flutter_weather/packages/weather_repository/lib/src/models/weather.g.dart
  function _$WeatherFromJson (line 9) | Weather _$WeatherFromJson(Map<String, dynamic> json)
  function _$WeatherToJson (line 25) | Map<String, dynamic> _$WeatherToJson(Weather instance)

FILE: examples/flutter_weather/packages/weather_repository/lib/src/weather_repository.dart
  class WeatherRepository (line 6) | class WeatherRepository {
    method getWeather (line 12) | Future<Weather> getWeather(String city)
    method dispose (line 25) | void dispose()

FILE: examples/flutter_weather/packages/weather_repository/test/src/models/weather_test.dart
  function main (line 6) | void main()

FILE: examples/flutter_weather/packages/weather_repository/test/weather_repository_test.dart
  class MockOpenMeteoApiClient (line 7) | class MockOpenMeteoApiClient extends Mock
  class MockLocation (line 10) | class MockLocation extends Mock implements open_meteo_api.Location {}
  class MockWeather (line 12) | class MockWeather extends Mock implements open_meteo_api.Weather {}
  function main (line 14) | void main()

FILE: examples/flutter_weather/test/app_test.dart
  class MockWeatherCubit (line 13) | class MockWeatherCubit extends MockCubit<WeatherState>
  class MockWeatherRepository (line 16) | class MockWeatherRepository extends Mock implements WeatherRepository {}
  function main (line 18) | void main()

FILE: examples/flutter_weather/test/helpers/hydrated_bloc.dart
  class MockStorage (line 5) | class MockStorage extends Mock implements Storage {}
  function initHydratedStorage (line 9) | void initHydratedStorage()

FILE: examples/flutter_weather/test/search/view/search_page_test.dart
  function main (line 5) | void main()

FILE: examples/flutter_weather/test/settings/view/settings_page_test.dart
  class MockWeatherCubit (line 9) | class MockWeatherCubit extends MockCubit<WeatherState>
  function main (line 12) | void main()

FILE: examples/flutter_weather/test/weather/cubit/weather_cubit_test.dart
  class MockWeatherRepository (line 15) | class MockWeatherRepository extends Mock
  class MockWeather (line 18) | class MockWeather extends Mock implements weather_repository.Weather {}
  function main (line 20) | void main()

FILE: examples/flutter_weather/test/weather/cubit/weather_state_test.dart
  function main (line 4) | void main()

FILE: examples/flutter_weather/test/weather/view/weather_page_test.dart
  class MockWeatherRepository (line 15) | class MockWeatherRepository extends Mock implements WeatherRepository {}
  class MockWeatherCubit (line 17) | class MockWeatherCubit extends MockCubit<WeatherState>
  function main (line 20) | void main()

FILE: examples/flutter_weather/test/weather/widgets/weather_empty_test.dart
  function main (line 6) | void main()

FILE: examples/flutter_weather/test/weather/widgets/weather_error_test.dart
  function main (line 6) | void main()

FILE: examples/flutter_weather/test/weather/widgets/weather_loading_test.dart
  function main (line 6) | void main()

FILE: examples/flutter_weather/test/weather/widgets/weather_populated_test.dart
  function main (line 7) | void main()

FILE: examples/flutter_wizard/lib/bloc/profile_wizard_bloc.dart
  class ProfileWizardBloc (line 7) | class ProfileWizardBloc extends Bloc<ProfileWizardEvent, ProfileWizardSt...

FILE: examples/flutter_wizard/lib/bloc/profile_wizard_event.dart
  class ProfileWizardEvent (line 3) | sealed class ProfileWizardEvent extends Equatable {
  class ProfileWizardNameSubmitted (line 10) | final class ProfileWizardNameSubmitted extends ProfileWizardEvent {
  class ProfileWizardAgeSubmitted (line 19) | final class ProfileWizardAgeSubmitted extends ProfileWizardEvent {

FILE: examples/flutter_wizard/lib/bloc/profile_wizard_state.dart
  class Profile (line 3) | final class Profile extends Equatable {
    method copyWith (line 9) | Profile copyWith({String? name, int? age})
  class ProfileWizardState (line 20) | final class ProfileWizardState extends Equatable {
    method copyWith (line 29) | ProfileWizardState copyWith({Profile? profile})

FILE: examples/flutter_wizard/lib/main.dart
  function main (line 6) | void main()
  class MyApp (line 8) | class MyApp extends StatelessWidget {
    method build (line 12) | Widget build(BuildContext context)
  class Home (line 15) | class Home extends StatefulWidget {
    method createState (line 19) | State<Home> createState()
  class _HomeState (line 22) | class _HomeState extends State<Home> {
    method build (line 24) | Widget build(BuildContext context)
  class ProfileWizard (line 49) | class ProfileWizard extends StatelessWidget {
    method route (line 52) | Route<Profile> route()
    method build (line 57) | Widget build(BuildContext context)
  class ProfileWizardFlow (line 67) | class ProfileWizardFlow extends StatelessWidget {
    method build (line 73) | Widget build(BuildContext context)
  class ProfileNameForm (line 90) | class ProfileNameForm extends StatefulWidget {
    method page (line 93) | Page<void> page()
    method createState (line 98) | State<ProfileNameForm> createState()
  class _ProfileNameFormState (line 101) | class _ProfileNameFormState extends State<ProfileNameForm> {
    method build (line 105) | Widget build(BuildContext context)
  class ProfileAgeForm (line 136) | class ProfileAgeForm extends StatefulWidget {
    method page (line 139) | Page<void> page()
    method createState (line 142) | State<ProfileAgeForm> createState()
  class _ProfileAgeFormState (line 145) | class _ProfileAgeFormState extends State<ProfileAgeForm> {
    method build (line 149) | Widget build(BuildContext context)

FILE: examples/github_search/angular_github_search/lib/app_component.dart
  class AppComponent (line 5) | @Component(

FILE: examples/github_search/angular_github_search/lib/src/search_form/search_bar/search_bar_component.dart
  class SearchBarComponent (line 4) | @Component(
    method onTextChanged (line 12) | void onTextChanged(String text)

FILE: examples/github_search/angular_github_search/lib/src/search_form/search_body/search_body_component.dart
  class SearchBodyComponent (line 5) | @Component(

FILE: examples/github_search/angular_github_search/lib/src/search_form/search_body/search_results/search_result_item/search_result_item_component.dart
  class SearchResultItemComponent (line 4) | @Component(

FILE: examples/github_search/angular_github_search/lib/src/search_form/search_body/search_results/search_results_component.dart
  class SearchResultsComponent (line 5) | @Component(

FILE: examples/github_search/angular_github_search/lib/src/search_form/search_form_component.dart
  class SearchFormComponent (line 6) | @Component(
    method ngOnInit (line 22) | void ngOnInit()
    method ngOnDestroy (line 29) | void ngOnDestroy()

FILE: examples/github_search/angular_github_search/web/main.dart
  function main (line 4) | void main()

FILE: examples/github_search/common_github_search/lib/src/github_cache.dart
  class GithubCache (line 3) | class GithubCache {
    method get (line 6) | SearchResult? get(String term)
    method set (line 8) | void set(String term, SearchResult result)
    method contains (line 10) | bool contains(String term)
    method remove (line 12) | void remove(String term)
    method close (line 14) | void close()

FILE: examples/github_search/common_github_search/lib/src/github_client.dart
  class GithubClient (line 7) | class GithubClient {
    method search (line 16) | Future<SearchResult> search(String term)
    method close (line 27) | void close()

FILE: examples/github_search/common_github_search/lib/src/github_repository.dart
  class GithubRepository (line 5) | class GithubRepository {
    method search (line 13) | Future<SearchResult> search(String term)
    method dispose (line 23) | void dispose()

FILE: examples/github_search/common_github_search/lib/src/github_search_bloc/github_search_bloc.dart
  function debounce (line 7) | EventTransformer<Event> debounce<Event>(Duration duration)
  class GithubSearchBloc (line 11) | class GithubSearchBloc extends Bloc<GithubSearchEvent, GithubSearchState> {
    method _onTextChanged (line 20) | Future<void> _onTextChanged(

FILE: examples/github_search/common_github_search/lib/src/github_search_bloc/github_search_event.dart
  class GithubSearchEvent (line 3) | sealed class GithubSearchEvent extends Equatable {
  class TextChanged (line 7) | final class TextChanged extends GithubSearchEvent {
    method toString (line 16) | String toString()

FILE: examples/github_search/common_github_search/lib/src/github_search_bloc/github_search_state.dart
  class GithubSearchState (line 4) | sealed class GithubSearchState extends Equatable {
  class SearchStateEmpty (line 11) | final class SearchStateEmpty extends GithubSearchState {}
  class SearchStateLoading (line 13) | final class SearchStateLoading extends GithubSearchState {}
  class SearchStateSuccess (line 15) | final class SearchStateSuccess extends GithubSearchState {
    method toString (line 24) | String toString()
  class SearchStateError (line 27) | final class SearchStateError extends GithubSearchState {

FILE: examples/github_search/common_github_search/lib/src/models/github_user.dart
  class GithubUser (line 1) | class GithubUser {

FILE: examples/github_search/common_github_search/lib/src/models/search_result.dart
  class SearchResult (line 3) | class SearchResult {

FILE: examples/github_search/common_github_search/lib/src/models/search_result_error.dart
  class SearchResultError (line 1) | class SearchResultError implements Exception {

FILE: examples/github_search/common_github_search/lib/src/models/search_result_item.dart
  class SearchResultItem (line 3) | class SearchResultItem {

FILE: examples/github_search/flutter_github_search/lib/main.dart
  function main (line 6) | void main()
  class App (line 8) | class App extends StatelessWidget {
    method build (line 12) | Widget build(BuildContext context)

FILE: examples/github_search/flutter_github_search/lib/search_form.dart
  class SearchForm (line 6) | class SearchForm extends StatelessWidget {
    method build (line 10) | Widget build(BuildContext context)
  class _SearchBar (line 20) | class _SearchBar extends StatefulWidget {
    method createState (line 22) | State<_SearchBar> createState()
  class _SearchBarState (line 25) | class _SearchBarState extends State<_SearchBar> {
    method initState (line 30) | void initState()
    method dispose (line 36) | void dispose()
    method build (line 42) | Widget build(BuildContext context)
    method _onClearTapped (line 63) | void _onClearTapped()
  class _SearchBody (line 69) | class _SearchBody extends StatelessWidget {
    method build (line 71) | Widget build(BuildContext context)
  class _SearchResults (line 88) | class _SearchResults extends StatelessWidget {
    method build (line 94) | Widget build(BuildContext context)
  class _SearchResultItem (line 104) | class _SearchResultItem extends StatelessWidget {
    method build (line 110) | Widget build(BuildContext context)

FILE: extensions/intellij/intellij_generator_plugin/src/main/java/com/bloc/intellij_generator_plugin/action/BlocTemplateType.java
  type BlocTemplateType (line 3) | public enum BlocTemplateType {

FILE: extensions/intellij/intellij_generator_plugin/src/main/java/com/bloc/intellij_generator_plugin/action/GenerateBlocDialog.java
  class GenerateBlocDialog (line 9) | public class GenerateBlocDialog extends DialogWrapper {
    method GenerateBlocDialog (line 16) | public GenerateBlocDialog(final Listener listener) {
    method createCenterPanel (line 22) | @Nullable
    method doOKAction (line 28) | @Override
    method getPreferredFocusedComponent (line 43) | @Nullable
    type Listener (line 49) | public interface Listener {
      method onGenerateBlocClicked (line 50) | void onGenerateBlocClicked(String blocName, BlocTemplateType blocTem...

FILE: extensions/vscode/src/code-actions/bloc-code-action-provider.ts
  class BlocCodeActionProvider (line 14) | class BlocCodeActionProvider implements CodeActionProvider {
    method provideCodeActions (line 15) | public provideCodeActions(): CodeAction[] {

FILE: extensions/vscode/src/commands/new-bloc.command.ts
  function promptForBlocName (line 53) | function promptForBlocName(): Thenable<string | undefined> {
  function promptForTargetDirectory (line 61) | async function promptForTargetDirectory(): Promise<string | undefined> {
  function generateBlocCode (line 76) | async function generateBlocCode(
  function createDirectory (line 110) | function createDirectory(targetDirectory: string): Promise<void> {
  function createBlocEventTemplate (line 121) | function createBlocEventTemplate(
  function createBlocStateTemplate (line 148) | function createBlocStateTemplate(
  function createBlocTemplate (line 175) | function createBlocTemplate(

FILE: extensions/vscode/src/commands/new-cubit.command.ts
  function promptForCubitName (line 49) | function promptForCubitName(): Thenable<string | undefined> {
  function promptForTargetDirectory (line 57) | async function promptForTargetDirectory(): Promise<string | undefined> {
  function generateCubitCode (line 72) | async function generateCubitCode(
  function createDirectory (line 96) | function createDirectory(targetDirectory: string): Promise<void> {
  function createCubitStateTemplate (line 107) | function createCubitStateTemplate(
  function createCubitTemplate (line 134) | function createCubitTemplate(

FILE: extensions/vscode/src/extension.ts
  function activate (line 27) | function activate(context: ExtensionContext) {
  function deactivate (line 90) | function deactivate(): Thenable<void> | undefined {

FILE: extensions/vscode/src/language-server/language-server.ts
  constant DART_FILE (line 13) | const DART_FILE = { language: "dart", scheme: "file" };
  constant ANALYSIS_OPTIONS_FILE (line 14) | const ANALYSIS_OPTIONS_FILE = {
  function startLanguageServer (line 19) | async function startLanguageServer(executable: string) {
  function startLanguageServerWithProgress (line 45) | async function startLanguageServerWithProgress(executable: string) {
  function tryStartLanguageServer (line 62) | async function tryStartLanguageServer(

FILE: extensions/vscode/src/language-server/selectors.ts
  constant ANALYSIS_OPTIONS_FILE (line 1) | const ANALYSIS_OPTIONS_FILE = {
  constant DART_FILE (line 5) | const DART_FILE = { language: "dart", scheme: "file" };

FILE: extensions/vscode/src/templates/bloc-event.template.ts
  function getBlocEventTemplate (line 4) | function getBlocEventTemplate(
  function getEquatableBlocEventTemplate (line 19) | function getEquatableBlocEventTemplate(
  function getDefaultBlocEventTemplate (line 37) | function getDefaultBlocEventTemplate(
  function getFreezedBlocEvent (line 51) | function getFreezedBlocEvent(blocName: string): string {

FILE: extensions/vscode/src/templates/bloc-state.template.ts
  function getBlocStateTemplate (line 4) | function getBlocStateTemplate(
  function getEquatableBlocStateTemplate (line 19) | function getEquatableBlocStateTemplate(
  function getDefaultBlocStateTemplate (line 40) | function getDefaultBlocStateTemplate(
  function getFreezedBlocStateTemplate (line 57) | function getFreezedBlocStateTemplate(blocName: string): string {

FILE: extensions/vscode/src/templates/bloc.template.ts
  function getBlocTemplate (line 4) | function getBlocTemplate(blocName: string, type: BlocType): string {
  function getEquatableBlocTemplate (line 15) | function getEquatableBlocTemplate(blocName: string) {
  function getDefaultBlocTemplate (line 36) | function getDefaultBlocTemplate(blocName: string) {
  function getFreezedBlocTemplate (line 57) | function getFreezedBlocTemplate(blocName: string) {

FILE: extensions/vscode/src/templates/cubit-state.template.ts
  function getCubitStateTemplate (line 4) | function getCubitStateTemplate(
  function getEquatableCubitStateTemplate (line 19) | function getEquatableCubitStateTemplate(
  function getDefaultCubitStateTemplate (line 40) | function getDefaultCubitStateTemplate(
  function getFreezedCubitStateTemplate (line 57) | function getFreezedCubitStateTemplate(cubitName: string): string {

FILE: extensions/vscode/src/templates/cubit.template.ts
  function getCubitTemplate (line 4) | function getCubitTemplate(cubitName: string, type: BlocType): string {
  function getEquatableCubitTemplate (line 15) | function getEquatableCubitTemplate(cubitName: string) {
  function getDefaultCubitTemplate (line 30) | function getDefaultCubitTemplate(cubitName: string) {
  function getFreezedCubitTemplate (line 45) | function getFreezedCubitTemplate(cubitName: string) {

FILE: extensions/vscode/src/utils/analyze-dependencies.ts
  constant DEFAULT_VERSION_VALUE (line 7) | const DEFAULT_VERSION_VALUE = "0.0.0";
  type Dependency (line 9) | interface Dependency {
  type Action (line 15) | interface Action {
  function analyzeDependencies (line 50) | async function analyzeDependencies() {
  function checkForUpgrades (line 61) | function checkForUpgrades(
  function showUpdateMessage (line 82) | function showUpdateMessage(dependency : Dependency, dependencyVersion : ...
  function getDependencies (line 113) | async function getDependencies(

FILE: extensions/vscode/src/utils/downloader.ts
  constant DEFAULT_TIMEOUT_MS (line 11) | const DEFAULT_TIMEOUT_MS = 5000;
  constant DEFAULT_RETRY_COUNT (line 12) | const DEFAULT_RETRY_COUNT = 5;
  constant DEFAULT_RETRY_DELAY_MS (line 13) | const DEFAULT_RETRY_DELAY_MS = 100;
  function downloadFile (line 18) | async function downloadFile(
  function tryGetDownload (line 75) | async function tryGetDownload(
  function downloadsPath (line 86) | function downloadsPath(context: ExtensionContext): string {
  function listDownloads (line 90) | async function listDownloads(context: ExtensionContext): Promise<Uri[]> {
  function getDownload (line 102) | async function getDownload(
  function get (line 124) | async function get(
  function getAsStream (line 140) | async function getAsStream(

FILE: extensions/vscode/src/utils/exec.ts
  type ExecOptions (line 3) | interface ExecOptions {

FILE: extensions/vscode/src/utils/get-bloc-type.ts
  type BlocType (line 11) | const enum BlocType {
  function getBlocType (line 17) | async function getBlocType(type: TemplateType): Promise<BlocType> {
  function getDefaultDependency (line 32) | async function getDefaultDependency(): Promise<BlocType> {

FILE: extensions/vscode/src/utils/get-latest-package-version.ts
  function getLatestPackageVersion (line 4) | async function getLatestPackageVersion(name: string): Promise<string> {

FILE: extensions/vscode/src/utils/get-pubspec-path.ts
  constant PUBSPEC_FILE_NAME (line 4) | const PUBSPEC_FILE_NAME = "pubspec.yaml";
  constant PUBSPEC_LOCK_FILE_NAME (line 5) | const PUBSPEC_LOCK_FILE_NAME = "pubspec.lock";
  function getPubspecPath (line 7) | function getPubspecPath(): string | undefined {
  function getPubspecLockPath (line 11) | function getPubspecLockPath(): string | undefined {
  function getWorkspacePath (line 15) | function getWorkspacePath(fileName: string): string | undefined {

FILE: extensions/vscode/src/utils/get-pubspec.ts
  function getPubspec (line 5) | async function getPubspec(): Promise<Record<string, any> | undefined> {
  function getPubspecLock (line 10) | async function getPubspecLock(): Promise<Record<string, any> | undefined> {
  function getYAMLFileContent (line 15) | async function getYAMLFileContent(path: string | undefined): Promise<Rec...

FILE: extensions/vscode/src/utils/get-template-setting.ts
  type TemplateSetting (line 3) | const enum TemplateSetting {
  type TemplateType (line 10) | const enum TemplateType {
  function getTemplateSetting (line 15) | function getTemplateSetting(type: TemplateType): TemplateSetting {

FILE: extensions/vscode/src/utils/has-dependency.ts
  function hasDependency (line 5) | async function hasDependency(dependency: string) {

FILE: extensions/vscode/src/utils/install-bloc-tools.ts
  constant BLOC_TOOLS_VERSION (line 5) | const BLOC_TOOLS_VERSION = "0.1.0-dev.21";
  function getOS (line 27) | function getOS(): OperatingSystem {
  function getArch (line 40) | function getArch(): Architecture {
  type OperatingSystem (line 51) | enum OperatingSystem {
  type Architecture (line 58) | enum Architecture {

FILE: extensions/vscode/src/utils/retry.ts
  function retry (line 1) | async function retry<T>(

FILE: extensions/vscode/src/utils/set-show-context-menu.ts
  function setShowContextMenu (line 6) | async function setShowContextMenu(

FILE: extensions/vscode/src/utils/update-pubspec-dependency.ts
  function updatePubspecDependency (line 6) | function updatePubspecDependency(dependency: {

FILE: extensions/zed/src/lib.rs
  constant BLOC_TOOLS_REPO (line 4) | const BLOC_TOOLS_REPO: &str = "felangel/bloc";
  constant BLOC_TOOLS_RELEASE_TAG (line 5) | const BLOC_TOOLS_RELEASE_TAG: &str = "bloc_tools-v0.1.0-dev.22";
  type BlocExtension (line 7) | struct BlocExtension {
    method language_server_binary_path (line 12) | fn language_server_binary_path(
    method new (line 113) | fn new() -> Self {
    method language_server_command (line 119) | fn language_server_command(

FILE: packages/angular_bloc/example/example.dart
  class AppComponent (line 6) | @Component(
  class CounterEvent (line 13) | abstract class CounterEvent {}
  class CounterIncrementPressed (line 15) | class CounterIncrementPressed extends CounterEvent {}
  class CounterDecrementPressed (line 17) | class CounterDecrementPressed extends CounterEvent {}
  class CounterBloc (line 20) | class CounterBloc extends Bloc<CounterEvent, int> {
    method onTransition (line 27) | void onTransition(Transition<CounterEvent, int> transition)
  class CounterPageComponent (line 37) | @Component(
    method ngOnInit (line 46) | void ngOnInit()
    method ngOnDestroy (line 51) | void ngOnDestroy()
    method increment (line 55) | void increment()
    method decrement (line 57) | void decrement()

FILE: packages/angular_bloc/lib/src/pipes/bloc_pipe.dart
  class BlocPipe (line 24) | @Pipe('bloc', pure: false)
    method ngOnDestroy (line 35) | void ngOnDestroy()
    method transform (line 43) | dynamic transform(BlocBase<dynamic>? bloc)
    method _subscribe (line 58) | void _subscribe(BlocBase<dynamic> bloc)
    method _updateLatestValue (line 65) | void _updateLatestValue(dynamic async, Object? value)
    method _dispose (line 72) | void _dispose()
    method _maybeStreamIdentical (line 82) | bool _maybeStreamIdentical(dynamic a, dynamic b)

FILE: packages/angular_bloc/test/bloc_pipe_test.dart
  class MockChangeDetectorRef (line 11) | class MockChangeDetectorRef extends Mock implements ChangeDetectorRef {}
  class CounterEvent (line 13) | abstract class CounterEvent {}
  class Increment (line 15) | class Increment extends CounterEvent {}
  class Decrement (line 17) | class Decrement extends CounterEvent {}
  class CounterBloc (line 20) | class CounterBloc extends Bloc<CounterEvent, int> {
  function main (line 27) | void main()

FILE: packages/bloc/example/main.dart
  class SimpleBlocObserver (line 7) | class SimpleBlocObserver extends BlocObserver {
    method onCreate (line 11) | void onCreate(BlocBase<dynamic> bloc)
    method onEvent (line 17) | void onEvent(Bloc<dynamic, dynamic> bloc, Object? event)
    method onChange (line 23) | void onChange(BlocBase<dynamic> bloc, Change<dynamic> change)
    method onTransition (line 29) | void onTransition(
    method onDone (line 38) | void onDone(
    method onError (line 49) | void onError(BlocBase<dynamic> bloc, Object error, StackTrace stackTrace)
    method onClose (line 55) | void onClose(BlocBase<dynamic> bloc)
  function main (line 61) | void main()
  function cubitMain (line 67) | void cubitMain()
  function blocMain (line 86) | Future<void> blocMain()
  class CounterCubit (line 110) | class CounterCubit extends Cubit<int> {
    method increment (line 117) | void increment()
  class CounterEvent (line 121) | abstract class CounterEvent {}
  class CounterIncrementPressed (line 124) | class CounterIncrementPressed extends CounterEvent {}
  class CounterBloc (line 127) | class CounterBloc extends Bloc<CounterEvent, int> {

FILE: packages/bloc/lib/src/bloc.dart
  class BlocEventSink (line 12) | abstract class BlocEventSink<Event extends Object?> implements ErrorSink {
    method add (line 16) | void add(Event event)
  type EventHandler (line 21) | typedef EventHandler<Event, State> = FutureOr<void> Function(
  type EventMapper (line 29) | typedef EventMapper<Event> = Stream<Event> Function(Event event);
  type EventTransformer (line 33) | typedef EventTransformer<Event> = Stream<Event> Function(
  class Bloc (line 42) | abstract class Bloc<Event, State> extends BlocBase<State>
    method add (line 82) | void add(Event event)
    method onEvent (line 124) | void onEvent(Event event)
    method emit (line 151) | void emit(State state)
    method on (line 178) | void on<E extends Event>(
    method onEmit (line 198) | void onEmit(State state)
    method handleEvent (line 217) | Future<void> handleEvent()
    method tearDown (line 218) | void tearDown()
    method onTransition (line 268) | void onTransition(Transition<Event, State> transition)
    method onDone (line 297) | void onDone(Event event, [Object? error, StackTrace? stackTrace])
    method close (line 310) | Future<void> close()
  class _Handler (line 321) | class _Handler {
  class _DefaultBlocObserver (line 327) | class _DefaultBlocObserver extends BlocObserver {
  class _FlatMapStreamTransformer (line 331) | class _FlatMapStreamTransformer<T> extends StreamTransformerBase<Stream<...
    method bind (line 335) | Stream<T> bind(Stream<Stream<T>> stream)

FILE: packages/bloc/lib/src/bloc_base.dart
  class Streamable (line 4) | abstract class Streamable<State extends Object?> {
  class StateStreamable (line 10) | abstract class StateStreamable<State> implements Streamable<State> {
  class StateStreamableSource (line 16) | abstract class StateStreamableSource<State>
  class Closable (line 20) | abstract class Closable {
    method close (line 23) | FutureOr<void> close()
  class Emittable (line 33) | abstract class Emittable<State extends Object?> {
    method emit (line 35) | void emit(State state)
  class ErrorSink (line 41) | abstract class ErrorSink implements Closable {
    method addError (line 45) | void addError(Object error, [StackTrace? stackTrace])
  class EmittableStateStreamableSource (line 49) | abstract class EmittableStateStreamableSource<State>
  class BlocBase (line 56) | abstract class BlocBase<State>
    method emit (line 97) | void emit(State state)
    method onChange (line 135) | void onChange(Change<State> change)
    method addError (line 144) | void addError(Object error, [StackTrace? stackTrace])
    method onError (line 163) | void onError(Object error, StackTrace stackTrace)
    method close (line 173) | Future<void> close()

FILE: packages/bloc/lib/src/bloc_observer.dart
  class BlocObserver (line 7) | abstract class BlocObserver {
    method onCreate (line 17) | void onCreate(BlocBase<dynamic> bloc)
    method onEvent (line 23) | void onEvent(Bloc<dynamic, dynamic> bloc, Object? event)
    method onChange (line 30) | void onChange(BlocBase<dynamic> bloc, Change<dynamic> change)
    method onTransition (line 39) | void onTransition(
    method onError (line 49) | void onError(BlocBase<dynamic> bloc, Object error, StackTrace stackTrace)
    method onDone (line 56) | void onDone(
    method onClose (line 69) | void onClose(BlocBase<dynamic> bloc)
  class MultiBlocObserver (line 88) | class MultiBlocObserver implements BlocObserver {
    method onCreate (line 98) | void onCreate(BlocBase<dynamic> bloc)
    method onEvent (line 105) | void onEvent(Bloc<dynamic, dynamic> bloc, Object? event)
    method onChange (line 112) | void onChange(BlocBase<dynamic> bloc, Change<dynamic> change)
    method onTransition (line 119) | void onTransition(
    method onError (line 129) | void onError(BlocBase<dynamic> bloc, Object error, StackTrace stackTrace)
    method onDone (line 136) | void onDone(
    method onClose (line 148) | void onClose(BlocBase<dynamic> bloc)

FILE: packages/bloc/lib/src/change.dart
  class Change (line 7) | @immutable
    method toString (line 30) | String toString()

FILE: packages/bloc/lib/src/cubit.dart
  class Cubit (line 21) | abstract class Cubit<State> extends BlocBase<State> {

FILE: packages/bloc/lib/src/emitter.dart
  class Emitter (line 11) | abstract class Emitter<State> {
    method onEach (line 28) | Future<void> onEach<T>(
    method forEach (line 50) | Future<void> forEach<T>(
    method call (line 61) | void call(State state)
  class _Emitter (line 64) | class _Emitter<State> implements Emitter<State> {
    method onEach (line 75) | Future<void> onEach<T>(
    method forEach (line 95) | Future<void> forEach<T>(
    method call (line 112) | void call(State state)
    method cancel (line 141) | void cancel()
    method complete (line 147) | void complete()
    method _close (line 182) | void _close()

FILE: packages/bloc/lib/src/transition.dart
  class Transition (line 8) | @immutable
    method toString (line 33) | String toString()

FILE: packages/bloc/test/bloc_event_transformer_test.dart
  class CounterEvent (line 5) | @immutable
  class Increment (line 8) | class Increment extends CounterEvent {
  function wait (line 21) | Future<void> wait()
  function tick (line 22) | Future<void> tick()
  class CounterBloc (line 24) | class CounterBloc extends Bloc<CounterEvent, int> {
  function main (line 43) | void main()
  function incrementTransformer (line 125) | EventTransformer<Increment> incrementTransformer()

FILE: packages/bloc/test/bloc_event_transformer_test_legacy.dart
  class CounterEvent (line 5) | @immutable
  class Increment (line 8) | class Increment extends CounterEvent {
  function wait (line 21) | Future<void> wait()
  function tick (line 22) | Future<void> tick()
  class CounterBloc (line 24) | class CounterBloc extends Bloc<CounterEvent, int> {
  function main (line 43) | void main()
  function incrementTransformer (line 115) | EventTransformer<Increment> incrementTransformer()

FILE: packages/bloc/test/bloc_observer_test.dart
  class _MockBlocObserver (line 8) | class _MockBlocObserver extends Mock implements BlocObserver {}
  class DefaultBlocObserver (line 10) | class DefaultBlocObserver extends BlocObserver {
  function main (line 14) | void main()

FILE: packages/bloc/test/bloc_on_test.dart
  class TestEvent (line 6) | abstract class TestEvent {}
  class TestEventA (line 8) | class TestEventA extends TestEvent {}
  class TestEventAA (line 10) | class TestEventAA extends TestEventA {}
  class TestEventB (line 12) | class TestEventB extends TestEvent {}
  class TestEventBA (line 14) | class TestEventBA extends TestEventB {}
  class TestState (line 16) | class TestState {}
  type OnEvent (line 18) | typedef OnEvent<E, S> = void Function(E event, Emitter<S> emit);
  function defaultOnEvent (line 20) | void defaultOnEvent<E, S>(E event, Emitter<S> emit)
  class TestBloc (line 22) | class TestBloc extends Bloc<TestEvent, TestState> {
  class DuplicateHandlerBloc (line 44) | class DuplicateHandlerBloc extends Bloc<TestEvent, TestState> {
  class MissingHandlerBloc (line 51) | class MissingHandlerBloc extends Bloc<TestEvent, TestState> {
  function main (line 55) | void main()

FILE: packages/bloc/test/bloc_test.dart
  function tick (line 10) | Future<void> tick()
  class MockBlocObserver (line 12) | class MockBlocObserver extends Mock implements BlocObserver {}
  class FakeBlocBase (line 14) | class FakeBlocBase<S> extends Fake implements BlocBase<S> {}
  function main (line 16) | void main()
  function unawaited (line 1656) | void unawaited(Future<void> future)

FILE: packages/bloc/test/blocs/async/async_bloc.dart
  class AsyncBloc (line 9) | class AsyncBloc extends Bloc<AsyncEvent, AsyncState> {

FILE: packages/bloc/test/blocs/async/async_event.dart
  class AsyncEvent (line 3) | @immutable
    method toString (line 19) | String toString()

FILE: packages/bloc/test/blocs/async/async_state.dart
  class AsyncState (line 3) | @immutable
    method copyWith (line 23) | AsyncState copyWith({bool? isLoading, bool? hasError, bool? isSuccess})
    method toString (line 49) | String toString()

FILE: packages/bloc/test/blocs/complex/complex_bloc.dart
  class ComplexBloc (line 12) | class ComplexBloc extends Bloc<ComplexEvent, ComplexState> {

FILE: packages/bloc/test/blocs/complex/complex_event.dart
  class ComplexEvent (line 3) | @immutable
  class ComplexEventA (line 6) | class ComplexEventA extends ComplexEvent {
  class ComplexEventB (line 21) | class ComplexEventB extends ComplexEvent {
  class ComplexEventC (line 36) | class ComplexEventC extends ComplexEvent {
  class ComplexEventD (line 51) | class ComplexEventD extends ComplexEvent {

FILE: packages/bloc/test/blocs/complex/complex_state.dart
  class ComplexState (line 3) | @immutable
  class ComplexStateA (line 6) | class ComplexStateA extends ComplexState {
  class ComplexStateB (line 21) | class ComplexStateB extends ComplexState {
  class ComplexStateC (line 36) | class ComplexStateC extends ComplexState {
  class ComplexStateD (line 51) | class ComplexStateD extends ComplexState {

FILE: packages/bloc/test/blocs/counter/counter_bloc.dart
  type OnEventCallback (line 3) | typedef OnEventCallback = void Function(CounterEvent);
  type OnTransitionCallback (line 4) | typedef OnTransitionCallback = void Function(Transition<CounterEvent, in...
  type OnErrorCallback (line 5) | typedef OnErrorCallback = void Function(Object error, StackTrace? stackT...
  type CounterEvent (line 7) | enum CounterEvent { increment, decrement }
  class CounterBloc (line 9) | class CounterBloc extends Bloc<CounterEvent, int> {
    method onEvent (line 23) | void onEvent(CounterEvent event)
    method onTransition (line 29) | void onTransition(Transition<CounterEvent, int> transition)
    method onError (line 35) | void onError(Object error, StackTrace stackTrace)
    method _onCounterEvent (line 40) | void _onCounterEvent(CounterEvent event, Emitter<int> emit)

FILE: packages/bloc/test/blocs/counter/counter_error_bloc.dart
  class CounterErrorBloc (line 5) | class CounterErrorBloc extends Bloc<CounterEvent, int> {
    method _onCounterEvent (line 10) | void _onCounterEvent(CounterEvent event, Emitter<int> emit)

FILE: packages/bloc/test/blocs/counter/counter_exception_bloc.dart
  class CounterExceptionBloc (line 5) | class CounterExceptionBloc extends Bloc<CounterEvent, int> {
    method _onCounterEvent (line 10) | void _onCounterEvent(CounterEvent event, Emitter<int> emit)

FILE: packages/bloc/test/blocs/counter/merge_bloc.dart
  function customTransformer (line 6) | EventTransformer<CounterEvent> customTransformer()
  class MergeBloc (line 21) | class MergeBloc extends Bloc<CounterEvent, int> {
    method onTransition (line 29) | void onTransition(Transition<CounterEvent, int> transition)
    method _onCounterEvent (line 34) | void _onCounterEvent(CounterEvent event, Emitter<int> emit)

FILE: packages/bloc/test/blocs/counter/on_error_bloc.dart
  class OnErrorBloc (line 5) | class OnErrorBloc extends Bloc<CounterEvent, int> {
    method onError (line 14) | void onError(Object error, StackTrace stackTrace)
    method _onCounterEvent (line 19) | void _onCounterEvent(CounterEvent event, Emitter<int> emit)

FILE: packages/bloc/test/blocs/counter/on_event_error_bloc.dart
  class OnEventErrorBloc (line 5) | class OnEventErrorBloc extends Bloc<CounterEvent, int> {
    method onEvent (line 14) | void onEvent(CounterEvent event)

FILE: packages/bloc/test/blocs/counter/on_exception_bloc.dart
  class OnExceptionBloc (line 5) | class OnExceptionBloc extends Bloc<CounterEvent, int> {
    method onError (line 17) | void onError(Object error, StackTrace stackTrace)
    method _onCounterEvent (line 22) | void _onCounterEvent(CounterEvent event, Emitter<int> emit)

FILE: packages/bloc/test/blocs/counter/on_transition_error_bloc.dart
  class OnTransitionErrorBloc (line 5) | class OnTransitionErrorBloc extends Bloc<CounterEvent, int> {
    method onError (line 17) | void onError(Object error, StackTrace stackTrace)
    method onTransition (line 23) | void onTransition(Transition<CounterEvent, int> transition)
    method _onCounterEvent (line 28) | void _onCounterEvent(CounterEvent event, Emitter<int> emit)

FILE: packages/bloc/test/blocs/seeded/seeded_bloc.dart
  class SeededBloc (line 3) | class SeededBloc extends Bloc<String, int> {

FILE: packages/bloc/test/blocs/simple/simple_bloc.dart
  class SimpleBloc (line 3) | class SimpleBloc extends Bloc<dynamic, String> {

FILE: packages/bloc/test/blocs/stream/restartable_stream_bloc.dart
  class RestartableStreamEvent (line 6) | abstract class RestartableStreamEvent {}
  class ForEach (line 8) | class ForEach extends RestartableStreamEvent {}
  class ForEachOnError (line 10) | class ForEachOnError extends RestartableStreamEvent {}
  class ForEachTryCatch (line 12) | class ForEachTryCatch extends RestartableStreamEvent {}
  class ForEachCatchError (line 14) | class ForEachCatchError extends RestartableStreamEvent {}
  class UnawaitedForEach (line 16) | class UnawaitedForEach extends RestartableStreamEvent {}
  class OnEach (line 18) | class OnEach extends RestartableStreamEvent {}
  class OnEachOnError (line 20) | class OnEachOnError extends RestartableStreamEvent {}
  class OnEachTryCatch (line 22) | class OnEachTryCatch extends RestartableStreamEvent {}
  class OnEachTryCatchAbort (line 24) | class OnEachTryCatchAbort extends RestartableStreamEvent {}
  class OnEachCatchError (line 26) | class OnEachCatchError extends RestartableStreamEvent {}
  class UnawaitedOnEach (line 28) | class UnawaitedOnEach extends RestartableStreamEvent {}
  class RestartableStreamBloc (line 32) | class RestartableStreamBloc extends Bloc<RestartableStreamEvent, int> {

FILE: packages/bloc/test/blocs/stream/stream_bloc.dart
  class StreamEvent (line 5) | abstract class StreamEvent {}
  class Subscribe (line 7) | class Subscribe extends StreamEvent {}
  class OnData (line 9) | class OnData extends StreamEvent {
  class StreamBloc (line 14) | class StreamBloc extends Bloc<StreamEvent, int> {
    method close (line 32) | Future<void> close()

FILE: packages/bloc/test/blocs/unawaited/unawaited_bloc.dart
  class UnawaitedEvent (line 5) | class UnawaitedEvent {}
  class UnawaitedState (line 7) | class UnawaitedState {}
  class UnawaitedBloc (line 9) | class UnawaitedBloc extends Bloc<UnawaitedEvent, UnawaitedState> {

FILE: packages/bloc/test/cubit_test.dart
  class MockBlocObserver (line 9) | class MockBlocObserver extends Mock implements BlocObserver {}
  class FakeBlocBase (line 11) | class FakeBlocBase<S> extends Fake implements BlocBase<S> {}
  class FakeChange (line 13) | class FakeChange<S> extends Fake implements Change<S> {}
  function main (line 15) | void main()

FILE: packages/bloc/test/cubits/counter_cubit.dart
  class CounterCubit (line 3) | class CounterCubit extends Cubit<int> {
    method increment (line 9) | void increment()
    method decrement (line 10) | void decrement()
    method onChange (line 13) | void onChange(Change<int> change)
    method onError (line 19) | void onError(Object error, StackTrace stackTrace)

FILE: packages/bloc/test/cubits/fake_async_cubit.dart
  class FakeAsyncCounterCubit (line 3) | class FakeAsyncCounterCubit extends Cubit<int> {
    method increment (line 6) | Future<void> increment()
    method _increment (line 11) | Future<int> _increment(int value)

FILE: packages/bloc/test/cubits/seeded_cubit.dart
  class SeededCubit (line 3) | class SeededCubit<T> extends Cubit<T> {
    method emitState (line 6) | void emitState(T state)

FILE: packages/bloc/test/transition_test.dart
  class TransitionEvent (line 5) | @immutable
  class TransitionState (line 8) | @immutable
  class SimpleTransitionEvent (line 11) | class SimpleTransitionEvent extends TransitionEvent {}
  class SimpleTransitionState (line 13) | class SimpleTransitionState extends TransitionState {}
  class CounterEvent (line 15) | class CounterEvent extends TransitionEvent {
  class CounterState (line 31) | class CounterState extends TransitionState {
  function main (line 47) | void main()

FILE: packages/bloc_concurrency/example/main.dart
  function tick (line 5) | Future<void> tick()
  function main (line 7) | Future<void> main()
  class CounterEvent (line 33) | abstract class CounterEvent {}
  class CounterIncrementPressed (line 36) | class CounterIncrementPressed extends CounterEvent {}
  class CounterBloc (line 39) | class CounterBloc extends Bloc<CounterEvent, int> {

FILE: packages/bloc_concurrency/lib/src/concurrent.dart
  function concurrent (line 10) | EventTransformer<Event> concurrent<Event>()

FILE: packages/bloc_concurrency/lib/src/droppable.dart
  function droppable (line 9) | EventTransformer<Event> droppable<Event>()
  class _ExhaustMapStreamTransformer (line 15) | class _ExhaustMapStreamTransformer<T> extends StreamTransformerBase<T, T> {
    method bind (line 21) | Stream<T> bind(Stream<T> stream)

FILE: packages/bloc_concurrency/lib/src/restartable.dart
  function restartable (line 12) | EventTransformer<Event> restartable<Event>()

FILE: packages/bloc_concurrency/lib/src/sequential.dart
  function sequential (line 8) | EventTransformer<Event> sequential<Event>()

FILE: packages/bloc_concurrency/test/src/concurrent_test.dart
  function main (line 6) | void main()

FILE: packages/bloc_concurrency/test/src/droppable_test.dart
  function main (line 8) | void main()

FILE: packages/bloc_concurrency/test/src/helpers.dart
  class CounterEvent (line 4) | abstract class CounterEvent {}
  class Increment (line 6) | class Increment extends CounterEvent {
  function wait (line 19) | Future<void> wait()
  function tick (line 20) | Future<void> tick()
  class CounterBloc (line 22) | class CounterBloc extends Bloc<CounterEvent, int> {

FILE: packages/bloc_concurrency/test/src/restartable_test.dart
  function main (line 6) | void main()
  function addEvents (line 11) | Future<void> addEvents()

FILE: packages/bloc_concurrency/test/src/sequential_test.dart
  function main (line 6) | void main()

FILE: packages/bloc_lint/example/main.dart
  function main (line 5) | void main(List<String> args)

FILE: packages/bloc_lint/lib/src/analysis_options.dart
  class AnalysisOptions (line 17) | class AnalysisOptions {
    method recursiveResolver (line 33) | AnalysisOptions recursiveResolver(
    method tryParse (line 68) | AnalysisOptions? tryParse(File file)
    method tryResolve (line 77) | AnalysisOptions? tryResolve(File file)
    method tryInclude (line 86) | AnalysisOptions? tryInclude(String include, {required Directory cwd})
  class AnalysisOptionsYaml (line 122) | @JsonSerializable()
    method toJson (line 132) | Map<String, dynamic> toJson()
  class AnalyzerOptions (line 148) | @JsonSerializable()
    method toJson (line 158) | Map<String, dynamic> toJson()
  class BlocLintOptions (line 167) | @JsonSerializable()
    method toJson (line 177) | Map<String, dynamic> toJson()
  type LinterRuleState (line 184) | @JsonEnum(valueField: 'value')
  class IncludeConverter (line 222) | class IncludeConverter implements JsonConverter<List<String>?, dynamic> {
    method toJson (line 227) | dynamic toJson(List<String>? value)
    method fromJson (line 230) | List<String>? fromJson(dynamic value)
  class RulesConverter (line 240) | class RulesConverter
    method toJson (line 246) | dynamic toJson(Map<String, LinterRuleState>? value)
    method fromJson (line 253) | Map<String, LinterRuleState>? fromJson(dynamic value)
  function toSeverity (line 281) | Severity? toSeverity({Severity? fallback})
  function _merge (line 294) | Map<String, dynamic> _merge(

FILE: packages/bloc_lint/lib/src/analysis_options.g.dart
  function _$AnalysisOptionsYamlFromJson (line 11) | AnalysisOptionsYaml _$AnalysisOptionsYamlFromJson(Map json)
  function _$AnalysisOptionsYamlToJson (line 30) | Map<String, dynamic> _$AnalysisOptionsYamlToJson(
  function _$AnalyzerOptionsFromJson (line 39) | AnalyzerOptions _$AnalyzerOptionsFromJson(Map json)
  function _$AnalyzerOptionsToJson (line 52) | Map<String, dynamic> _$AnalyzerOptionsToJson(AnalyzerOptions instance)
  function _$BlocLintOptionsFromJson (line 55) | BlocLintOptions _$BlocLintOptionsFromJson(Map json)
  function _$BlocLintOptionsToJson (line 66) | Map<String, dynamic> _$BlocLintOptionsToJson(BlocLintOptions instance)

FILE: packages/bloc_lint/lib/src/diagnostic.dart
  type Severity (line 4) | enum Severity {
  class Diagnostic (line 21) | class Diagnostic {
    method toJson (line 55) | Map<String, dynamic> toJson()

FILE: packages/bloc_lint/lib/src/env.dart
  function packageConfigPath (line 9) | String packageConfigPath(Directory cwd)
  function pubspecYamlPath (line 14) | String pubspecYamlPath(Directory cwd)
  function pubspecLockPath (line 19) | String pubspecLockPath(Directory cwd)
  function analysisOptionsPath (line 24) | String analysisOptionsPath(Directory cwd)
  function findPackageConfigFile (line 31) | File? findPackageConfigFile(Directory cwd)
  function findAnalysisOptionsFile (line 42) | File? findAnalysisOptionsFile(Directory cwd)
  function findAnalysisOptions (line 53) | AnalysisOptions? findAnalysisOptions(Directory cwd)
  function findPubspecLock (line 63) | PubspecLock? findPubspecLock(Directory cwd)
  function findPackageRoot (line 76) | Directory? findPackageRoot(Directory cwd)
  function findProjectRoot (line 86) | Directory? findProjectRoot(Directory cwd)
  function findNearestAncestor (line 96) | File? findNearestAncestor({

FILE: packages/bloc_lint/lib/src/lint_rule.dart
  type LintRuleBuilder (line 4) | typedef LintRuleBuilder = LintRule Function([Severity? severity]);
  class LintRule (line 9) | abstract class LintRule {
    method create (line 21) | Listener? create(LintContext context)

FILE: packages/bloc_lint/lib/src/linter.dart
  class Linter (line 39) | class Linter {
    method analyze (line 46) | Map<String, List<Diagnostic>> analyze({required Uri uri, String? conte...
    method _analyzeDirectory (line 58) | Map<String, List<Diagnostic>> _analyzeDirectory(Directory directory)
    method _analyzeFile (line 70) | Map<String, List<Diagnostic>> _analyzeFile(File file)
    method _analyzeContent (line 74) | Map<String, List<Diagnostic>> _analyzeContent(Uri uri, String content)
  function toLongPath (line 151) | String toLongPath()
  class LintContext (line 171) | class LintContext {
    method report (line 187) | void report({
    method reportTokenRange (line 208) | void reportTokenRange({
    method reportToken (line 225) | void reportToken({

FILE: packages/bloc_lint/lib/src/rules/avoid_build_context_extensions.dart
  class AvoidBuildContextExtensions (line 7) | class AvoidBuildContextExtensions extends LintRule {
    method create (line 16) | Listener create(LintContext context)
  type _ContextMethod (line 20) | enum _ContextMethod { read, watch, select }
  class _Listener (line 22) | class _Listener extends Listener {
    method beginInitializedIdentifier (line 33) | void beginInitializedIdentifier(Token nameToken)
    method endInitializedIdentifier (line 44) | void endInitializedIdentifier(Token nameToken)
    method handleIdentifier (line 50) | void handleIdentifier(Token token, IdentifierContext _)
    method _report (line 81) | void _report(_ContextMethod method, Token beginToken, Token endToken)

FILE: packages/bloc_lint/lib/src/rules/avoid_flutter_imports.dart
  class AvoidFlutterImports (line 6) | class AvoidFlutterImports extends LintRule {
    method create (line 15) | Listener? create(LintContext context)
  class _Listener (line 21) | class _Listener extends Listener {
    method beginImport (line 29) | void beginImport(Token importKeyword)

FILE: packages/bloc_lint/lib/src/rules/avoid_public_bloc_methods.dart
  class AvoidPublicBlocMethods (line 6) | class AvoidPublicBlocMethods extends LintRule {
    method create (line 15) | Listener? create(LintContext context)
  class _Listener (line 18) | class _Listener extends Listener {
    method beginMetadata (line 41) | void beginMetadata(Token token)
    method beginMethod (line 46) | void beginMethod(

FILE: packages/bloc_lint/lib/src/rules/avoid_public_fields.dart
  class AvoidPublicFields (line 6) | class AvoidPublicFields extends LintRule {
    method create (line 15) | Listener? create(LintContext context)
  class _Listener (line 18) | class _Listener extends Listener {
    method beginClassDeclaration (line 26) | void beginClassDeclaration(
    method endFields (line 55) | void endFields(
  function _getTokens (line 83) | List<Token> _getTokens(Token begin, Token end)
  function _getFieldName (line 93) | Token _getFieldName(Token begin, Token end)

FILE: packages/bloc_lint/lib/src/rules/prefer_bloc.dart
  class PreferBloc (line 6) | class PreferBloc extends LintRule {
    method create (line 15) | Listener create(LintContext context)
  class _Listener (line 18) | class _Listener extends Listener {
    method beginClassDeclaration (line 24) | void beginClassDeclaration(

FILE: packages/bloc_lint/lib/src/rules/prefer_build_context_extensions.dart
  class PreferBuildContextExtensions (line 6) | class PreferBuildContextExtensions extends LintRule {
    method create (line 15) | Listener create(LintContext context)
  class _Listener (line 18) | class _Listener extends Listener {
    method handleIdentifier (line 26) | void handleIdentifier(Token token, IdentifierContext _)
    method tryParseProvider (line 64) | Token? tryParseProvider(Token token)
    method tryParseBlocBuilder (line 81) | Token? tryParseBlocBuilder(Token token)
    method tryParseBlocSelector (line 86) | Token? tryParseBlocSelector(Token token)

FILE: packages/bloc_lint/lib/src/rules/prefer_cubit.dart
  class PreferCubit (line 6) | class PreferCubit extends LintRule {
    method create (line 15) | Listener create(LintContext context)
  class _Listener (line 18) | class _Listener extends Listener {
    method beginClassDeclaration (line 24) | void beginClassDeclaration(

FILE: packages/bloc_lint/lib/src/rules/prefer_file_naming_conventions.dart
  class PreferFileNamingConventions (line 8) | class PreferFileNamingConventions extends LintRule {
    method create (line 17) | Listener create(LintContext context)
  class _Listener (line 20) | class _Listener extends Listener {
    method beginClassDeclaration (line 26) | void beginClassDeclaration(

FILE: packages/bloc_lint/lib/src/rules/prefer_void_public_cubit_methods.dart
  class PreferVoidPublicCubitMethods (line 6) | class PreferVoidPublicCubitMethods extends LintRule {
    method create (line 15) | Listener? create(LintContext context)
  class _Listener (line 18) | class _Listener extends Listener {
    method beginMetadata (line 28) | void beginMetadata(Token token)
    method beginMethod (line 33) | void beginMethod(
  function _getReturnType (line 65) | String _getReturnType(Token name)
  function isDone (line 75) | bool isDone()

FILE: packages/bloc_lint/lib/src/string_case.dart
  function toSnakeCase (line 7) | String toSnakeCase()

FILE: packages/bloc_lint/lib/src/text_document.dart
  class TextDocument (line 15) | class TextDocument {
    method ignoreForLine (line 41) | Set<String> ignoreForLine({required Range range})
    method _ignoresAboveLine (line 48) | Set<String> _ignoresAboveLine({required Range range})
    method _ignoresAfterLine (line 60) | Set<String> _ignoresAfterLine({required Range range})
    method _lineIgnores (line 73) | Set<String> _lineIgnores(String line)
    method getText (line 100) | String getText({Range? range})
    method offsetAt (line 110) | int offsetAt(Position position)
    method positionAt (line 133) | Position positionAt(int offset)
    method _getLineOffsets (line 160) | List<int> _getLineOffsets()
    method _computeLineOffsets (line 165) | List<int> _computeLineOffsets(
    method _isEndOfLine (line 189) | bool _isEndOfLine(int char)
    method _ensureBeforeEndOfLine (line 191) | int _ensureBeforeEndOfLine({required int offset, required int lineOffs...
  class Position (line 203) | class Position {
    method toJson (line 214) | Map<String, dynamic> toJson()
  class Range (line 220) | class Range {
    method toJson (line 231) | Map<String, dynamic> toJson()
  type TextDocumentType (line 237) | enum TextDocumentType {

FILE: packages/bloc_lint/test/src/analysis_options_test.dart
  function main (line 9) | void main()

FILE: packages/bloc_lint/test/src/diagnostic_test.dart
  function main (line 6) | void main()

FILE: packages/bloc_lint/test/src/lint_test_helper.dart
  function lintTest (line 12) | void lintTest(

FILE: packages/bloc_lint/test/src/linter_test.dart
  class _MockLintRule (line 10) | class _MockLintRule extends Mock implements LintRule {}
  class _MockListener (line 12) | class _MockListener extends Mock implements Listener {}
  class _FakeLintContext (line 14) | class _FakeLintContext extends Fake implements LintContext {}
  function main (line 16) | void main()

FILE: packages/bloc_lint/test/src/rules/avoid_build_context_extensions_test.dart
  function main (line 6) | void main()

FILE: packages/bloc_lint/test/src/rules/avoid_flutter_imports_test.dart
  function main (line 6) | void main()

FILE: packages/bloc_lint/test/src/rules/avoid_public_bloc_methods_test.dart
  function main (line 6) | void main()

FILE: packages/bloc_lint/test/src/rules/avoid_public_fields_test.dart
  function main (line 6) | void main()

FILE: packages/bloc_lint/test/src/rules/prefer_bloc_test.dart
  function main (line 6) | void main()

FILE: packages/bloc_lint/test/src/rules/prefer_build_context_extensions_test.dart
  function main (line 6) | void main()

FILE: packages/bloc_lint/test/src/rules/prefer_cubit_test.dart
  function main (line 6) | void main()

FILE: packages/bloc_lint/test/src/rules/prefer_file_naming_conventions_test.dart
  function main (line 6) | void main()

FILE: packages/bloc_lint/test/src/rules/prefer_void_public_cubit_methods_test.dart
  function main (line 6) | void main()

FILE: packages/bloc_lint/test/src/text_document_test.dart
  function at (line 4) | Position at({required int line, required int char})
  function position (line 8) | Position position(int line, int char)
  function range (line 10) | Range range(int startLine, int startChar, int endLine, int endChar)
  function createDocument (line 17) | TextDocument createDocument(String content)
  function main (line 21) | void main()

FILE: packages/bloc_test/example/main.dart
  class MockCounterCubit (line 8) | class MockCounterCubit extends MockCubit<int> implements CounterCubit {}
  class MockCounterBloc (line 11) | class MockCounterBloc extends MockBloc<CounterEvent, int>
  function main (line 14) | void main()
  function mainCubit (line 19) | void mainCubit()
  function mainBloc (line 50) | void mainBloc()
  class CounterCubit (line 82) | class CounterCubit extends Cubit<int> {
    method increment (line 85) | void increment()
  class CounterEvent (line 88) | abstract class CounterEvent {}
  class CounterIncrementPressed (line 90) | class CounterIncrementPressed extends CounterEvent {}
  class CounterBloc (line 93) | class CounterBloc extends Bloc<CounterEvent, int> {

FILE: packages/bloc_test/lib/src/bloc_test.dart
  function blocTest (line 139) | void blocTest<B extends EmittableStateStreamableSource<State>, State>(
  function testBloc (line 176) | Future<void> testBloc<B extends EmittableStateStreamableSource<State>, S...
  function _runZonedGuarded (line 246) | Future<void> _runZonedGuarded(Future<void> Function() body)
  class _TestBlocObserver (line 257) | class _TestBlocObserver extends BlocObserver {
    method onCreate (line 264) | void onCreate(BlocBase<dynamic> bloc)
    method onEvent (line 270) | void onEvent(Bloc<dynamic, dynamic> bloc, Object? event)
    method onChange (line 276) | void onChange(BlocBase<dynamic> bloc, Change<dynamic> change)
    method onTransition (line 282) | void onTransition(
    method onError (line 291) | void onError(BlocBase<dynamic> bloc, Object error, StackTrace stackTrace)
    method onDone (line 298) | void onDone(
    method onClose (line 309) | void onClose(BlocBase<dynamic> bloc)
  function _diff (line 315) | String _diff({required dynamic expected, required dynamic actual})
  function toPrettyString (line 328) | String toPrettyString()
  function identical (line 329) | String identical(String str)
  function deletion (line 330) | String deletion(String str)
  function insertion (line 331) | String insertion(String str)

FILE: packages/bloc_test/lib/src/mock_bloc.dart
  class MockBloc (line 26) | class MockBloc<E, S> extends _MockBlocBase<S> implements Bloc<E, S> {}
  class MockCubit (line 50) | class MockCubit<S> extends _MockBlocBase<S> implements Cubit<S> {}
  class _MockBlocBase (line 52) | class _MockBlocBase<S> extends Mock implements BlocBase<S> {

FILE: packages/bloc_test/lib/src/when_listen.dart
  function whenListen (line 44) | void whenListen<State>(

FILE: packages/bloc_test/test/bloc_bloc_test_test.dart
  class MockRepository (line 9) | class MockRepository extends Mock implements Repository {}
  function unawaited (line 11) | void unawaited(Future<void>? _)
  function main (line 13) | void main()

FILE: packages/bloc_test/test/bloc_observer_test.dart
  class _MockBlocObserver (line 9) | class _MockBlocObserver extends Mock implements BlocObserver {}
  function main (line 11) | void main()

FILE: packages/bloc_test/test/blocs/async_counter_bloc.dart
  class AsyncCounterBloc (line 7) | class AsyncCounterBloc extends Bloc<CounterEvent, int> {

FILE: packages/bloc_test/test/blocs/complex_bloc.dart
  class ComplexEvent (line 3) | abstract class ComplexEvent {}
  class ComplexEventA (line 5) | class ComplexEventA extends ComplexEvent {}
  class ComplexEventB (line 7) | class ComplexEventB extends ComplexEvent {}
  class ComplexState (line 9) | abstract class ComplexState {}
  class ComplexStateA (line 11) | class ComplexStateA extends ComplexState {}
  class ComplexStateB (line 13) | class ComplexStateB extends ComplexState {}
  class ComplexBloc (line 15) | class ComplexBloc extends Bloc<ComplexEvent, ComplexState> {

FILE: packages/bloc_test/test/blocs/counter_bloc.dart
  type CounterEvent (line 3) | enum CounterEvent { increment }
  class CounterBloc (line 5) | class CounterBloc extends Bloc<CounterEvent, int> {

FILE: packages/bloc_test/test/blocs/debounce_counter_bloc.dart
  function debounce (line 6) | EventTransformer<E> debounce<E>()
  class DebounceCounterBloc (line 14) | class DebounceCounterBloc extends Bloc<CounterEvent, int> {

FILE: packages/bloc_test/test/blocs/error_counter_bloc.dart
  class ErrorCounterBlocError (line 5) | class ErrorCounterBlocError extends Error {}
  class ErrorCounterBloc (line 7) | class ErrorCounterBloc extends Bloc<CounterEvent, int> {

FILE: packages/bloc_test/test/blocs/exception_counter_bloc.dart
  class ExceptionCounterBlocException (line 5) | class ExceptionCounterBlocException implements Exception {}
  class ExceptionCounterBloc (line 7) | class ExceptionCounterBloc extends Bloc<CounterEvent, int> {

FILE: packages/bloc_test/test/blocs/instant_emit_bloc.dart
  class InstantEmitBloc (line 5) | class InstantEmitBloc extends Bloc<CounterEvent, int> {

FILE: packages/bloc_test/test/blocs/multi_counter_bloc.dart
  class MultiCounterBloc (line 5) | class MultiCounterBloc extends Bloc<CounterEvent, int> {

FILE: packages/bloc_test/test/blocs/side_effect_counter_bloc.dart
  class Repository (line 5) | class Repository {
    method sideEffect (line 6) | void sideEffect()
  class SideEffectCounterBloc (line 9) | class SideEffectCounterBloc extends Bloc<CounterEvent, int> {

FILE: packages/bloc_test/test/blocs/sum_bloc.dart
  class SumEvent (line 7) | class SumEvent {
  class SumBloc (line 13) | class SumBloc extends Bloc<SumEvent, int> {
    method close (line 25) | Future<void> close()

FILE: packages/bloc_test/test/cubit_bloc_test_test.dart
  class MockRepository (line 7) | class MockRepository extends Mock implements Repository {}
  function main (line 9) | void main()

FILE: packages/bloc_test/test/cubits/async_counter_cubit.dart
  class AsyncCounterCubit (line 5) | class AsyncCounterCubit extends Cubit<int> {
    method increment (line 8) | Future<void> increment()

FILE: packages/bloc_test/test/cubits/complex_cubit.dart
  class ComplexState (line 3) | abstract class ComplexState {}
  class ComplexStateA (line 5) | class ComplexStateA extends ComplexState {}
  class ComplexStateB (line 7) | class ComplexStateB extends ComplexState {}
  class ComplexCubit (line 9) | class ComplexCubit extends Cubit<ComplexState> {
    method emitA (line 12) | void emitA()
    method emitB (line 13) | void emitB()

FILE: packages/bloc_test/test/cubits/counter_cubit.dart
  class CounterCubit (line 3) | class CounterCubit extends Cubit<int> {
    method increment (line 6) | void increment()

FILE: packages/bloc_test/test/cubits/delayed_counter_cubit.dart
  class DelayedCounterCubit (line 3) | class DelayedCounterCubit extends Cubit<int> {
    method increment (line 6) | void increment()

FILE: packages/bloc_test/test/cubits/error_cubit.dart
  class ErrorCubit (line 3) | class ErrorCubit extends Cubit<int> {
    method throwError (line 6) | void throwError(Error e)

FILE: packages/bloc_test/test/cubits/exception_cubit.dart
  class ExceptionCubit (line 3) | class ExceptionCubit extends Cubit<int> {
    method throwException (line 6) | void throwException(Exception e)

FILE: packages/bloc_test/test/cubits/instant_emit_cubit.dart
  class InstantEmitCubit (line 3) | class InstantEmitCubit extends Cubit<int> {
    method increment (line 8) | void increment()

FILE: packages/bloc_test/test/cubits/multi_counter_cubit.dart
  class MultiCounterCubit (line 3) | class MultiCounterCubit extends Cubit<int> {
    method increment (line 6) | void increment()

FILE: packages/bloc_test/test/cubits/side_effect_counter_cubit.dart
  class Repository (line 3) | class Repository {
    method sideEffect (line 4) | void sideEffect()
  class SideEffectCounterCubit (line 7) | class SideEffectCounterCubit extends Cubit<int> {
    method increment (line 12) | void increment()

FILE: packages/bloc_test/test/cubits/sum_cubit.dart
  class SumCubit (line 7) | class SumCubit extends Cubit<int> {
    method close (line 17) | Future<void> close()

FILE: packages/bloc_test/test/mock_bloc_test.dart
  class MockCounterBloc (line 12) | class MockCounterBloc extends MockBloc<CounterEvent, int>
  class MockCounterCubit (line 15) | class MockCounterCubit extends MockCubit<int> implements CounterCubit {}
  function main (line 17) | void main()

FILE: packages/bloc_test/test/when_listen_test.dart
  class MockCounterCubit (line 8) | class MockCounterCubit extends MockCubit<int> implements CounterCubit {}
  function unawaited (line 10) | void unawaited(Future<void>? _)
  function main (line 12) | void main()

FILE: packages/bloc_tools/bin/bloc.dart
  function main (line 5) | Future<void> main(List<String> args)
  function _flushThenExit (line 15) | Future<void> _flushThenExit(int status)

FILE: packages/bloc_tools/e2e/main.dart
  function main (line 5) | Future<void> main()
  function flutterCreate (line 41) | String flutterCreate()
  function exec (line 52) | String exec(
  function installBloc (line 75) | void installBloc(String projectRoot)
  function installBlocLint (line 79) | void installBlocLint(String projectRoot)
  function createAnalysisOptions (line 88) | void createAnalysisOptions(String projectRoot)
  function createCubit (line 94) | void createCubit(String projectRoot)
  function lint (line 105) | String lint(String projectRoot)

FILE: packages/bloc_tools/lib/src/command_runner.dart
  class BlocToolsCommandRunner (line 16) | class BlocToolsCommandRunner extends CommandRunner<int> {
    method run (line 42) | Future<int> run(Iterable<String> args)
    method runCommand (line 63) | Future<int?> runCommand(ArgResults topLevelResults)
    method _checkForUpdates (line 77) | Future<void> _checkForUpdates()

FILE: packages/bloc_tools/lib/src/commands/language_server/language_server_command.dart
  class LanguageServerCommand (line 10) | class LanguageServerCommand extends Command<int> {
    method run (line 30) | Future<int> run()

FILE: packages/bloc_tools/lib/src/commands/lint/lint_command.dart
  class LintCommand (line 11) | class LintCommand extends Command<int> {
    method run (line 30) | int run()
  function toUri (line 73) | Uri? toUri()
  function toStyle (line 83) | String? Function(String? value, {bool forScript}) toStyle()
  function prettify (line 98) | String prettify(String path, TextDocument document)

FILE: packages/bloc_tools/lib/src/commands/new/new_command.dart
  type MasonGeneratorFromBundle (line 9) | typedef MasonGeneratorFromBundle = Future<MasonGenerator> Function(Mason...
  type MasonGeneratorFromBrick (line 12) | typedef MasonGeneratorFromBrick = Future<MasonGenerator> Function(Brick);
  class NewCommand (line 17) | class NewCommand extends Command<int> {
  class GeneratorCommand (line 38) | class GeneratorCommand extends Command<int> {
    method run (line 82) | Future<int> run()
    method _buildGenerator (line 95) | Future<MasonGenerator> _buildGenerator()
  function addOptionsForBundle (line 116) | void addOptionsForBundle(MasonBundle bundle)

FILE: packages/bloc_tools/lib/src/lsp/language_server.dart
  class LanguageServer (line 12) | class LanguageServer {
    method _reportDiagnostics (line 23) | void _reportDiagnostics({required Uri uri, String? content})
    method listen (line 38) | Future<void> listen()
  function toLsp (line 78) | lsp.Diagnostic toLsp()

FILE: packages/bloc_tools/lib/src/lsp/text_document.dart
  class TextDocument (line 15) | class TextDocument {
    method getText (line 41) | String getText({Range? range})
    method offsetAt (line 51) | int offsetAt(Position position)
    method positionAt (line 74) | Position positionAt(int offset)
    method update (line 102) | void update(List<TextDocumentContentChangeEvent> changes, int version)
    method _getLineOffsets (line 162) | List<int> _getLineOffsets()
    method _computeLineOffsets (line 167) | List<int> _computeLineOffsets(
    method _isEndOfLine (line 191) | bool _isEndOfLine(int char)
    method _ensureBeforeEndOfLine (line 195) | int _ensureBeforeEndOfLine({required int offset, required int lineOffs...
    method getWellformedRange (line 204) | Range getWellformedRange(Range range)

FILE: packages/bloc_tools/lib/src/lsp/text_documents.dart
  class TextDocumentChangeEvent (line 6) | class TextDocumentChangeEvent {
  class TextDocuments (line 13) | class TextDocuments {
    method get (line 60) | TextDocument? get(Uri uri)

FILE: packages/bloc_tools/test/ensure_build_test.dart
  function main (line 7) | void main()

FILE: packages/bloc_tools/test/src/command_runner_test.dart
  class _MockLogger (line 15) | class _MockLogger extends Mock implements Logger {}
  class _MockProgress (line 17) | class _MockProgress extends Mock implements Progress {}
  class _MockPubUpdater (line 19) | class _MockPubUpdater extends Mock implements PubUpdater {}
  class _MockLanguageServer (line 21) | class _MockLanguageServer extends Mock implements LanguageServer {}
  function main (line 52) | void main()
  function overridePrint (line 60) | void Function() overridePrint(void Function() fn)

FILE: packages/bloc_tools/test/src/commands/language_server/language_server_command_test.dart
  class _MockLanguageServer (line 8) | class _MockLanguageServer extends Mock implements LanguageServer {}
  function main (line 10) | void main()
  class _TestCommandRunner (line 47) | class _TestCommandRunner extends CommandRunner<int> {

FILE: packages/bloc_tools/test/src/commands/lint/lint_command_test.dart
  class _MockLinter (line 11) | class _MockLinter extends Mock implements Linter {}
  class _MockLogger (line 13) | class _MockLogger extends Mock implements Logger {}
  function main (line 15) | void main()
  class _TestCommandRunner (line 159) | class _TestCommandRunner extends CommandRunner<int> {

FILE: packages/bloc_tools/test/src/commands/new/new_test.dart
  class _MockLogger (line 8) | class _MockLogger extends Mock implements Logger {}
  class _MockProgress (line 10) | class _MockProgress extends Mock implements Progress {}
  class _MockMasonBundle (line 12) | class _MockMasonBundle extends Mock implements MasonBundle {}
  class _MockMasonGenerator (line 14) | class _MockMasonGenerator extends Mock implements MasonGenerator {}
  class _MockGeneratorHooks (line 16) | class _MockGeneratorHooks extends Mock implements GeneratorHooks {}
  class _FakeGeneratorTarget (line 18) | class _FakeGeneratorTarget extends Fake implements GeneratorTarget {}
  function main (line 20) | void main()
  class _TestCommandRunner (line 182) | class _TestCommandRunner extends CommandRunner<int> {

FILE: packages/bloc_tools/test/src/lsp/language_server_test.dart
  class _MockLinter (line 14) | class _MockLinter extends Mock implements Linter {}
  class _MockConnection (line 16) | class _MockConnection extends Mock implements Connection {}
  class _FakePublishDiagnosticsParams (line 18) | class _FakePublishDiagnosticsParams extends Fake
  type _OnInitializeHandler (line 21) | typedef _OnInitializeHandler =
  type _OnInitializedHandler (line 24) | typedef _OnInitializedHandler = Future<dynamic> Function(InitializedPara...
  type _OnDidOpenTextDocumentHandler (line 26) | typedef _OnDidOpenTextDocumentHandler =
  type _OnDidChangeTextDocumentHandler (line 29) | typedef _OnDidChangeTextDocumentHandler =
  type _OnDidSaveTextDocumentHandler (line 32) | typedef _OnDidSaveTextDocumentHandler =
  function main (line 35) | void main()

FILE: packages/bloc_tools/test/src/lsp/text_document_test.dart
  function at (line 7) | lsp.Position at({required int line, required int char})
  function position (line 11) | lsp.Position position(int line, int char)
  function range (line 15) | lsp.Range range(int startLine, int startChar, int endLine, int endChar)
  function createDocument (line 22) | TextDocument createDocument(String content)
  function updateFull (line 26) | lsp.Either2<
  function updateIncremental (line 34) | lsp.Either2<
  function forSubstring (line 44) | lsp.Range forSubstring(TextDocument document, String substring)
  function afterSubstring (line 52) | lsp.Range afterSubstring(TextDocument document, String substring)
  function main (line 58) | void main()
  function expectLineAtOffsets (line 206) | void expectLineAtOffsets(TextDocument document)

FILE: packages/flutter_bloc/example/lib/main.dart
  function main (line 6) | void main()
  class AppBlocObserver (line 14) | class AppBlocObserver extends BlocObserver {
    method onChange (line 19) | void onChange(BlocBase<dynamic> bloc, Change<dynamic> change)
    method onTransition (line 25) | void onTransition(
  class App (line 40) | class App extends StatelessWidget {
    method build (line 45) | Widget build(BuildContext context)
  class AppView (line 59) | class AppView extends StatelessWidget {
    method build (line 64) | Widget build(BuildContext context)
  class CounterPage (line 80) | class CounterPage extends StatelessWidget {
    method build (line 85) | Widget build(BuildContext context)
  class CounterView (line 97) | class CounterView extends StatelessWidget {
    method build (line 102) | Widget build(BuildContext context)
  class CounterEvent (line 146) | abstract class CounterEvent {}
  class CounterIncrementPressed (line 149) | class CounterIncrementPressed extends CounterEvent {}
  class CounterDecrementPressed (line 152) | class CounterDecrementPressed extends CounterEvent {}
  class CounterBloc (line 157) | class CounterBloc extends Bloc<CounterEvent, int> {
  class ThemeCubit (line 168) | class ThemeCubit extends Cubit<ThemeData> {
    method toggleTheme (line 177) | void toggleTheme()

FILE: packages/flutter_bloc/lib/src/bloc_builder.dart
  type BlocWidgetBuilder (line 8) | typedef BlocWidgetBuilder<S> = Widget Function(BuildContext context, S s...
  type BlocBuilderCondition (line 13) | typedef BlocBuilderCondition<S> = bool Function(S previous, S current);
  class BlocBuilder (line 73) | class BlocBuilder<B extends StateStreamable<S>, S>
    method build (line 91) | Widget build(BuildContext context, S state)
    method debugFillProperties (line 94) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
  class BlocBuilderBase (line 110) | abstract class BlocBuilderBase<B extends StateStreamable<S>, S>
    method build (line 125) | Widget build(BuildContext context, S state)
    method createState (line 128) | State<BlocBuilderBase<B, S>> createState()
    method debugFillProperties (line 131) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
  class _BlocBuilderBaseState (line 144) | class _BlocBuilderBaseState<B extends StateStreamable<S>, S>
    method initState (line 150) | void initState()
    method didUpdateWidget (line 157) | void didUpdateWidget(BlocBuilderBase<B, S> oldWidget)
    method didChangeDependencies (line 168) | void didChangeDependencies()
    method build (line 178) | Widget build(BuildContext context)

FILE: packages/flutter_bloc/lib/src/bloc_consumer.dart
  class BlocConsumer (line 62) | class BlocConsumer<B extends StateStreamable<S>, S> extends StatefulWidg...
    method createState (line 99) | State<BlocConsumer<B, S>> createState()
    method debugFillProperties (line 102) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
  class _BlocConsumerState (line 123) | class _BlocConsumerState<B extends StateStreamable<S>, S>
    method initState (line 128) | void initState()
    method didUpdateWidget (line 134) | void didUpdateWidget(BlocConsumer<B, S> oldWidget)
    method didChangeDependencies (line 142) | void didChangeDependencies()
    method build (line 149) | Widget build(BuildContext context)

FILE: packages/flutter_bloc/lib/src/bloc_listener.dart
  type BlocWidgetListener (line 11) | typedef BlocWidgetListener<S> = void Function(BuildContext context, S st...
  type BlocListenerCondition (line 17) | typedef BlocListenerCondition<S> = bool Function(S previous, S current);
  class BlocListener (line 77) | class BlocListener<B extends StateStreamable<S>, S>
  class BlocListenerBase (line 103) | abstract class BlocListenerBase<B extends StateStreamable<S>, S>
    method createState (line 131) | SingleChildState<BlocListenerBase<B, S>> createState()
    method debugFillProperties (line 135) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
  class _BlocListenerBaseState (line 149) | class _BlocListenerBaseState<B extends StateStreamable<S>, S>
    method initState (line 156) | void initState()
    method didUpdateWidget (line 164) | void didUpdateWidget(BlocListenerBase<B, S> oldWidget)
    method didChangeDependencies (line 179) | void didChangeDependencies()
    method buildWithChild (line 193) | Widget buildWithChild(BuildContext context, Widget? child)
    method dispose (line 203) | void dispose()
    method _subscribe (line 208) | void _subscribe()
    method _unsubscribe (line 218) | void _unsubscribe()

FILE: packages/flutter_bloc/lib/src/bloc_provider.dart
  class BlocProvider (line 34) | class BlocProvider<T extends StateStreamableSource<Object?>>
    method of (line 92) | T of<T extends StateStreamableSource<Object?>>(
    method buildWithChild (line 114) | Widget buildWithChild(BuildContext context, Widget? child)
    method _startListening (line 136) | VoidCallback _startListening(
    method debugFillProperties (line 147) | void debugFillProperties(DiagnosticPropertiesBuilder properties)

FILE: packages/flutter_bloc/lib/src/bloc_selector.dart
  type BlocWidgetSelector (line 7) | typedef BlocWidgetSelector<S, T> = T Function(S state);
  class BlocSelector (line 28) | class BlocSelector<B extends StateStreamable<S>, S, T> extends StatefulW...
    method createState (line 55) | State<BlocSelector<B, S, T>> createState()
    method debugFillProperties (line 58) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
  class _BlocSelectorState (line 72) | class _BlocSelectorState<B extends StateStreamable<S>, S, T>
    method initState (line 78) | void initState()
    method didUpdateWidget (line 85) | void didUpdateWidget(BlocSelector<B, S, T> oldWidget)
    method didChangeDependencies (line 98) | void didChangeDependencies()
    method build (line 108) | Widget build(BuildContext context)

FILE: packages/flutter_bloc/lib/src/multi_bloc_listener.dart
  class MultiBlocListener (line 51) | class MultiBlocListener extends MultiProvider {

FILE: packages/flutter_bloc/lib/src/multi_bloc_provider.dart
  class MultiBlocProvider (line 51) | class MultiBlocProvider extends MultiProvider {

FILE: packages/flutter_bloc/lib/src/multi_repository_provider.dart
  class MultiRepositoryProvider (line 45) | class MultiRepositoryProvider extends MultiProvider {

FILE: packages/flutter_bloc/lib/src/repository_provider.dart
  class RepositoryProvider (line 39) | class RepositoryProvider<T> extends Provider<T> {
    method of (line 71) | T of<T>(BuildContext context, {bool listen = false})

FILE: packages/flutter_bloc/test/bloc_builder_test.dart
  class MyThemeApp (line 7) | class MyThemeApp extends StatefulWidget {
    method createState (line 20) | State<MyThemeApp> createState()
  class MyThemeAppState (line 23) | class MyThemeAppState extends State<MyThemeApp> {
    method initState (line 27) | void initState()
    method build (line 37) | Widget build(BuildContext context)
  class ThemeCubit (line 70) | class ThemeCubit extends Cubit<ThemeData> {
    method setDarkTheme (line 73) | void setDarkTheme()
    method setLightTheme (line 74) | void setLightTheme()
  class DarkThemeCubit (line 77) | class DarkThemeCubit extends Cubit<ThemeData> {
    method setLightTheme (line 80) | void setLightTheme()
  class MyCounterApp (line 83) | class MyCounterApp extends StatefulWidget {
    method createState (line 87) | State<StatefulWidget> createState()
  class MyCounterAppState (line 90) | class MyCounterAppState extends State<MyCounterApp> {
    method build (line 94) | Widget build(BuildContext context)
  class CounterCubit (line 133) | class CounterCubit extends Cubit<int> {
    method increment (line 136) | void increment()
  function main (line 139) | void main()

FILE: packages/flutter_bloc/test/bloc_consumer_test.dart
  class CounterCubit (line 7) | class CounterCubit extends Cubit<int> {
    method increment (line 10) | void increment()
  function main (line 13) | void main()

FILE: packages/flutter_bloc/test/bloc_listener_test.dart
  class CounterCubit (line 7) | class CounterCubit extends Cubit<int> {
    method increment (line 10) | void increment()
  class MyApp (line 13) | class MyApp extends StatefulWidget {
    method createState (line 19) | State<MyApp> createState()
  class _MyAppState (line 22) | class _MyAppState extends State<MyApp> {
    method initState (line 26) | void initState()
    method dispose (line 32) | void dispose()
    method build (line 38) | Widget build(BuildContext context)
  function main (line 76) | void main()

FILE: packages/flutter_bloc/test/bloc_provider_test.dart
  class MockCubit (line 9) | class MockCubit<S> extends Cubit<S> {
  class MyApp (line 16) | class MyApp extends StatelessWidget {
    method build (line 32) | Widget build(BuildContext context)
  class MyStatefulApp (line 50) | class MyStatefulApp extends StatefulWidget {
    method createState (line 59) | State<MyStatefulApp> createState()
  class _MyStatefulAppState (line 62) | class _MyStatefulAppState extends State<MyStatefulApp> {
    method initState (line 66) | void initState()
    method build (line 72) | Widget build(BuildContext context)
    method dispose (line 96) | void dispose()
  class MyAppNoProvider (line 102) | class MyAppNoProvider extends MaterialApp {
  class CounterPage (line 109) | class CounterPage extends StatelessWidget {
    method build (line 115) | Widget build(BuildContext context)
  class RoutePage (line 130) | class RoutePage extends StatelessWidget {
    method build (line 134) | Widget build(BuildContext context)
  class CounterCubit (line 162) | class CounterCubit extends Cubit<int> {
    method increment (line 169) | void increment()
    method decrement (line 170) | void decrement()
    method close (line 173) | Future<void> close()
  function main (line 179) | void main()

FILE: packages/flutter_bloc/test/bloc_selector_test.dart
  class CounterCubit (line 7) | class CounterCubit extends Cubit<int> {
    method increment (line 10) | void increment()
  function main (line 13) | void main()
  function buildWidget (line 192) | Widget buildWidget()

FILE: packages/flutter_bloc/test/multi_bloc_listener_test.dart
  class CounterCubit (line 6) | class CounterCubit extends Cubit<int> {
    method increment (line 9) | void increment()
  function main (line 12) | void main()

FILE: packages/flutter_bloc/test/multi_bloc_provider_test.dart
  class MyAppWithNavigation (line 6) | class MyAppWithNavigation extends MaterialApp {
  class HomePage (line 11) | class HomePage extends StatelessWidget {
    method build (line 26) | Widget build(BuildContext context)
    method getProviders (line 27) | List<BlocProvider<StateStreamableSource<Object?>>> getProviders()
  class MyApp (line 93) | class MyApp extends StatelessWidget {
    method build (line 97) | Widget build(BuildContext context)
  class CounterPage (line 107) | class CounterPage extends StatelessWidget {
    method build (line 111) | Widget build(BuildContext context)
  class CounterCubit (line 131) | class CounterCubit extends Cubit<int> {
    method increment (line 138) | void increment()
    method decrement (line 139) | void decrement()
    method close (line 142) | Future<void> close()
  class ThemeCubit (line 148) | class ThemeCubit extends Cubit<ThemeData> {
    method toggle (line 155) | void toggle()
    method close (line 160) | Future<void> close()
  function main (line 166) | void main()

FILE: packages/flutter_bloc/test/multi_repository_provider_test.dart
  class MyApp (line 5) | class MyApp extends MaterialApp {
  class CounterPage (line 9) | class CounterPage extends StatelessWidget {
    method build (line 13) | Widget build(BuildContext context)
  class RepositoryA (line 34) | class RepositoryA {
  class RepositoryB (line 40) | class RepositoryB {
  function main (line 46) | void main()

FILE: packages/flutter_bloc/test/repository_provider_test.dart
  class MyApp (line 5) | class MyApp extends StatelessWidget {
    method build (line 18) | Widget build(BuildContext context)
  class MyStatefulApp (line 36) | class MyStatefulApp extends StatefulWidget {
    method createState (line 42) | State<MyStatefulApp> createState()
  class _MyStatefulAppState (line 45) | class _MyStatefulAppState extends State<MyStatefulApp> {
    method initState (line 49) | void initState()
    method build (line 55) | Widget build(BuildContext context)
  class MyAppNoProvider (line 78) | class MyAppNoProvider extends MaterialApp {
  class CounterPage (line 83) | class CounterPage extends StatelessWidget {
    method build (line 89) | Widget build(BuildContext context)
  class Repository (line 99) | class Repository {
  function main (line 105) | void main()

FILE: packages/hydrated_bloc/example/lib/main.dart
  function main (line 8) | void main()
  class App (line 18) | class App extends StatelessWidget {
    method build (line 22) | Widget build(BuildContext context)
  class AppView (line 30) | class AppView extends StatelessWidget {
    method build (line 34) | Widget build(BuildContext context)
  class CounterPage (line 46) | class CounterPage extends StatelessWidget {
    method build (line 50) | Widget build(BuildContext context)
  class CounterView (line 58) | class CounterView extends StatelessWidget {
    method build (line 62) | Widget build(BuildContext context)
  class CounterEvent (line 106) | sealed class CounterEvent {}
  class CounterIncrementPressed (line 108) | final class CounterIncrementPressed extends CounterEvent {}
  class CounterDecrementPressed (line 110) | final class CounterDecrementPressed extends CounterEvent {}
  class CounterBloc (line 112) | class CounterBloc extends HydratedBloc<CounterEvent, int> {
    method fromJson (line 119) | int fromJson(Map<String, dynamic> json)
    method toJson (line 122) | Map<String, int> toJson(int state)
  class BrightnessCubit (line 125) | class BrightnessCubit extends HydratedCubit<Brightness> {
    method toggleBrightness (line 128) | void toggleBrightness()
    method fromJson (line 133) | Brightness fromJson(Map<String, dynamic> json)
    method toJson (line 138) | Map<String, dynamic> toJson(Brightness state)

FILE: packages/hydrated_bloc/lib/src/_migration/_migration_io.dart
  function migrate (line 7) | Future<dynamic> migrate(String directory, Box<dynamic> box)

FILE: packages/hydrated_bloc/lib/src/_migration/_migration_stub.dart
  function migrate (line 4) | Future<dynamic> migrate(String directory, Box<dynamic> box)

FILE: packages/hydrated_bloc/lib/src/hydrated_bloc.dart
  type HydrationErrorBehavior (line 9) | enum HydrationErrorBehavior {
  type OnHydrationError (line 22) | typedef OnHydrationError = HydrationErrorBehavior Function(
  function defaultOnHydrationError (line 29) | HydrationErrorBehavior defaultOnHydrationError(
  class HydratedBloc (line 61) | abstract class HydratedBloc<Event, State> extends Bloc<Event, State>
  class HydratedCubit (line 107) | abstract class HydratedCubit<State> extends Cubit<State>
  function hydrate (line 179) | void hydrate({
  function onChange (line 218) | void onChange(Change<State> change)
  function _fromJson (line 237) | State? _fromJson(dynamic json)
  function _toJson (line 243) | Map<String, dynamic>? _toJson(State state)
  function _traverseRead (line 247) | dynamic _traverseRead(dynamic value)
  function _cast (line 264) | T? _cast<T>(dynamic x)
  function _traverseWrite (line 266) | _Traversed _traverseWrite(Object? value)
  function _traverseAtomicJson (line 293) | dynamic _traverseAtomicJson(dynamic object)
  function _traverseComplexJson (line 309) | dynamic _traverseComplexJson(dynamic object)
  function _traverseJson (line 336) | dynamic _traverseJson(dynamic object)
  function _toEncodable (line 344) | dynamic _toEncodable(dynamic object)
  function _checkCycle (line 348) | void _checkCycle(Object? object)
  function _removeSeen (line 357) | void _removeSeen(dynamic object)
  function clear (line 387) | Future<void> clear()
  function fromJson (line 391) | State? fromJson(Map<String, dynamic> json)
  function toJson (line 397) | Map<String, dynamic>? toJson(State state)
  class HydratedCyclicError (line 402) | class HydratedCyclicError extends HydratedUnsupportedError {
    method toString (line 407) | String toString()
  class StorageNotFound (line 423) | class StorageNotFound implements Exception {
    method toString (line 428) | String toString()
  class HydratedUnsupportedError (line 443) | class HydratedUnsupportedError extends Error {
    method toString (line 458) | String toString()
  class NIL (line 472) | @visibleForTesting
  type _Outcome (line 478) | enum _Outcome { atomic, complex }
  class _Traversed (line 480) | class _Traversed {

FILE: packages/hydrated_bloc/lib/src/hydrated_cipher.dart
  class HydratedCipher (line 6) | abstract class HydratedCipher implements HiveCipher {
    method calculateKeyCrc (line 9) | int calculateKeyCrc()
    method maxEncryptedSize (line 13) | int maxEncryptedSize(Uint8List inp)
    method encrypt (line 17) | int encrypt(
    method decrypt (line 27) | int decrypt(
  class HydratedAesCipher (line 37) | class HydratedAesCipher extends HiveAesCipher implements HydratedCipher {

FILE: packages/hydrated_bloc/lib/src/hydrated_storage.dart
  class Storage (line 13) | abstract class Storage {
    method read (line 15) | dynamic read(String key)
    method write (line 18) | Future<void> write(String key, dynamic value)
    method delete (line 21) | Future<void> delete(String key)
    method clear (line 24) | Future<void> clear()
    method close (line 28) | Future<void> close()
  class HydratedStorageDirectory (line 34) | class HydratedStorageDirectory {
  class HydratedStorage (line 56) | class HydratedStorage implements Storage {
    method build (line 94) | Future<HydratedStorage> build({
    method read (line 132) | dynamic read(String key)
    method write (line 135) | Future<void> write(String key, dynamic value)
    method delete (line 142) | Future<void> delete(String key)
    method clear (line 149) | Future<void> clear()
    method close (line 156) | Future<void> close()

FILE: packages/hydrated_bloc/test/cubits/bad_cubit.dart
  class BadCubit (line 3) | class BadCubit extends HydratedCubit<BadState?> {
    method setBad (line 6) | void setBad([dynamic badObject = Object])
    method toJson (line 9) | Map<String, dynamic>? toJson(BadState? state)
    method fromJson (line 12) | BadState? fromJson(Map<String, dynamic> json)
  class BadState (line 15) | class BadState {
    method toJson (line 20) | Map<String, dynamic> toJson()
  class VeryBadObject (line 27) | class VeryBadObject {
    method toJson (line 28) | dynamic toJson()

FILE: packages/hydrated_bloc/test/cubits/cyclic_cubit.dart
  class CyclicCubit (line 5) | class CyclicCubit extends HydratedCubit<Cycle1?> {
    method setCyclic (line 8) | void setCyclic(Cycle1 cycle1)
    method toJson (line 11) | Map<String, dynamic>? toJson(Cycle1? state)
    method fromJson (line 14) | Cycle1 fromJson(Map<String, dynamic> json)
  class Cycle1 (line 17) | class Cycle1 {
    method toJson (line 26) | Map<String, dynamic> toJson()
  class Cycle2 (line 44) | class Cycle2 {
    method toJson (line 53) | Map<String, dynamic> toJson()

FILE: packages/hydrated_bloc/test/cubits/freezed_cubit.dart
  class FreezedCubit (line 7) | class FreezedCubit extends HydratedCubit<Tree?> {
    method setQuestion (line 10) | void setQuestion(Tree tree)
    method toJson (line 13) | Map<String, dynamic>? toJson(Tree? state)
    method fromJson (line 16) | Tree fromJson(Map<String, dynamic> json)
  class Question (line 19) | @freezed
  class Tree (line 30) | @freezed

FILE: packages/hydrated_bloc/test/cubits/freezed_cubit.freezed.dart
  function _$identity (line 12) | T _$identity<T>(T value)
  function _$QuestionFromJson (line 17) | Question _$QuestionFromJson(Map<String, dynamic> json)
  function toJson (line 26) | Map<String, dynamic> toJson()
  class $QuestionCopyWith (line 33) | abstract class $QuestionCopyWith<$Res> {
    method call (line 37) | $Res call({int? id, String? question})
  class _$QuestionCopyWithImpl (line 41) | class _$QuestionCopyWithImpl<$Res, $Val extends Question>
    method call (line 52) | $Res call({
  class _$$_QuestionCopyWith (line 70) | abstract class _$$_QuestionCopyWith<$Res> implements $QuestionCopyWith<$...
    method call (line 76) | $Res call({int? id, String? question})
  class __$$_QuestionCopyWithImpl (line 80) | class __$$_QuestionCopyWithImpl<$Res>
    method call (line 89) | $Res call({
  class _$_Question (line 107) | @JsonSerializable()
    method toString (line 120) | String toString()
    method toJson (line 145) | Map<String, dynamic> toJson()
  class _Question (line 152) | abstract class _Question implements Question {
  function _$TreeFromJson (line 168) | Tree _$TreeFromJson(Map<String, dynamic> json)
  function toJson (line 178) | Map<String, dynamic> toJson()
  class $TreeCopyWith (line 184) | abstract class $TreeCopyWith<$Res> {
    method call (line 188) | $Res call({Question? question, Tree? left, Tree? right})
  class _$TreeCopyWithImpl (line 196) | class _$TreeCopyWithImpl<$Res, $Val extends Tree>
    method call (line 207) | $Res call({
  class _$$_QTreeCopyWith (line 266) | abstract class _$$_QTreeCopyWith<$Res> implements $TreeCopyWith<$Res> {
    method call (line 271) | $Res call({Question? question, Tree? left, Tree? right})
  class __$$_QTreeCopyWithImpl (line 282) | class __$$_QTreeCopyWithImpl<$Res> extends _$TreeCopyWithImpl<$Res, _$_Q...
    method call (line 289) | $Res call({
  class _$_QTree (line 312) | @JsonSerializable()
    method toString (line 327) | String toString()
    method toJson (line 353) | Map<String, dynamic> toJson()
  class _QTree (line 360) | abstract class _QTree implements Tree {

FILE: packages/hydrated_bloc/test/cubits/freezed_cubit.g.dart
  function _$$_QuestionFromJson (line 11) | _$_Question _$$_QuestionFromJson(Map<String, dynamic> json)
  function _$$_QuestionToJson (line 16) | Map<String, dynamic> _$$_QuestionToJson(_$_Question instance)
  function _$$_QTreeFromJson (line 22) | _$_QTree _$$_QTreeFromJson(Map<String, dynamic> json)
  function _$$_QTreeToJson (line 34) | Map<String, dynamic> _$$_QTreeToJson(_$_QTree instance)

FILE: packages/hydrated_bloc/test/cubits/from_json_state_cubit.dart
  class FromJsonStateCubit (line 3) | class FromJsonStateCubit extends HydratedCubit<int> {
    method increment (line 10) | void increment()
    method toJson (line 13) | Map<String, dynamic>? toJson(int state)
    method fromJson (line 18) | int? fromJson(Map<String, dynamic> json)

FILE: packages/hydrated_bloc/test/cubits/json_serializable_cubit.dart
  class JsonSerializableCubit (line 8) | class JsonSerializableCubit extends HydratedCubit<User> {
    method updateFavoriteColor (line 11) | void updateFavoriteColor(Color color)
    method fromJson (line 15) | User fromJson(Map<String, dynamic> json)
    method toJson (line 18) | Map<String, dynamic> toJson(User state)
  class User (line 21) | @immutable
    method toJson (line 35) | Map<String, dynamic> toJson()
    method copyWith (line 42) | User copyWith({
    method toString (line 77) | String toString()
  type Color (line 82) | enum Color { red, green, blue }
  class Todo (line 84) | @immutable
    method toJson (line 89) | Map<String, dynamic> toJson()

FILE: packages/hydrated_bloc/test/cubits/json_serializable_cubit.g.dart
  function _$UserFromJson (line 11) | User _$UserFromJson(Map<String, dynamic> json)
  function _$UserToJson (line 20) | Map<String, dynamic> _$UserToJson(User instance)
  function _$TodoFromJson (line 33) | Todo _$TodoFromJson(Map<String, dynamic> json)
  function _$TodoToJson (line 38) | Map<String, dynamic> _$TodoToJson(Todo instance)

FILE: packages/hydrated_bloc/test/cubits/list_cubit.dart
  class ListCubit (line 4) | class ListCubit extends HydratedCubit<List<String>> {
    method addItem (line 7) | void addItem(String item)
    method toJson (line 10) | Map<String, dynamic> toJson(List<String> state)
    method fromJson (line 15) | List<String> fromJson(Map<String, dynamic> json)
  class ListCubitMap (line 20) | class ListCubitMap<T extends ToJsonMap<E>, E> extends HydratedCubit<List...
    method addItem (line 25) | void addItem(T item)
    method toJson (line 28) | Map<String, dynamic> toJson(List<T> state)
    method fromJson (line 40) | List<T> fromJson(Map<String, dynamic> json)
  class ListCubitList (line 49) | class ListCubitList<T extends ToJsonList<E>, E> extends HydratedCubit<Li...
    method addItem (line 54) | void addItem(T item)
    method reset (line 55) | void reset()
    method toJson (line 58) | Map<String, dynamic> toJson(List<T> state)
    method fromJson (line 70) | List<T> fromJson(Map<String, dynamic> json)
  function toJson (line 80) | Map<String, T> toJson()
  class MapObject (line 83) | @immutable
    method fromJson (line 88) | MapObject fromJson(Map<String, dynamic> map)
    method toJson (line 95) | Map<String, int> toJson()
  class MapCustomObject (line 110) | @immutable
    method fromJson (line 115) | MapCustomObject fromJson(Map<String, dynamic> map)
    method toJson (line 126) | Map<String, CustomObject> toJson()
  function toJson (line 142) | List<T> toJson()
  class ListObject (line 145) | @immutable
    method fromJson (line 150) | ListObject fromJson(List<dynamic> list)
    method toJson (line 157) | List<int> toJson()
  class ListMapObject (line 172) | @immutable
    method fromJson (line 177) | ListMapObject fromJson(List<dynamic> list)
    method toJson (line 186) | List<MapObject> toJson()
  class ListListObject (line 201) | @immutable
    method fromJson (line 206) | ListListObject fromJson(List<dynamic> list)
    method toJson (line 215) | List<ListObject> toJson()
  class ListCustomObject (line 230) | @immutable
    method fromJson (line 235) | ListCustomObject fromJson(List<dynamic> list)
    method toJson (line 246) | List<CustomObject> toJson()
  class CustomObject (line 261) | @immutable
    method toJson (line 271) | Map<String, dynamic> toJson()

FILE: packages/hydrated_bloc/test/cubits/manual_cubit.dart
  class ManualCubit (line 5) | class ManualCubit extends HydratedCubit<Dog?> {
    method setDog (line 8) | void setDog(Dog dog)
    method toJson (line 11) | Map<String, dynamic>? toJson(Dog? state)
    method fromJson (line 14) | Dog fromJson(Map<String, dynamic> json)
  class Dog (line 17) | @immutable
    method toJson (line 34) | Map<String, dynamic> toJson()
  class Toy (line 61) | @immutable
    method toJson (line 71) | Map<String, dynamic> toJson()

FILE: packages/hydrated_bloc/test/cubits/season_palette_cubit.dart
  class SeasonPaletteCubit (line 6) | class SeasonPaletteCubit extends HydratedCubit<SeasonPalette> {
    method update (line 9) | void update(SeasonPalette palette)
    method toJson (line 12) | Map<String, dynamic> toJson(SeasonPalette state)
    method fromJson (line 15) | SeasonPalette fromJson(Map<String, dynamic> json)
  class SeasonPalette (line 20) | @immutable
    method toJson (line 38) | Map<String, dynamic> toJson()
  class Season (line 61) | @immutable
    method toJson (line 75) | int toJson()
    method fromJson (line 77) | Season fromJson(int value)
    method toString (line 90) | String toString()

FILE: packages/hydrated_bloc/test/cubits/simple_cubit.dart
  class SimpleCubit (line 3) | class SimpleCubit extends HydratedCubit<int> {
    method increment (line 6) | void increment()
    method toJson (line 9) | Map<String, dynamic> toJson(int state)
    method fromJson (line 12) | int fromJson(Map<String, dynamic> json)

FILE: packages/hydrated_bloc/test/e2e_test.dart
  function sleep (line 10) | Future<void> sleep()
  function main (line 12) | void main()

FILE: packages/hydrated_bloc/test/hive_interference_test.dart
  function main (line 8) | void main()

FILE: packages/hydrated_bloc/test/hydrated_aes_cipher_test.dart
  function main (line 8) | void main()

FILE: packages/hydrated_bloc/test/hydrated_bloc_test.dart
  function unawaited (line 9) | void unawaited(Future<void>? _)
  class MockStorage (line 11) | class MockStorage extends Mock implements Storage {}
  class MyUuidHydratedBloc (line 13) | class MyUuidHydratedBloc extends HydratedBloc<String, String?> {
    method toJson (line 17) | Map<String, String?> toJson(String? state)
    method fromJson (line 20) | String? fromJson(dynamic json)
  class MyHydratedBlocWithCustomStorage (line 30) | class MyHydratedBlocWithCustomStorage extends HydratedBloc<int, int> {
    method toJson (line 34) | Map<String, int>? toJson(int state)
    method fromJson (line 39) | int? fromJson(Map<String, dynamic> json)
  class CounterEvent (line 42) | abstract class CounterEvent {}
  class Increment (line 44) | class Increment extends CounterEvent {}
  class MyCallbackHydratedBloc (line 46) | class MyCallbackHydratedBloc extends HydratedBloc<CounterEvent, int> {
    method toJson (line 56) | Map<String, int> toJson(int state)
    method fromJson (line 59) | int? fromJson(Map<String, dynamic> json)
  class MyHydratedBloc (line 65) | class MyHydratedBloc extends HydratedBloc<int, int> {
    method toJson (line 78) | Map<String, int>? toJson(int state)
    method fromJson (line 83) | int? fromJson(Map<String, dynamic> json)
  class MyMultiHydratedBloc (line 86) | class MyMultiHydratedBloc extends HydratedBloc<int, int> {
    method toJson (line 97) | Map<String, int> toJson(int state)
    method fromJson (line 103) | int? fromJson(dynamic json)
  class MyErrorThrowingBloc (line 106) | class MyErrorThrowingBloc extends HydratedBloc<Object, int> {
    method onError (line 120) | void onError(Object error, StackTrace stackTrace)
    method toJson (line 126) | Map<String, dynamic> toJson(int state)
    method fromJson (line 131) | int fromJson(dynamic json)
  function main (line 136) | void main()

FILE: packages/hydrated_bloc/test/hydrated_cubit_test.dart
  class MockStorage (line 9) | class MockStorage extends Mock implements Storage {}
  class MyUuidHydratedCubit (line 11) | class MyUuidHydratedCubit extends HydratedCubit<String> {
    method toJson (line 15) | Map<String, String> toJson(String state)
    method fromJson (line 18) | String? fromJson(Map<String, dynamic> json)
  class MyCallbackHydratedCubit (line 21) | class MyCallbackHydratedCubit extends HydratedCubit<int> {
    method increment (line 28) | void increment()
    method toJson (line 31) | Map<String, int> toJson(int state)
    method fromJson (line 34) | int? fromJson(dynamic json)
    method onError (line 42) | void onError(Object error, StackTrace stackTrace)
  class MyHydratedCubit (line 45) | class MyHydratedCubit extends HydratedCubit<int> {
    method toJson (line 64) | Map<String, int> toJson(int state)
    method fromJson (line 68) | int? fromJson(dynamic json)
    method onError (line 71) | void onError(Object error, StackTrace stackTrace)
  class MyMultiHydratedCubit (line 76) | class MyMultiHydratedCubit extends HydratedCubit<int> {
    method toJson (line 87) | Map<String, int> toJson(int state)
    method fromJson (line 91) | int? fromJson(dynamic json)
  class MyIntKeyMapCubit (line 94) | class MyIntKeyMapCubit extends HydratedCubit<Map<int, String>> {
    method toJson (line 98) | Map<String, dynamic> toJson(Map<int, String> state)
    method fromJson (line 103) | Map<int, String> fromJson(Map<String, dynamic> json)
  class MyHydratedCubitWithCustomStorage (line 109) | class MyHydratedCubitWithCustomStorage extends HydratedCubit<int> {
    method toJson (line 114) | Map<String, int>? toJson(int state)
    method fromJson (line 119) | int? fromJson(Map<String, dynamic> json)
  function main (line 122) | void main()

FILE: packages/hydrated_bloc/test/hydrated_cyclic_error_test.dart
  function main (line 4) | void main()

FILE: packages/hydrated_bloc/test/hydrated_mixin_test.dart
  class MockStorage (line 6) | class MockStorage extends Mock implements Storage {}
  class MyCubit (line 8) | class MyCubit extends Cubit<int> with HydratedMixin<int> {
    method fromJson (line 12) | int fromJson(Map<String, dynamic> json)
    method toJson (line 15) | Map<String, dynamic> toJson(int state)
  function main (line 18) | void main()

FILE: packages/hydrated_bloc/test/hydrated_storage_test.dart
  class MockBox (line 12) | class MockBox extends Mock implements Box<dynamic> {}
  function main (line 14) | void main()

FILE: packages/replay_bloc/example/lib/main.dart
  function main (line 7) | void main()
  class AppBlocObserver (line 15) | class AppBlocObserver extends BlocObserver {
    method onChange (line 20) | void onChange(BlocBase<dynamic> bloc, Change<dynamic> change)
    method onTransition (line 26) | void onTransition(
  class App (line 41) | class App extends StatelessWidget {
    method build (line 46) | Widget build(BuildContext context)
  class CounterPage (line 60) | class CounterPage extends StatelessWidget {
    method build (line 65) | Widget build(BuildContext context)
  class CounterEvent (line 129) | sealed class CounterEvent extends ReplayEvent {}
  class CounterIncrementPressed (line 132) | final class CounterIncrementPressed extends CounterEvent {
    method toString (line 134) | String toString()
  class CounterDecrementPressed (line 138) | final class CounterDecrementPressed extends CounterEvent {
    method toString (line 140) | String toString()
  class CounterResetPressed (line 144) | final class CounterResetPressed extends CounterEvent {
    method toString (line 146) | String toString()
  class CounterBloc (line 156) | class CounterBloc extends ReplayBloc<CounterEvent, int> {

FILE: packages/replay_bloc/lib/src/change_stack.dart
  type _Predicate (line 3) | typedef _Predicate<T> = bool Function(T);
  class _ChangeStack (line 5) | class _ChangeStack<T> {
    method add (line 18) | void add(_Change<T> change)
    method clear (line 29) | void clear()
    method redo (line 34) | void redo()
    method undo (line 42) | void undo()
  class _Change (line 51) | class _Change<T> {
    method execute (line 64) | void execute()
    method undo (line 65) | void undo()

FILE: packages/replay_bloc/lib/src/replay_bloc.dart
  class ReplayEvent (line 6) | abstract class ReplayEvent {
  class _Redo (line 12) | class _Redo extends ReplayEvent {
    method toString (line 14) | String toString()
  class _Undo (line 18) | class _Undo extends ReplayEvent {
    method toString (line 20) | String toString()
  class ReplayBloc (line 61) | abstract class ReplayBloc<Event extends ReplayEvent, State>
  function onTransition (line 84) | void onTransition(covariant Transition<ReplayEvent, State> transition)
  function onEvent (line 91) | void onEvent(covariant ReplayEvent event)
  function emit (line 97) | void emit(State state)
  function undo (line 135) | void undo()
  function redo (line 138) | void redo()
  function clearHistory (line 147) | void clearHistory()
  function shouldReplay (line 153) | bool shouldReplay(State state)

FILE: packages/replay_bloc/lib/src/replay_cubit.dart
  class ReplayCubit (line 46) | abstract class ReplayCubit<State> extends Cubit<State>
  function emit (line 66) | void emit(State state)
  function undo (line 79) | void undo()
  function redo (line 82) | void redo()
  function clearHistory (line 91) | void clearHistory()
  function shouldReplay (line 97) | bool shouldReplay(State state)

FILE: packages/replay_bloc/test/blocs/counter_bloc.dart
  class CounterEvent (line 3) | abstract class CounterEvent extends ReplayEvent {}
  class Increment (line 5) | class Increment extends CounterEvent {}
  class Decrement (line 7) | class Decrement extends CounterEvent {}
  class CounterBloc (line 9) | class CounterBloc extends ReplayBloc<CounterEvent, int> {
    method onEvent (line 28) | void onEvent(ReplayEvent event)
    method onTransition (line 34) | void onTransition(Transition<ReplayEvent, int> transition)
    method shouldReplay (line 40) | bool shouldReplay(int state)
  class CounterBlocMixin (line 46) | class CounterBlocMixin extends Bloc<CounterEvent, int>

FILE: packages/replay_bloc/test/cubits/counter_cubit.dart
  class CounterCubit (line 3) | class CounterCubit extends ReplayCubit<int> {
    method increment (line 10) | void increment()
    method decrement (line 11) | void decrement()
    method shouldReplay (line 14) | bool shouldReplay(int state)
  class CounterCubitMixin (line 20) | class CounterCubitMixin extends Cubit<int> with ReplayCubitMixin<int> {
    method increment (line 27) | void increment()
    method decrement (line 28) | void decrement()

FILE: packages/replay_bloc/test/main.dart
  function main (line 4) | void main()

FILE: packages/replay_bloc/test/replay_bloc_test.dart
  function main (line 8) | void main()

FILE: packages/replay_bloc/test/replay_cubit_test.dart
  function main (line 7) | void main()
Condensed preview — 1697 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,854K chars).
[
  {
    "path": ".github/CODEOWNERS",
    "chars": 62,
    "preview": "# Every request must be reviewed and accepted by:\n\n*\t@felangel"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 59,
    "preview": "github: [felangel]\npatreon: felangel\nopen_collective: bloc\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 495,
    "preview": "---\nname: Bug Report\nabout: Create a report to help us improve\ntitle: \"fix: \"\nlabels: bug\n---\n\n**Description**\nA clear a"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/build.md",
    "chars": 211,
    "preview": "---\nname: Build System\nabout: Changes that affect the build system or external dependencies\ntitle: \"build: \"\nlabels: bui"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/chore.md",
    "chars": 231,
    "preview": "---\nname: Chore\nabout: Other changes that don't modify src or test files\ntitle: \"chore: \"\nlabels: chore\n---\n\n**Descripti"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/ci.md",
    "chars": 203,
    "preview": "---\nname: Continuous Integration\nabout: Changes to the CI configuration files and scripts\ntitle: \"ci: \"\nlabels: ci\n---\n\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 27,
    "preview": "blank_issues_enabled: false"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/documentation.md",
    "chars": 237,
    "preview": "---\nname: Documentation\nabout: Improve the documentation so all collaborators have a common understanding\ntitle: \"docs: "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 523,
    "preview": "---\nname: Feature Request\nabout: A new feature to be added to the project\ntitle: \"feat: \"\nlabels: feature\n---\n\n**Descrip"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/performance.md",
    "chars": 229,
    "preview": "---\nname: Performance Update\nabout: A code change that improves performance\ntitle: \"perf: \"\nlabels: performance\n---\n\n**D"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/refactor.md",
    "chars": 293,
    "preview": "---\nname: Refactor\nabout: A code change that neither fixes a bug nor adds a feature\ntitle: \"refactor: \"\nlabels: refactor"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/revert.md",
    "chars": 182,
    "preview": "---\nname: Revert Commit\nabout: Reverts a previous commit\ntitle: \"revert: \"\nlabels: revert\n---\n\n**Description**\n\nProvide "
  },
  {
    "path": ".github/ISSUE_TEMPLATE/style.md",
    "chars": 244,
    "preview": "---\nname: Style Changes\nabout: Changes that do not affect the meaning of the code (white-space, formatting, missing semi"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/test.md",
    "chars": 256,
    "preview": "---\nname: Test\nabout: Adding missing tests or correcting existing tests\ntitle: \"test: \"\nlabels: test\n---\n\n**Description*"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 723,
    "preview": "<!--\n  Thanks for contributing!\n\n  Provide a description of your changes below and a general summary in the title\n\n  Ple"
  },
  {
    "path": ".github/actions/angular_dart_package/action.yaml",
    "chars": 1463,
    "preview": "name: Angular Dart Package Workflow\ndescription: Build and test Angular Dart packages.\n\ninputs:\n  dart_sdk:\n    required"
  },
  {
    "path": ".github/actions/astro_site/action.yaml",
    "chars": 910,
    "preview": "name: Astro Site Workflow\ndescription: Build and test Astro sites.\n\ninputs:\n  working_directory:\n    required: false\n   "
  },
  {
    "path": ".github/actions/dart_compile/action.yaml",
    "chars": 1445,
    "preview": "name: Dart Compile Workflow\ndescription: Compile Dart Executables\n\ninputs:\n  dart_sdk:\n    required: false\n    default: "
  },
  {
    "path": ".github/actions/dart_package/action.yaml",
    "chars": 4136,
    "preview": "name: Dart Package Workflow\ndescription: Build and test Dart packages.\n\ninputs:\n  codecov_token:\n    required: true\n    "
  },
  {
    "path": ".github/actions/flutter_package/action.yaml",
    "chars": 4431,
    "preview": "name: Flutter Package Workflow\ndescription: Build and test a Flutter package.\n\ninputs:\n  codecov_token:\n    required: tr"
  },
  {
    "path": ".github/codecov.yml",
    "chars": 57,
    "preview": "flag_management:\n  default_rules:\n    carryforward: true\n"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 185,
    "preview": "version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"daily\"\n   "
  },
  {
    "path": ".github/workflows/main.yaml",
    "chars": 14310,
    "preview": "name: build\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.ref }}\n  cancel-in-progress: true\n\non:\n  pull_reque"
  },
  {
    "path": ".gitignore",
    "chars": 2037,
    "preview": "# Miscellaneous\n*.class\n*.lock\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*."
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 3352,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 3245,
    "preview": "# Contributing to Bloc\n\n👍🎉 First off, thanks for taking the time to contribute! 🎉👍\n\nThe following is a set of guidelines"
  },
  {
    "path": "LICENSE",
    "chars": 1070,
    "preview": "MIT License\n\nCopyright (c) 2026 Felix Angelov\n\nPermission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "README.md",
    "chars": 20428,
    "preview": "<p align=\"center\">\n<img src=\"https://raw.githubusercontent.com/felangel/bloc/master/assets/logos/bloc.png\" height=\"100\" "
  },
  {
    "path": "analysis_options.yaml",
    "chars": 7232,
    "preview": "analyzer:\n  exclude:\n    - bricks/**\n\n  language:\n    strict-casts: true\n    strict-inference: true\n    strict-raw-types"
  },
  {
    "path": "bricks/README.md",
    "chars": 1069,
    "preview": "# Bloc Bricks 🧱\n\n[Mason](https://github.com/felangel/mason) support for the [Bloc Library](https://bloclibrary.dev). A c"
  },
  {
    "path": "bricks/bloc/CHANGELOG.md",
    "chars": 634,
    "preview": "# 0.4.0\n\n- chore(deps): upgrade to `mason ^0.1.0`\n- chore(deps): upgrade hooks to `dart ^3.5.4`\n\n# 0.3.1\n\n- chore: updat"
  },
  {
    "path": "bricks/bloc/LICENSE",
    "chars": 1070,
    "preview": "MIT License\n\nCopyright (c) 2026 Felix Angelov\n\nPermission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "bricks/bloc/README.md",
    "chars": 1890,
    "preview": "<p align=\"center\">\n<img style=\"height:100px\" src=\"https://raw.githubusercontent.com/felangel/bloc/master/assets/logos/bl"
  },
  {
    "path": "bricks/bloc/__brick__/{{name.snakeCase()}}_bloc.dart",
    "chars": 153,
    "preview": "{{#use_freezed}}{{> freezed_bloc }}{{/use_freezed}}{{#use_equatable}}{{> equatable_bloc }}{{/use_equatable}}{{#use_basic"
  },
  {
    "path": "bricks/bloc/__brick__/{{name.snakeCase()}}_event.dart",
    "chars": 156,
    "preview": "{{#use_freezed}}{{> freezed_event }}{{/use_freezed}}{{#use_equatable}}{{> equatable_event }}{{/use_equatable}}{{#use_bas"
  },
  {
    "path": "bricks/bloc/__brick__/{{name.snakeCase()}}_state.dart",
    "chars": 156,
    "preview": "{{#use_freezed}}{{> freezed_state }}{{/use_freezed}}{{#use_equatable}}{{> equatable_state }}{{/use_equatable}}{{#use_bas"
  },
  {
    "path": "bricks/bloc/__brick__/{{~ basic_bloc }}",
    "chars": 398,
    "preview": "import 'package:bloc/bloc.dart';\n\npart '{{name.snakeCase()}}_event.dart';\npart '{{name.snakeCase()}}_state.dart';\n\nclass"
  },
  {
    "path": "bricks/bloc/__brick__/{{~ basic_event }}",
    "chars": 125,
    "preview": "part of '{{name.snakeCase()}}_bloc.dart';\n\nsealed class {{name.pascalCase()}}Event {\n  const {{name.pascalCase()}}Event("
  },
  {
    "path": "bricks/bloc/__brick__/{{~ basic_state }}",
    "chars": 118,
    "preview": "part of '{{name.snakeCase()}}_bloc.dart';\n\nclass {{name.pascalCase()}}State {\n  const {{name.pascalCase()}}State();\n}\n"
  },
  {
    "path": "bricks/bloc/__brick__/{{~ equatable_bloc }}",
    "chars": 441,
    "preview": "import 'package:bloc/bloc.dart';\nimport 'package:equatable/equatable.dart';\n\npart '{{name.snakeCase()}}_event.dart';\npar"
  },
  {
    "path": "bricks/bloc/__brick__/{{~ equatable_event }}",
    "chars": 188,
    "preview": "part of '{{name.snakeCase()}}_bloc.dart';\n\nsealed class {{name.pascalCase()}}Event extends Equatable {\n  const {{name.pa"
  },
  {
    "path": "bricks/bloc/__brick__/{{~ equatable_state }}",
    "chars": 181,
    "preview": "part of '{{name.snakeCase()}}_bloc.dart';\n\nclass {{name.pascalCase()}}State extends Equatable {\n  const {{name.pascalCas"
  },
  {
    "path": "bricks/bloc/__brick__/{{~ freezed_bloc }}",
    "chars": 514,
    "preview": "import 'package:bloc/bloc.dart';\nimport 'package:freezed_annotation/freezed_annotation.dart';\n\npart '{{name.snakeCase()}"
  },
  {
    "path": "bricks/bloc/__brick__/{{~ freezed_event }}",
    "chars": 188,
    "preview": "part of '{{name.snakeCase()}}_bloc.dart';\n\n@freezed\nclass {{name.pascalCase()}}Event with _${{name.pascalCase()}}Event {"
  },
  {
    "path": "bricks/bloc/__brick__/{{~ freezed_state }}",
    "chars": 188,
    "preview": "part of '{{name.snakeCase()}}_bloc.dart';\n\n@freezed\nclass {{name.pascalCase()}}State with _${{name.pascalCase()}}State {"
  },
  {
    "path": "bricks/bloc/brick.yaml",
    "chars": 530,
    "preview": "name: bloc\ndescription: Generate a new Bloc in Dart. Built for the bloc state management library.\nversion: 0.4.0\nreposit"
  },
  {
    "path": "bricks/bloc/hooks/pre_gen.dart",
    "chars": 285,
    "preview": "import 'package:mason/mason.dart';\n\nFuture<void> run(HookContext context) async {\n  final style = context.vars['style'];"
  },
  {
    "path": "bricks/bloc/hooks/pubspec.yaml",
    "chars": 77,
    "preview": "name: bloc_hooks\n\nenvironment:\n  sdk: ^3.10.0\n\ndependencies:\n  mason: ^0.1.0\n"
  },
  {
    "path": "bricks/cubit/CHANGELOG.md",
    "chars": 513,
    "preview": "# 0.3.0\n\n- chore(deps): upgrade to `mason ^0.1.0`\n- chore(deps): upgrade hooks to `dart ^3.5.4`\n\n# 0.2.1\n\n- chore: updat"
  },
  {
    "path": "bricks/cubit/LICENSE",
    "chars": 1070,
    "preview": "MIT License\n\nCopyright (c) 2026 Felix Angelov\n\nPermission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "bricks/cubit/README.md",
    "chars": 1876,
    "preview": "<p align=\"center\">\n<img style=\"height:100px\" src=\"https://raw.githubusercontent.com/felangel/bloc/master/assets/logos/cu"
  },
  {
    "path": "bricks/cubit/__brick__/{{name.snakeCase()}}_cubit.dart",
    "chars": 156,
    "preview": "{{#use_freezed}}{{> freezed_cubit }}{{/use_freezed}}{{#use_equatable}}{{> equatable_cubit }}{{/use_equatable}}{{#use_bas"
  },
  {
    "path": "bricks/cubit/__brick__/{{name.snakeCase()}}_state.dart",
    "chars": 156,
    "preview": "{{#use_freezed}}{{> freezed_state }}{{/use_freezed}}{{#use_equatable}}{{> equatable_state }}{{/use_equatable}}{{#use_bas"
  },
  {
    "path": "bricks/cubit/__brick__/{{~ basic_cubit }}",
    "chars": 230,
    "preview": "import 'package:bloc/bloc.dart';\n\npart '{{name.snakeCase()}}_state.dart';\n\nclass {{name.pascalCase()}}Cubit extends Cubi"
  },
  {
    "path": "bricks/cubit/__brick__/{{~ basic_state }}",
    "chars": 119,
    "preview": "part of '{{name.snakeCase()}}_cubit.dart';\n\nclass {{name.pascalCase()}}State {\n  const {{name.pascalCase()}}State();\n}\n"
  },
  {
    "path": "bricks/cubit/__brick__/{{~ equatable_cubit }}",
    "chars": 273,
    "preview": "import 'package:bloc/bloc.dart';\nimport 'package:equatable/equatable.dart';\n\npart '{{name.snakeCase()}}_state.dart';\n\ncl"
  },
  {
    "path": "bricks/cubit/__brick__/{{~ equatable_state }}",
    "chars": 182,
    "preview": "part of '{{name.snakeCase()}}_cubit.dart';\n\nclass {{name.pascalCase()}}State extends Equatable {\n  const {{name.pascalCa"
  },
  {
    "path": "bricks/cubit/__brick__/{{~ freezed_cubit }}",
    "chars": 347,
    "preview": "import 'package:bloc/bloc.dart';\nimport 'package:freezed_annotation/freezed_annotation.dart';\n\npart '{{name.snakeCase()}"
  },
  {
    "path": "bricks/cubit/__brick__/{{~ freezed_state }}",
    "chars": 189,
    "preview": "part of '{{name.snakeCase()}}_cubit.dart';\n\n@freezed\nclass {{name.pascalCase()}}State with _${{name.pascalCase()}}State "
  },
  {
    "path": "bricks/cubit/brick.yaml",
    "chars": 542,
    "preview": "name: cubit\ndescription: Generate a new Cubit in Dart. Built for the bloc state management library.\nversion: 0.3.0\nrepos"
  },
  {
    "path": "bricks/cubit/hooks/pre_gen.dart",
    "chars": 285,
    "preview": "import 'package:mason/mason.dart';\n\nFuture<void> run(HookContext context) async {\n  final style = context.vars['style'];"
  },
  {
    "path": "bricks/cubit/hooks/pubspec.yaml",
    "chars": 78,
    "preview": "name: cubit_hooks\n\nenvironment:\n  sdk: ^3.10.0\n\ndependencies:\n  mason: ^0.1.0\n"
  },
  {
    "path": "bricks/flutter_bloc_feature/CHANGELOG.md",
    "chars": 511,
    "preview": "# 0.4.0\n\n- chore(deps): upgrade to `mason ^0.1.0`\n- chore(deps): upgrade hooks to `dart ^3.5.4`\n\n# 0.3.2\n\n- deps: upgrad"
  },
  {
    "path": "bricks/flutter_bloc_feature/LICENSE",
    "chars": 1070,
    "preview": "MIT License\n\nCopyright (c) 2026 Felix Angelov\n\nPermission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "bricks/flutter_bloc_feature/README.md",
    "chars": 2130,
    "preview": "<p align=\"center\">\n<img style=\"height:100px\" src=\"https://raw.githubusercontent.com/felangel/bloc/master/assets/logos/bl"
  },
  {
    "path": "bricks/flutter_bloc_feature/__brick__/{{name.snakeCase()}}/view/view.dart",
    "chars": 43,
    "preview": "export './{{name.snakeCase()}}_page.dart';\n"
  },
  {
    "path": "bricks/flutter_bloc_feature/__brick__/{{name.snakeCase()}}/view/{{name.snakeCase()}}_page.dart",
    "chars": 646,
    "preview": "import 'package:flutter/widgets.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\n\nimport '../{{name.snakeCase()}}"
  },
  {
    "path": "bricks/flutter_bloc_feature/__brick__/{{name.snakeCase()}}/{{name.snakeCase()}}.dart",
    "chars": 55,
    "preview": "export '{{{bloc_export}}}';\nexport './view/view.dart';\n"
  },
  {
    "path": "bricks/flutter_bloc_feature/__brick__/{{~ bloc_builder }}",
    "chars": 220,
    "preview": "    return BlocBuilder<{{name.pascalCase()}}Bloc, {{name.pascalCase()}}State>(\n      builder: (context, state) {\n       "
  },
  {
    "path": "bricks/flutter_bloc_feature/__brick__/{{~ bloc_provider }}",
    "chars": 129,
    "preview": "    return BlocProvider(\n      create: (_) => {{name.pascalCase()}}Bloc(),\n      child: const {{name.pascalCase()}}View("
  },
  {
    "path": "bricks/flutter_bloc_feature/__brick__/{{~ cubit_bloc_builder }}",
    "chars": 221,
    "preview": "    return BlocBuilder<{{name.pascalCase()}}Cubit, {{name.pascalCase()}}State>(\n      builder: (context, state) {\n      "
  },
  {
    "path": "bricks/flutter_bloc_feature/__brick__/{{~ cubit_bloc_provider }}",
    "chars": 130,
    "preview": "    return BlocProvider(\n      create: (_) => {{name.pascalCase()}}Cubit(),\n      child: const {{name.pascalCase()}}View"
  },
  {
    "path": "bricks/flutter_bloc_feature/brick.yaml",
    "chars": 833,
    "preview": "name: flutter_bloc_feature\ndescription: Generate a new Flutter feature with bloc. Built for the bloc state management li"
  },
  {
    "path": "bricks/flutter_bloc_feature/hooks/.gitignore",
    "chars": 34,
    "preview": ".dart_tool\n.packages\npubspec.lock\n"
  },
  {
    "path": "bricks/flutter_bloc_feature/hooks/post_gen.dart",
    "chars": 593,
    "preview": "import 'dart:io';\n\nimport 'package:mason/mason.dart';\n\nFuture<void> run(HookContext context) async {\n  await _runDartFor"
  },
  {
    "path": "bricks/flutter_bloc_feature/hooks/pre_gen.dart",
    "chars": 3062,
    "preview": "// ignore_for_file: constant_identifier_names\n\nimport 'dart:io';\n\nimport 'package:mason/mason.dart';\nimport 'package:pat"
  },
  {
    "path": "bricks/flutter_bloc_feature/hooks/pubspec.yaml",
    "chars": 108,
    "preview": "name: flutter_bloc_feature_hooks\n\nenvironment:\n  sdk: ^3.10.0\n\ndependencies:\n  mason: ^0.1.0\n  path: ^1.8.2\n"
  },
  {
    "path": "bricks/hydrated_bloc/CHANGELOG.md",
    "chars": 501,
    "preview": "# 0.4.0\n\n- chore(deps): upgrade to `mason ^0.1.0`\n- chore(deps): upgrade hooks to `dart ^3.5.4`\n\n# 0.3.1\n\n- chore: updat"
  },
  {
    "path": "bricks/hydrated_bloc/LICENSE",
    "chars": 1070,
    "preview": "MIT License\n\nCopyright (c) 2026 Felix Angelov\n\nPermission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "bricks/hydrated_bloc/README.md",
    "chars": 1916,
    "preview": "<p align=\"center\">\n<img style=\"height:100px\" src=\"https://raw.githubusercontent.com/felangel/bloc/master/assets/logos/hy"
  },
  {
    "path": "bricks/hydrated_bloc/__brick__/{{name.snakeCase()}}_bloc.dart",
    "chars": 153,
    "preview": "{{#use_freezed}}{{> freezed_bloc }}{{/use_freezed}}{{#use_equatable}}{{> equatable_bloc }}{{/use_equatable}}{{#use_basic"
  },
  {
    "path": "bricks/hydrated_bloc/__brick__/{{name.snakeCase()}}_event.dart",
    "chars": 156,
    "preview": "{{#use_freezed}}{{> freezed_event }}{{/use_freezed}}{{#use_equatable}}{{> equatable_event }}{{/use_equatable}}{{#use_bas"
  },
  {
    "path": "bricks/hydrated_bloc/__brick__/{{name.snakeCase()}}_state.dart",
    "chars": 156,
    "preview": "{{#use_freezed}}{{> freezed_state }}{{/use_freezed}}{{#use_equatable}}{{> equatable_state }}{{/use_equatable}}{{#use_bas"
  },
  {
    "path": "bricks/hydrated_bloc/__brick__/{{~ basic_bloc }}",
    "chars": 653,
    "preview": "import 'package:hydrated_bloc/hydrated_bloc.dart';\n\npart '{{name.snakeCase()}}_event.dart';\npart '{{name.snakeCase()}}_s"
  },
  {
    "path": "bricks/hydrated_bloc/__brick__/{{~ basic_event }}",
    "chars": 125,
    "preview": "part of '{{name.snakeCase()}}_bloc.dart';\n\nsealed class {{name.pascalCase()}}Event {\n  const {{name.pascalCase()}}Event("
  },
  {
    "path": "bricks/hydrated_bloc/__brick__/{{~ basic_state }}",
    "chars": 118,
    "preview": "part of '{{name.snakeCase()}}_bloc.dart';\n\nclass {{name.pascalCase()}}State {\n  const {{name.pascalCase()}}State();\n}\n"
  },
  {
    "path": "bricks/hydrated_bloc/__brick__/{{~ equatable_bloc }}",
    "chars": 696,
    "preview": "import 'package:equatable/equatable.dart';\nimport 'package:hydrated_bloc/hydrated_bloc.dart';\n\npart '{{name.snakeCase()}"
  },
  {
    "path": "bricks/hydrated_bloc/__brick__/{{~ equatable_event }}",
    "chars": 188,
    "preview": "part of '{{name.snakeCase()}}_bloc.dart';\n\nsealed class {{name.pascalCase()}}Event extends Equatable {\n  const {{name.pa"
  },
  {
    "path": "bricks/hydrated_bloc/__brick__/{{~ equatable_state }}",
    "chars": 181,
    "preview": "part of '{{name.snakeCase()}}_bloc.dart';\n\nclass {{name.pascalCase()}}State extends Equatable {\n  const {{name.pascalCas"
  },
  {
    "path": "bricks/hydrated_bloc/__brick__/{{~ freezed_bloc }}",
    "chars": 769,
    "preview": "import 'package:freezed_annotation/freezed_annotation.dart';\nimport 'package:hydrated_bloc/hydrated_bloc.dart';\n\npart '{"
  },
  {
    "path": "bricks/hydrated_bloc/__brick__/{{~ freezed_event }}",
    "chars": 188,
    "preview": "part of '{{name.snakeCase()}}_bloc.dart';\n\n@freezed\nclass {{name.pascalCase()}}Event with _${{name.pascalCase()}}Event {"
  },
  {
    "path": "bricks/hydrated_bloc/__brick__/{{~ freezed_state }}",
    "chars": 188,
    "preview": "part of '{{name.snakeCase()}}_bloc.dart';\n\n@freezed\nclass {{name.pascalCase()}}State with _${{name.pascalCase()}}State {"
  },
  {
    "path": "bricks/hydrated_bloc/brick.yaml",
    "chars": 561,
    "preview": "name: hydrated_bloc\ndescription: Generate a new HydratedBloc in Dart. Built for the bloc state management library.\nversi"
  },
  {
    "path": "bricks/hydrated_bloc/hooks/pre_gen.dart",
    "chars": 285,
    "preview": "import 'package:mason/mason.dart';\n\nFuture<void> run(HookContext context) async {\n  final style = context.vars['style'];"
  },
  {
    "path": "bricks/hydrated_bloc/hooks/pubspec.yaml",
    "chars": 86,
    "preview": "name: hydrated_bloc_hooks\n\nenvironment:\n  sdk: ^3.10.0\n\ndependencies:\n  mason: ^0.1.0\n"
  },
  {
    "path": "bricks/hydrated_cubit/CHANGELOG.md",
    "chars": 473,
    "preview": "# 0.3.0\n\n- chore(deps): upgrade to `mason ^0.1.0`\n- chore(deps): upgrade hooks to `dart ^3.5.4`\n\n# 0.2.1\n\n- chore: updat"
  },
  {
    "path": "bricks/hydrated_cubit/LICENSE",
    "chars": 1070,
    "preview": "MIT License\n\nCopyright (c) 2026 Felix Angelov\n\nPermission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "bricks/hydrated_cubit/README.md",
    "chars": 1911,
    "preview": "<p align=\"center\">\n<img style=\"height:100px\" src=\"https://raw.githubusercontent.com/felangel/bloc/master/assets/logos/hy"
  },
  {
    "path": "bricks/hydrated_cubit/__brick__/{{name.snakeCase()}}_cubit.dart",
    "chars": 156,
    "preview": "{{#use_freezed}}{{> freezed_cubit }}{{/use_freezed}}{{#use_equatable}}{{> equatable_cubit }}{{/use_equatable}}{{#use_bas"
  },
  {
    "path": "bricks/hydrated_cubit/__brick__/{{name.snakeCase()}}_state.dart",
    "chars": 156,
    "preview": "{{#use_freezed}}{{> freezed_state }}{{/use_freezed}}{{#use_equatable}}{{> equatable_state }}{{/use_equatable}}{{#use_bas"
  },
  {
    "path": "bricks/hydrated_cubit/__brick__/{{~ basic_cubit }}",
    "chars": 485,
    "preview": "import 'package:hydrated_bloc/hydrated_bloc.dart';\n\npart '{{name.snakeCase()}}_state.dart';\n\nclass {{name.pascalCase()}}"
  },
  {
    "path": "bricks/hydrated_cubit/__brick__/{{~ basic_state }}",
    "chars": 119,
    "preview": "part of '{{name.snakeCase()}}_cubit.dart';\n\nclass {{name.pascalCase()}}State {\n  const {{name.pascalCase()}}State();\n}\n"
  },
  {
    "path": "bricks/hydrated_cubit/__brick__/{{~ equatable_cubit }}",
    "chars": 528,
    "preview": "import 'package:equatable/equatable.dart';\nimport 'package:hydrated_bloc/hydrated_bloc.dart';\n\npart '{{name.snakeCase()}"
  },
  {
    "path": "bricks/hydrated_cubit/__brick__/{{~ equatable_state }}",
    "chars": 182,
    "preview": "part of '{{name.snakeCase()}}_cubit.dart';\n\nclass {{name.pascalCase()}}State extends Equatable {\n  const {{name.pascalCa"
  },
  {
    "path": "bricks/hydrated_cubit/__brick__/{{~ freezed_cubit }}",
    "chars": 602,
    "preview": "import 'package:freezed_annotation/freezed_annotation.dart';\nimport 'package:hydrated_bloc/hydrated_bloc.dart';\n\npart '{"
  },
  {
    "path": "bricks/hydrated_cubit/__brick__/{{~ freezed_state }}",
    "chars": 189,
    "preview": "part of '{{name.snakeCase()}}_cubit.dart';\n\n@freezed\nclass {{name.pascalCase()}}State with _${{name.pascalCase()}}State "
  },
  {
    "path": "bricks/hydrated_cubit/brick.yaml",
    "chars": 568,
    "preview": "name: hydrated_cubit\ndescription: Generate a new HydratedCubit in Dart. Built for the bloc state management library.\nver"
  },
  {
    "path": "bricks/hydrated_cubit/hooks/pre_gen.dart",
    "chars": 285,
    "preview": "import 'package:mason/mason.dart';\n\nFuture<void> run(HookContext context) async {\n  final style = context.vars['style'];"
  },
  {
    "path": "bricks/hydrated_cubit/hooks/pubspec.yaml",
    "chars": 87,
    "preview": "name: hydrated_cubit_hooks\n\nenvironment:\n  sdk: ^3.10.0\n\ndependencies:\n  mason: ^0.1.0\n"
  },
  {
    "path": "bricks/mason.yaml",
    "chars": 284,
    "preview": "bricks:\n  bloc:\n    path: ./bloc\n  cubit:\n    path: ./cubit\n  hydrated_bloc:\n    path: ./hydrated_bloc\n  hydrated_cubit:"
  },
  {
    "path": "bricks/replay_bloc/CHANGELOG.md",
    "chars": 487,
    "preview": "# 0.3.0\n\n- chore(deps): upgrade to `mason ^0.1.0`\n- chore(deps): upgrade hooks to `dart ^3.5.4`\n\n# 0.2.1\n\n- chore: updat"
  },
  {
    "path": "bricks/replay_bloc/LICENSE",
    "chars": 1070,
    "preview": "MIT License\n\nCopyright (c) 2026 Felix Angelov\n\nPermission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "bricks/replay_bloc/README.md",
    "chars": 1910,
    "preview": "<p align=\"center\">\n<img style=\"height:100px\" src=\"https://raw.githubusercontent.com/felangel/bloc/master/assets/logos/re"
  },
  {
    "path": "bricks/replay_bloc/__brick__/{{name.snakeCase()}}_bloc.dart",
    "chars": 153,
    "preview": "{{#use_freezed}}{{> freezed_bloc }}{{/use_freezed}}{{#use_equatable}}{{> equatable_bloc }}{{/use_equatable}}{{#use_basic"
  },
  {
    "path": "bricks/replay_bloc/__brick__/{{name.snakeCase()}}_event.dart",
    "chars": 156,
    "preview": "{{#use_freezed}}{{> freezed_event }}{{/use_freezed}}{{#use_equatable}}{{> equatable_event }}{{/use_equatable}}{{#use_bas"
  },
  {
    "path": "bricks/replay_bloc/__brick__/{{name.snakeCase()}}_state.dart",
    "chars": 156,
    "preview": "{{#use_freezed}}{{> freezed_state }}{{/use_freezed}}{{#use_equatable}}{{> equatable_state }}{{/use_equatable}}{{#use_bas"
  },
  {
    "path": "bricks/replay_bloc/__brick__/{{~ basic_bloc }}",
    "chars": 418,
    "preview": "import 'package:replay_bloc/replay_bloc.dart';\n\npart '{{name.snakeCase()}}_event.dart';\npart '{{name.snakeCase()}}_state"
  },
  {
    "path": "bricks/replay_bloc/__brick__/{{~ basic_event }}",
    "chars": 147,
    "preview": "part of '{{name.snakeCase()}}_bloc.dart';\n\nabstract class {{name.pascalCase()}}Event extends ReplayEvent {\n  const {{nam"
  },
  {
    "path": "bricks/replay_bloc/__brick__/{{~ basic_state }}",
    "chars": 118,
    "preview": "part of '{{name.snakeCase()}}_bloc.dart';\n\nclass {{name.pascalCase()}}State {\n  const {{name.pascalCase()}}State();\n}\n"
  },
  {
    "path": "bricks/replay_bloc/__brick__/{{~ equatable_bloc }}",
    "chars": 461,
    "preview": "import 'package:equatable/equatable.dart';\nimport 'package:replay_bloc/replay_bloc.dart';\n\npart '{{name.snakeCase()}}_ev"
  },
  {
    "path": "bricks/replay_bloc/__brick__/{{~ equatable_event }}",
    "chars": 212,
    "preview": "part of '{{name.snakeCase()}}_bloc.dart';\n\nabstract class {{name.pascalCase()}}Event extends ReplayEvent with EquatableM"
  },
  {
    "path": "bricks/replay_bloc/__brick__/{{~ equatable_state }}",
    "chars": 181,
    "preview": "part of '{{name.snakeCase()}}_bloc.dart';\n\nclass {{name.pascalCase()}}State extends Equatable {\n  const {{name.pascalCas"
  },
  {
    "path": "bricks/replay_bloc/__brick__/{{~ freezed_bloc }}",
    "chars": 534,
    "preview": "import 'package:freezed_annotation/freezed_annotation.dart';\nimport 'package:replay_bloc/replay_bloc.dart';\n\npart '{{nam"
  },
  {
    "path": "bricks/replay_bloc/__brick__/{{~ freezed_event }}",
    "chars": 208,
    "preview": "part of '{{name.snakeCase()}}_bloc.dart';\n\n@freezed\nclass {{name.pascalCase()}}Event extends ReplayEvent with _${{name.p"
  },
  {
    "path": "bricks/replay_bloc/__brick__/{{~ freezed_state }}",
    "chars": 188,
    "preview": "part of '{{name.snakeCase()}}_bloc.dart';\n\n@freezed\nclass {{name.pascalCase()}}State with _${{name.pascalCase()}}State {"
  },
  {
    "path": "bricks/replay_bloc/brick.yaml",
    "chars": 555,
    "preview": "name: replay_bloc\ndescription: Generate a new ReplayBloc in Dart. Built for the bloc state management library.\nversion: "
  },
  {
    "path": "bricks/replay_bloc/hooks/pre_gen.dart",
    "chars": 285,
    "preview": "import 'package:mason/mason.dart';\n\nFuture<void> run(HookContext context) async {\n  final style = context.vars['style'];"
  },
  {
    "path": "bricks/replay_bloc/hooks/pubspec.yaml",
    "chars": 84,
    "preview": "name: replay_bloc_hooks\n\nenvironment:\n  sdk: ^3.10.0\n\ndependencies:\n  mason: ^0.1.0\n"
  },
  {
    "path": "bricks/replay_cubit/CHANGELOG.md",
    "chars": 471,
    "preview": "# 0.3.0\n\n- chore(deps): upgrade to `mason ^0.1.0`\n- chore(deps): upgrade hooks to `dart ^3.5.4`\n\n# 0.2.1\n\n- chore: updat"
  },
  {
    "path": "bricks/replay_cubit/LICENSE",
    "chars": 1070,
    "preview": "MIT License\n\nCopyright (c) 2026 Felix Angelov\n\nPermission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "bricks/replay_cubit/README.md",
    "chars": 1903,
    "preview": "<p align=\"center\">\n<img style=\"height:100px\" src=\"https://raw.githubusercontent.com/felangel/bloc/master/assets/logos/re"
  },
  {
    "path": "bricks/replay_cubit/__brick__/{{name.snakeCase()}}_cubit.dart",
    "chars": 156,
    "preview": "{{#use_freezed}}{{> freezed_cubit }}{{/use_freezed}}{{#use_equatable}}{{> equatable_cubit }}{{/use_equatable}}{{#use_bas"
  },
  {
    "path": "bricks/replay_cubit/__brick__/{{name.snakeCase()}}_state.dart",
    "chars": 156,
    "preview": "{{#use_freezed}}{{> freezed_state }}{{/use_freezed}}{{#use_equatable}}{{> equatable_state }}{{/use_equatable}}{{#use_bas"
  },
  {
    "path": "bricks/replay_cubit/__brick__/{{~ basic_cubit }}",
    "chars": 250,
    "preview": "import 'package:replay_bloc/replay_bloc.dart';\n\npart '{{name.snakeCase()}}_state.dart';\n\nclass {{name.pascalCase()}}Cubi"
  },
  {
    "path": "bricks/replay_cubit/__brick__/{{~ basic_state }}",
    "chars": 119,
    "preview": "part of '{{name.snakeCase()}}_cubit.dart';\n\nclass {{name.pascalCase()}}State {\n  const {{name.pascalCase()}}State();\n}\n"
  },
  {
    "path": "bricks/replay_cubit/__brick__/{{~ equatable_cubit }}",
    "chars": 293,
    "preview": "import 'package:equatable/equatable.dart';\nimport 'package:replay_bloc/replay_bloc.dart';\n\npart '{{name.snakeCase()}}_st"
  },
  {
    "path": "bricks/replay_cubit/__brick__/{{~ equatable_state }}",
    "chars": 182,
    "preview": "part of '{{name.snakeCase()}}_cubit.dart';\n\nclass {{name.pascalCase()}}State extends Equatable {\n  const {{name.pascalCa"
  },
  {
    "path": "bricks/replay_cubit/__brick__/{{~ freezed_cubit }}",
    "chars": 367,
    "preview": "import 'package:freezed_annotation/freezed_annotation.dart';\nimport 'package:replay_bloc/replay_bloc.dart';\n\npart '{{nam"
  },
  {
    "path": "bricks/replay_cubit/__brick__/{{~ freezed_state }}",
    "chars": 189,
    "preview": "part of '{{name.snakeCase()}}_cubit.dart';\n\n@freezed\nclass {{name.pascalCase()}}State with _${{name.pascalCase()}}State "
  },
  {
    "path": "bricks/replay_cubit/brick.yaml",
    "chars": 562,
    "preview": "name: replay_cubit\ndescription: Generate a new ReplayCubit in Dart. Built for the bloc state management library.\nversion"
  },
  {
    "path": "bricks/replay_cubit/hooks/pre_gen.dart",
    "chars": 285,
    "preview": "import 'package:mason/mason.dart';\n\nFuture<void> run(HookContext context) async {\n  final style = context.vars['style'];"
  },
  {
    "path": "bricks/replay_cubit/hooks/pubspec.yaml",
    "chars": 85,
    "preview": "name: replay_cubit_hooks\n\nenvironment:\n  sdk: ^3.10.0\n\ndependencies:\n  mason: ^0.1.0\n"
  },
  {
    "path": "docs/.gitignore",
    "chars": 250,
    "preview": "# build output\ndist/\n# generated types\n.astro/\n\n# dependencies\nnode_modules/\n\n# logs\nnpm-debug.log*\nyarn-debug.log*\nyarn"
  },
  {
    "path": "docs/.prettierignore",
    "chars": 23,
    "preview": "src/components/**/*.mdx"
  },
  {
    "path": "docs/.prettierrc",
    "chars": 373,
    "preview": "{\n  \"printWidth\": 100,\n  \"semi\": true,\n  \"singleQuote\": true,\n  \"tabWidth\": 2,\n  \"trailingComma\": \"es5\",\n  \"useTabs\": tr"
  },
  {
    "path": "docs/astro.config.mjs",
    "chars": 8920,
    "preview": "import { defineConfig } from 'astro/config';\nimport starlight from '@astrojs/starlight';\nimport starlightLinksValidator "
  },
  {
    "path": "docs/package.json",
    "chars": 853,
    "preview": "{\n  \"name\": \"docs\",\n  \"type\": \"module\",\n  \"version\": \"0.0.1\",\n  \"scripts\": {\n    \"dev\": \"astro dev\",\n    \"start\": \"astro"
  },
  {
    "path": "docs/public/CNAME",
    "chars": 15,
    "preview": "bloclibrary.dev"
  },
  {
    "path": "docs/src/components/architecture/AppIdeaRankingBlocSnippet.astro",
    "chars": 776,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nclass AppIdeaRankingBloc\n    extends Bloc<AppI"
  },
  {
    "path": "docs/src/components/architecture/AppIdeasRepositorySnippet.astro",
    "chars": 782,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nclass AppIdeasRepository {\n  int _currentAppId"
  },
  {
    "path": "docs/src/components/architecture/BlocLooseCouplingPresentationSnippet.astro",
    "chars": 792,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nclass MyWidget extends StatelessWidget {\n  con"
  },
  {
    "path": "docs/src/components/architecture/BlocTightCouplingSnippet.astro",
    "chars": 638,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nclass TightlyCoupledBloc extends Bloc {\n  fina"
  },
  {
    "path": "docs/src/components/architecture/BusinessLogicComponentSnippet.astro",
    "chars": 578,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nclass BusinessLogicComponent extends Bloc<MyEv"
  },
  {
    "path": "docs/src/components/architecture/DataProviderSnippet.astro",
    "chars": 265,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nclass DataProvider {\n    Future<RawData> readD"
  },
  {
    "path": "docs/src/components/architecture/PresentationComponentSnippet.astro",
    "chars": 337,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nclass PresentationComponent {\n  PresentationCo"
  },
  {
    "path": "docs/src/components/architecture/RepositorySnippet.astro",
    "chars": 533,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nclass Repository {\n    final DataProviderA dat"
  },
  {
    "path": "docs/src/components/code/RemoteCode.astro",
    "chars": 471,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\nimport { z } from 'astro/zod';\n\ninterface Props {\n\ttitle: stri"
  },
  {
    "path": "docs/src/components/concepts/bloc/AuthenticationChangeSnippet.astro",
    "chars": 224,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nChange {\n  currentState: AuthenticationState.a"
  },
  {
    "path": "docs/src/components/concepts/bloc/AuthenticationStateSnippet.astro",
    "chars": 218,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nenum AuthenticationState { unknown, authentica"
  },
  {
    "path": "docs/src/components/concepts/bloc/AuthenticationTransitionSnippet.astro",
    "chars": 254,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nTransition {\n  currentState: AuthenticationSta"
  },
  {
    "path": "docs/src/components/concepts/bloc/CountStreamSnippet.astro",
    "chars": 244,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nStream<int> countStream(int max) async* {\n    "
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterBlocEventHandlerSnippet.astro",
    "chars": 434,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nsealed class CounterEvent {}\n\nfinal class Coun"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterBlocFullSnippet.astro",
    "chars": 385,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nsealed class CounterEvent {}\nfinal class Count"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterBlocIncrementSnippet.astro",
    "chars": 398,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nsealed class CounterEvent {}\n\nfinal class Coun"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterBlocOnChangeOutputSnippet.astro",
    "chars": 154,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nChange { currentState: 0, nextState: 1 }\n`;\n--"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterBlocOnChangeSnippet.astro",
    "chars": 488,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nsealed class CounterEvent {}\n\nfinal class Coun"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterBlocOnChangeUsageSnippet.astro",
    "chars": 217,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nvoid main() {\n  CounterBloc()\n    ..add(Counte"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterBlocOnErrorOutputSnippet.astro",
    "chars": 3803,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nException: increment error!\n#0      new Counte"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterBlocOnErrorSnippet.astro",
    "chars": 850,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nsealed class CounterEvent {}\n\nfinal class Coun"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterBlocOnEventSnippet.astro",
    "chars": 726,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nsealed class CounterEvent {}\n\nfinal class Coun"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterBlocOnTransitionOutputSnippet.astro",
    "chars": 245,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nTransition { currentState: 0, event: Instance "
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterBlocOnTransitionSnippet.astro",
    "chars": 628,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nsealed class CounterEvent {}\n\nfinal class Coun"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterBlocSnippet.astro",
    "chars": 314,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nsealed class CounterEvent {}\n\nfinal class Coun"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterBlocStreamUsageSnippet.astro",
    "chars": 379,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nFuture<void> main() async {\n  final bloc = Cou"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterBlocUsageSnippet.astro",
    "chars": 345,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nFuture<void> main() async {\n  final bloc = Cou"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterCubitBasicUsageSnippet.astro",
    "chars": 273,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nvoid main() {\n  final cubit = CounterCubit();\n"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterCubitFullSnippet.astro",
    "chars": 253,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nclass CounterCubit extends Cubit<int> {\n  Coun"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterCubitIncrementSnippet.astro",
    "chars": 253,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nclass CounterCubit extends Cubit<int> {\n  Coun"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterCubitInitialStateSnippet.astro",
    "chars": 240,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nclass CounterCubit extends Cubit<int> {\n  Coun"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterCubitInstantiationSnippet.astro",
    "chars": 241,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nfinal cubitA = CounterCubit(0); // state start"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterCubitOnChangeOutputSnippet.astro",
    "chars": 154,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nChange { currentState: 0, nextState: 1 }\n`;\n--"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterCubitOnChangeSnippet.astro",
    "chars": 355,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nclass CounterCubit extends Cubit<int> {\n  Coun"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterCubitOnChangeUsageSnippet.astro",
    "chars": 199,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nvoid main() {\n  CounterCubit()\n    ..increment"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterCubitOnErrorOutputSnippet.astro",
    "chars": 843,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nException: increment error!\n#0      CounterCub"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterCubitOnErrorSnippet.astro",
    "chars": 570,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nclass CounterCubit extends Cubit<int> {\n  Coun"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterCubitSnippet.astro",
    "chars": 213,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nclass CounterCubit extends Cubit<int> {\n  Coun"
  },
  {
    "path": "docs/src/components/concepts/bloc/CounterCubitStreamUsageSnippet.astro",
    "chars": 365,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nFuture<void> main() async {\n  final cubit = Co"
  },
  {
    "path": "docs/src/components/concepts/bloc/DebounceEventTransformerSnippet.astro",
    "chars": 495,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nEventTransformer<T> debounce<T>(Duration durat"
  },
  {
    "path": "docs/src/components/concepts/bloc/SimpleBlocObserverOnChangeOutputSnippet.astro",
    "chars": 208,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nCounterCubit Change { currentState: 0, nextSta"
  },
  {
    "path": "docs/src/components/concepts/bloc/SimpleBlocObserverOnChangeSnippet.astro",
    "chars": 340,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nclass SimpleBlocObserver extends BlocObserver "
  },
  {
    "path": "docs/src/components/concepts/bloc/SimpleBlocObserverOnChangeUsageSnippet.astro",
    "chars": 241,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nvoid main() {\n  Bloc.observer = SimpleBlocObse"
  },
  {
    "path": "docs/src/components/concepts/bloc/SimpleBlocObserverOnErrorSnippet.astro",
    "chars": 524,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nclass SimpleBlocObserver extends BlocObserver "
  },
  {
    "path": "docs/src/components/concepts/bloc/SimpleBlocObserverOnEventOutputSnippet.astro",
    "chars": 489,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nCounterBloc Instance of 'CounterIncrementPress"
  },
  {
    "path": "docs/src/components/concepts/bloc/SimpleBlocObserverOnEventSnippet.astro",
    "chars": 636,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nclass SimpleBlocObserver extends BlocObserver "
  },
  {
    "path": "docs/src/components/concepts/bloc/SimpleBlocObserverOnTransitionOutputSnippet.astro",
    "chars": 401,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nCounterBloc Transition { currentState: 0, even"
  },
  {
    "path": "docs/src/components/concepts/bloc/SimpleBlocObserverOnTransitionSnippet.astro",
    "chars": 686,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nclass SimpleBlocObserver extends BlocObserver "
  },
  {
    "path": "docs/src/components/concepts/bloc/SimpleBlocObserverOnTransitionUsageSnippet.astro",
    "chars": 259,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nvoid main() {\n  Bloc.observer = SimpleBlocObse"
  },
  {
    "path": "docs/src/components/concepts/bloc/StreamsMainSnippet.astro",
    "chars": 374,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nvoid main() async {\n    /// Initialize a strea"
  },
  {
    "path": "docs/src/components/concepts/bloc/SumStreamSnippet.astro",
    "chars": 290,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nFuture<int> sumStream(Stream<int> stream) asyn"
  },
  {
    "path": "docs/src/components/concepts/flutter-bloc/BlocBuilderConditionSnippet.astro",
    "chars": 370,
    "preview": "---\nimport { Code } from '@astrojs/starlight/components';\n\nconst code = `\nBlocBuilder<BlocA, BlocAState>(\n  buildWhen: ("
  }
]

// ... and 1497 more files (download for full content)

About this extraction

This page contains the full source code of the felangel/bloc GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1697 files (4.3 MB), approximately 1.2M tokens, and a symbol index with 2163 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!