├── .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 ├── assets ├── diagrams │ ├── bloc_architecture.png │ ├── bloc_architecture_full.png │ ├── bloc_concurrency.png │ ├── bloc_flow.png │ ├── cubit_architecture_full.png │ └── cubit_flow.png ├── examples │ ├── flutter_counter.gif │ ├── flutter_firebase_login.gif │ ├── flutter_github_search.gif │ ├── flutter_infinite_list.gif │ ├── flutter_todos.gif │ └── flutter_weather.gif ├── logos │ ├── angular_bloc.png │ ├── bloc.png │ ├── bloc_concurrency.png │ ├── bloc_dark.png │ ├── bloc_lint.png │ ├── bloc_test.png │ ├── bloc_tools.png │ ├── cubit_dark.png │ ├── flutter_bloc.png │ ├── hydrated_bloc.png │ ├── hydrated_bloc_dark.png │ ├── hydrated_cubit_dark.png │ ├── replay_bloc.png │ ├── replay_bloc_dark.png │ └── replay_cubit_dark.png ├── pub │ └── flutter_favorite.png └── sponsors │ ├── rettel.png │ ├── shorebird.png │ └── stream.png ├── 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-lock.json ├── package.json ├── public │ ├── CNAME │ ├── favicon.ico │ └── og.png ├── src │ ├── assets │ │ ├── architecture │ │ │ ├── architecture.png │ │ │ └── bloc_architecture_full.png │ │ ├── bloc.svg │ │ ├── concepts │ │ │ ├── bloc_architecture_full.png │ │ │ └── cubit_architecture_full.png │ │ ├── dark-bloc-logo.svg │ │ ├── light-bloc-logo.svg │ │ ├── sponsors │ │ │ ├── miquido.png │ │ │ ├── monterail.png │ │ │ ├── netguru.png │ │ │ ├── rettel.png │ │ │ ├── shorebird-dark.png │ │ │ ├── shorebird-light.png │ │ │ └── stream.png │ │ └── tutorials │ │ │ ├── flutter-counter.gif │ │ │ ├── flutter-firebase-login.gif │ │ │ ├── flutter-github-search.gif │ │ │ ├── flutter-infinite-list.gif │ │ │ ├── flutter-login.gif │ │ │ ├── flutter-timer.gif │ │ │ ├── flutter-todos.gif │ │ │ ├── flutter-weather.gif │ │ │ ├── ngdart-counter.gif │ │ │ ├── ngdart-github-search.gif │ │ │ └── todos-architecture.png │ ├── 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-rules │ │ │ ├── EnableRuleSnippet.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_cubit │ │ │ │ ├── BadSnippet.mdx │ │ │ │ └── GoodSnippet.astro │ │ │ └── prefer_void_public_cubit_methods │ │ │ │ ├── BadSnippet.mdx │ │ │ │ └── GoodSnippet.astro │ │ ├── lint │ │ │ ├── BlocLintBasicAnalysisOptionsSnippet.astro │ │ │ ├── BlocLintChangingSeveritySnippet.astro │ │ │ ├── BlocLintDisablingRulesSnippet.astro │ │ │ ├── BlocLintEnablingRulesSnippet.astro │ │ │ ├── BlocLintExcludingFilesSnippet.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 │ │ ├── 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 │ │ │ ├── getting-started.mdx │ │ │ └── index.mdx │ │ │ ├── architecture.mdx │ │ │ ├── bloc-concepts.mdx │ │ │ ├── de │ │ │ └── index.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 │ │ │ ├── getting-started.mdx │ │ │ ├── index.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 │ │ │ ├── ko │ │ │ ├── architecture.mdx │ │ │ ├── bloc-concepts.mdx │ │ │ ├── faqs.mdx │ │ │ ├── flutter-bloc-concepts.mdx │ │ │ ├── getting-started.mdx │ │ │ ├── index.mdx │ │ │ ├── naming-conventions.mdx │ │ │ ├── testing.mdx │ │ │ └── why-bloc.mdx │ │ │ ├── lint-rules │ │ │ ├── avoid_flutter_imports.mdx │ │ │ ├── avoid_public_bloc_methods.mdx │ │ │ ├── avoid_public_fields.mdx │ │ │ ├── prefer_bloc.mdx │ │ │ ├── prefer_cubit.mdx │ │ │ └── prefer_void_public_cubit_methods.mdx │ │ │ ├── lint │ │ │ ├── configuration.mdx │ │ │ ├── customizing-rules.mdx │ │ │ ├── index.mdx │ │ │ └── installation.mdx │ │ │ ├── migration.mdx │ │ │ ├── modeling-state.mdx │ │ │ ├── naming-conventions.mdx │ │ │ ├── pt-br │ │ │ ├── architecture.mdx │ │ │ ├── bloc-concepts.mdx │ │ │ ├── getting-started.mdx │ │ │ ├── index.mdx │ │ │ ├── modeling-state.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 │ │ │ ├── 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 │ │ ├── favicon.png │ │ ├── index.html │ │ ├── main.dart │ │ └── styles.css ├── flutter_bloc_with_stream │ ├── .gitignore │ ├── .metadata │ ├── README.md │ ├── analysis_options.yaml │ ├── 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 │ │ ├── favicon.png │ │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ │ ├── index.html │ │ └── manifest.json ├── flutter_complex_list │ ├── .gitignore │ ├── .metadata │ ├── README.md │ ├── analysis_options.yaml │ ├── 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 │ │ ├── favicon.png │ │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ │ ├── 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 │ │ ├── favicon.png │ │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ │ ├── index.html │ │ └── manifest.json ├── flutter_dynamic_form │ ├── .gitignore │ ├── .metadata │ ├── README.md │ ├── analysis_options.yaml │ ├── 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 │ │ ├── favicon.png │ │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ │ ├── index.html │ │ └── manifest.json ├── flutter_firebase_login │ ├── .gitignore │ ├── .metadata │ ├── README.md │ ├── analysis_options.yaml │ ├── android │ │ ├── .gitignore │ │ ├── app │ │ │ ├── build.gradle │ │ │ ├── google-services.json │ │ │ └── src │ │ │ │ ├── debug │ │ │ │ └── AndroidManifest.xml │ │ │ │ ├── main │ │ │ │ ├── AndroidManifest.xml │ │ │ │ ├── kotlin │ │ │ │ │ └── com │ │ │ │ │ │ └── example │ │ │ │ │ │ └── flutter_firebase_login │ │ │ │ │ │ └── MainActivity.kt │ │ │ │ └── res │ │ │ │ │ ├── drawable-v21 │ │ │ │ │ └── launch_background.xml │ │ │ │ │ ├── drawable │ │ │ │ │ └── launch_background.xml │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── values-night │ │ │ │ │ └── styles.xml │ │ │ │ │ └── values │ │ │ │ │ └── styles.xml │ │ │ │ └── profile │ │ │ │ └── AndroidManifest.xml │ │ ├── build.gradle │ │ ├── gradle.properties │ │ ├── gradle │ │ │ └── wrapper │ │ │ │ └── gradle-wrapper.properties │ │ └── settings.gradle │ ├── assets │ │ └── bloc_logo_small.png │ ├── ios │ │ ├── .gitignore │ │ ├── Flutter │ │ │ ├── AppFrameworkInfo.plist │ │ │ ├── Debug.xcconfig │ │ │ └── Release.xcconfig │ │ ├── Podfile │ │ ├── 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 │ │ ├── Runner │ │ │ ├── AppDelegate.swift │ │ │ ├── Assets.xcassets │ │ │ │ ├── AppIcon.appiconset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ │ │ ├── Icon-App-20x20@1x.png │ │ │ │ │ ├── Icon-App-20x20@2x.png │ │ │ │ │ ├── Icon-App-20x20@3x.png │ │ │ │ │ ├── Icon-App-29x29@1x.png │ │ │ │ │ ├── Icon-App-29x29@2x.png │ │ │ │ │ ├── Icon-App-29x29@3x.png │ │ │ │ │ ├── Icon-App-40x40@1x.png │ │ │ │ │ ├── Icon-App-40x40@2x.png │ │ │ │ │ ├── Icon-App-40x40@3x.png │ │ │ │ │ ├── Icon-App-60x60@2x.png │ │ │ │ │ ├── Icon-App-60x60@3x.png │ │ │ │ │ ├── Icon-App-76x76@1x.png │ │ │ │ │ ├── Icon-App-76x76@2x.png │ │ │ │ │ └── Icon-App-83.5x83.5@2x.png │ │ │ │ └── LaunchImage.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── LaunchImage.png │ │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ │ └── README.md │ │ │ ├── Base.lproj │ │ │ │ ├── LaunchScreen.storyboard │ │ │ │ └── Main.storyboard │ │ │ ├── GoogleService-Info.plist │ │ │ ├── Info.plist │ │ │ └── Runner-Bridging-Header.h │ │ └── 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 │ │ ├── generated_plugin_registrant.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 │ ├── 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 │ │ ├── favicon.png │ │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ │ ├── index.html │ │ └── manifest.json ├── flutter_infinite_list │ ├── .gitignore │ ├── .metadata │ ├── README.md │ ├── analysis_options.yaml │ ├── 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 │ ├── 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 │ │ ├── favicon.png │ │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ │ ├── index.html │ │ └── manifest.json ├── flutter_login │ ├── .gitignore │ ├── .metadata │ ├── README.md │ ├── analysis_options.yaml │ ├── 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 │ │ ├── favicon.png │ │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ │ ├── index.html │ │ └── manifest.json ├── flutter_shopping_cart │ ├── .gitignore │ ├── .metadata │ ├── README.md │ ├── analysis_options.yaml │ ├── 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 │ ├── 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 │ │ ├── favicon.png │ │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ │ ├── index.html │ │ └── manifest.json ├── flutter_timer │ ├── .gitignore │ ├── .metadata │ ├── README.md │ ├── analysis_options.yaml │ ├── lib │ │ ├── app.dart │ │ ├── main.dart │ │ ├── ticker.dart │ │ └── timer │ │ │ ├── bloc │ │ │ ├── timer_bloc.dart │ │ │ ├── timer_event.dart │ │ │ └── timer_state.dart │ │ │ ├── timer.dart │ │ │ └── view │ │ │ └── timer_page.dart │ ├── 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 │ │ ├── favicon.png │ │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ │ ├── index.html │ │ └── manifest.json ├── flutter_todos │ ├── .gitignore │ ├── .metadata │ ├── .vscode │ │ └── launch.json │ ├── LICENSE │ ├── README.md │ ├── analysis_options.yaml │ ├── ios │ │ └── 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.lock │ ├── 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 │ │ ├── favicon.png │ │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ │ ├── index.html │ │ └── manifest.json ├── flutter_weather │ ├── .gitignore │ ├── .metadata │ ├── README.md │ ├── analysis_options.yaml │ ├── assets │ │ ├── clear.png │ │ ├── cloudy.png │ │ ├── rainy.png │ │ ├── snow.png │ │ └── thunderstorm.png │ ├── build.yaml │ ├── 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 │ ├── 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 │ │ ├── favicon.png │ │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ │ ├── index.html │ │ └── manifest.json ├── flutter_wizard │ ├── .gitignore │ ├── .metadata │ ├── README.md │ ├── analysis_options.yaml │ ├── lib │ │ ├── bloc │ │ │ ├── profile_wizard_bloc.dart │ │ │ ├── profile_wizard_event.dart │ │ │ └── profile_wizard_state.dart │ │ └── main.dart │ ├── pubspec.yaml │ ├── pubspec_overrides.yaml │ └── web │ │ ├── favicon.png │ │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ │ ├── 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 │ │ ├── favicon.png │ │ ├── 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 │ ├── lib │ ├── main.dart │ └── search_form.dart │ ├── pubspec.yaml │ ├── pubspec_overrides.yaml │ └── web │ ├── favicon.png │ ├── icons │ ├── Icon-192.png │ ├── Icon-512.png │ ├── Icon-maskable-192.png │ └── Icon-maskable-512.png │ ├── index.html │ └── manifest.json ├── extensions ├── intellij │ ├── README.md │ ├── assets │ │ ├── dialog.png │ │ ├── equatable_props_override.png │ │ └── intention_settings.png │ └── intellij_generator_plugin │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── gradle.properties │ │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.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 │ │ │ │ ├── live_templates │ │ │ │ └── BlocContext.kt │ │ │ │ └── util │ │ │ │ ├── BlocPluginNotification.kt │ │ │ │ ├── CommandLineHelper.kt │ │ │ │ ├── MultiplatformCommandLine.kt │ │ │ │ └── VersionComparator.kt │ │ └── resources │ │ │ ├── META-INF │ │ │ ├── plugin.xml │ │ │ └── pluginIcon.svg │ │ │ ├── icons │ │ │ ├── bloc.png │ │ │ └── cubit.png │ │ │ ├── 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 │ │ └── test │ │ └── kotlin │ │ └── com │ │ └── bloc │ │ └── intellij_generator_plugin │ │ └── util │ │ └── VersionComparatorTest.kt └── vscode │ ├── .gitignore │ ├── .vscode │ └── launch.json │ ├── .vscodeignore │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── assets │ ├── logo.png │ ├── new-bloc-usage.gif │ └── wrap-with-usage.gif │ ├── package-lock.json │ ├── 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 └── 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 ├── screenshots │ └── logo.png └── 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 ├── screenshots │ └── logo.png └── 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 ├── screenshots │ └── logo.png └── 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_flutter_imports.dart │ │ ├── avoid_public_bloc_methods.dart │ │ ├── avoid_public_fields.dart │ │ ├── prefer_bloc_lint.dart │ │ ├── prefer_cubit_lint.dart │ │ ├── prefer_void_public_cubit_methods.dart │ │ └── rules.dart │ │ └── text_document.dart ├── pubspec.yaml ├── screenshots │ └── logo.png └── test │ └── src │ ├── analysis_options_test.dart │ ├── diagnostic_test.dart │ ├── lint_test_helper.dart │ ├── linter_test.dart │ ├── rules │ ├── avoid_flutter_imports_test.dart │ ├── avoid_public_bloc_methods_test.dart │ ├── avoid_public_fields_test.dart │ ├── prefer_bloc_lint_test.dart │ ├── prefer_cubit_lint_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 ├── screenshots │ └── logo.png └── test │ ├── bloc_bloc_test_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 ├── screenshots │ └── logo.png └── 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 │ │ ├── favicon.png │ │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ │ ├── 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 ├── screenshots │ └── logo.png └── 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 │ └── general.svg ├── build.yaml ├── example │ ├── .gitignore │ ├── .metadata │ ├── README.md │ ├── analysis_options.yaml │ ├── lib │ │ └── main.dart │ ├── pubspec.yaml │ ├── pubspec_overrides.yaml │ └── web │ │ ├── favicon.png │ │ ├── icons │ │ ├── Icon-192.png │ │ ├── Icon-512.png │ │ ├── Icon-maskable-192.png │ │ └── Icon-maskable-512.png │ │ ├── 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 ├── screenshots │ └── logo.png └── 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 │ └── 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_storage_test.dart └── replay_bloc ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── analysis_options.yaml ├── coverage_badge.svg ├── example ├── .gitignore ├── .metadata ├── README.md ├── analysis_options.yaml ├── lib │ └── main.dart ├── pubspec.yaml ├── pubspec_overrides.yaml └── web │ ├── favicon.png │ ├── icons │ ├── Icon-192.png │ ├── Icon-512.png │ ├── Icon-maskable-192.png │ └── Icon-maskable-512.png │ ├── index.html │ └── manifest.json ├── lib ├── replay_bloc.dart └── src │ ├── change_stack.dart │ ├── replay_bloc.dart │ └── replay_cubit.dart ├── pubspec.yaml ├── pubspec_overrides.yaml ├── screenshots └── logo.png └── test ├── blocs └── counter_bloc.dart ├── cubits └── counter_cubit.dart ├── main.dart ├── replay_bloc_test.dart └── replay_cubit_test.dart /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Every request must be reviewed and accepted by: 2 | 3 | * @felangel -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [felangel] 2 | patreon: felangel 3 | open_collective: bloc 4 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/build.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Build System 3 | about: Changes that affect the build system or external dependencies 4 | title: "build: " 5 | labels: build 6 | --- 7 | 8 | **Description** 9 | 10 | Describe what changes need to be done to the build system and why 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/chore.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Chore 3 | about: Other changes that don't modify src or test files 4 | title: "chore: " 5 | labels: chore 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what change is needed and why. If this changes code then please use another issue type. 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/ci.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Continuous Integration 3 | about: Changes to the CI configuration files and scripts 4 | title: "ci: " 5 | labels: ci 6 | --- 7 | 8 | **Description** 9 | 10 | Describe what changes need to be done to the ci/cd system and why 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/documentation.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Documentation 3 | about: Improve the documentation so all collaborators have a common understanding 4 | title: "docs: " 5 | labels: documentation 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what documentation you are looking to add or improve. 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/performance.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Performance Update 3 | about: A code change that improves performance 4 | title: "perf: " 5 | labels: performance 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what code needs to be changed and what the performance impact is going to be. 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/refactor.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Refactor 3 | about: A code change that neither fixes a bug nor adds a feature 4 | title: "refactor: " 5 | labels: refactor 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what needs to be refactored any why. Please provide links to related issues (bugs or upcoming features) in order to help prioritize. 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/revert.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Revert Commit 3 | about: Reverts a previous commit 4 | title: "revert: " 5 | labels: revert 6 | --- 7 | 8 | **Description** 9 | 10 | Provide a link to a PR/Commit that you are looking to revert and why. 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/style.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Style Changes 3 | about: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc) 4 | title: "style: " 5 | labels: style 6 | --- 7 | 8 | **Description** 9 | 10 | Clearly describe what you are looking to change and why. 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/test.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Test 3 | about: Adding missing tests or correcting existing tests 4 | title: "test: " 5 | labels: test 6 | --- 7 | 8 | **Description** 9 | 10 | 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. 11 | -------------------------------------------------------------------------------- /.github/codecov.yml: -------------------------------------------------------------------------------- 1 | flag_management: 2 | default_rules: 3 | carryforward: true 4 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "daily" 7 | groups: 8 | github_actions: 9 | patterns: 10 | - "*" 11 | -------------------------------------------------------------------------------- /assets/diagrams/bloc_architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/diagrams/bloc_architecture.png -------------------------------------------------------------------------------- /assets/diagrams/bloc_architecture_full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/diagrams/bloc_architecture_full.png -------------------------------------------------------------------------------- /assets/diagrams/bloc_concurrency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/diagrams/bloc_concurrency.png -------------------------------------------------------------------------------- /assets/diagrams/bloc_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/diagrams/bloc_flow.png -------------------------------------------------------------------------------- /assets/diagrams/cubit_architecture_full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/diagrams/cubit_architecture_full.png -------------------------------------------------------------------------------- /assets/diagrams/cubit_flow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/diagrams/cubit_flow.png -------------------------------------------------------------------------------- /assets/examples/flutter_counter.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/examples/flutter_counter.gif -------------------------------------------------------------------------------- /assets/examples/flutter_firebase_login.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/examples/flutter_firebase_login.gif -------------------------------------------------------------------------------- /assets/examples/flutter_github_search.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/examples/flutter_github_search.gif -------------------------------------------------------------------------------- /assets/examples/flutter_infinite_list.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/examples/flutter_infinite_list.gif -------------------------------------------------------------------------------- /assets/examples/flutter_todos.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/examples/flutter_todos.gif -------------------------------------------------------------------------------- /assets/examples/flutter_weather.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/examples/flutter_weather.gif -------------------------------------------------------------------------------- /assets/logos/angular_bloc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/logos/angular_bloc.png -------------------------------------------------------------------------------- /assets/logos/bloc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/logos/bloc.png -------------------------------------------------------------------------------- /assets/logos/bloc_concurrency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/logos/bloc_concurrency.png -------------------------------------------------------------------------------- /assets/logos/bloc_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/logos/bloc_dark.png -------------------------------------------------------------------------------- /assets/logos/bloc_lint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/logos/bloc_lint.png -------------------------------------------------------------------------------- /assets/logos/bloc_test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/logos/bloc_test.png -------------------------------------------------------------------------------- /assets/logos/bloc_tools.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/logos/bloc_tools.png -------------------------------------------------------------------------------- /assets/logos/cubit_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/logos/cubit_dark.png -------------------------------------------------------------------------------- /assets/logos/flutter_bloc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/logos/flutter_bloc.png -------------------------------------------------------------------------------- /assets/logos/hydrated_bloc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/logos/hydrated_bloc.png -------------------------------------------------------------------------------- /assets/logos/hydrated_bloc_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/logos/hydrated_bloc_dark.png -------------------------------------------------------------------------------- /assets/logos/hydrated_cubit_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/logos/hydrated_cubit_dark.png -------------------------------------------------------------------------------- /assets/logos/replay_bloc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/logos/replay_bloc.png -------------------------------------------------------------------------------- /assets/logos/replay_bloc_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/logos/replay_bloc_dark.png -------------------------------------------------------------------------------- /assets/logos/replay_cubit_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/logos/replay_cubit_dark.png -------------------------------------------------------------------------------- /assets/pub/flutter_favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/pub/flutter_favorite.png -------------------------------------------------------------------------------- /assets/sponsors/rettel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/sponsors/rettel.png -------------------------------------------------------------------------------- /assets/sponsors/shorebird.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/sponsors/shorebird.png -------------------------------------------------------------------------------- /assets/sponsors/stream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/assets/sponsors/stream.png -------------------------------------------------------------------------------- /bricks/bloc/__brick__/{{name.snakeCase()}}_bloc.dart: -------------------------------------------------------------------------------- 1 | {{#use_freezed}}{{> freezed_bloc }}{{/use_freezed}}{{#use_equatable}}{{> equatable_bloc }}{{/use_equatable}}{{#use_basic}}{{> basic_bloc }}{{/use_basic}} -------------------------------------------------------------------------------- /bricks/bloc/__brick__/{{name.snakeCase()}}_event.dart: -------------------------------------------------------------------------------- 1 | {{#use_freezed}}{{> freezed_event }}{{/use_freezed}}{{#use_equatable}}{{> equatable_event }}{{/use_equatable}}{{#use_basic}}{{> basic_event }}{{/use_basic}} -------------------------------------------------------------------------------- /bricks/bloc/__brick__/{{name.snakeCase()}}_state.dart: -------------------------------------------------------------------------------- 1 | {{#use_freezed}}{{> freezed_state }}{{/use_freezed}}{{#use_equatable}}{{> equatable_state }}{{/use_equatable}}{{#use_basic}}{{> basic_state }}{{/use_basic}} -------------------------------------------------------------------------------- /bricks/bloc/__brick__/{{~ basic_event }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_bloc.dart'; 2 | 3 | sealed class {{name.pascalCase()}}Event { 4 | const {{name.pascalCase()}}Event(); 5 | } 6 | -------------------------------------------------------------------------------- /bricks/bloc/__brick__/{{~ basic_state }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_bloc.dart'; 2 | 3 | class {{name.pascalCase()}}State { 4 | const {{name.pascalCase()}}State(); 5 | } 6 | -------------------------------------------------------------------------------- /bricks/bloc/__brick__/{{~ equatable_event }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_bloc.dart'; 2 | 3 | sealed class {{name.pascalCase()}}Event extends Equatable { 4 | const {{name.pascalCase()}}Event(); 5 | 6 | @override 7 | List get props => []; 8 | } 9 | -------------------------------------------------------------------------------- /bricks/bloc/__brick__/{{~ equatable_state }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_bloc.dart'; 2 | 3 | class {{name.pascalCase()}}State extends Equatable { 4 | const {{name.pascalCase()}}State(); 5 | 6 | @override 7 | List get props => []; 8 | } 9 | -------------------------------------------------------------------------------- /bricks/bloc/__brick__/{{~ freezed_event }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_bloc.dart'; 2 | 3 | @freezed 4 | class {{name.pascalCase()}}Event with _${{name.pascalCase()}}Event { 5 | const factory {{name.pascalCase()}}Event.started() = _Started; 6 | } 7 | -------------------------------------------------------------------------------- /bricks/bloc/__brick__/{{~ freezed_state }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_bloc.dart'; 2 | 3 | @freezed 4 | class {{name.pascalCase()}}State with _${{name.pascalCase()}}State { 5 | const factory {{name.pascalCase()}}State.initial() = _Initial; 6 | } 7 | -------------------------------------------------------------------------------- /bricks/bloc/hooks/pre_gen.dart: -------------------------------------------------------------------------------- 1 | import 'package:mason/mason.dart'; 2 | 3 | Future run(HookContext context) async { 4 | final style = context.vars['style']; 5 | context.vars = { 6 | ...context.vars, 7 | 'use_basic': style == 'basic', 8 | 'use_equatable': style == 'equatable', 9 | 'use_freezed': style == 'freezed', 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /bricks/bloc/hooks/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: bloc_hooks 2 | 3 | environment: 4 | sdk: ^3.5.4 5 | 6 | dependencies: 7 | mason: ^0.1.0 8 | -------------------------------------------------------------------------------- /bricks/cubit/__brick__/{{name.snakeCase()}}_cubit.dart: -------------------------------------------------------------------------------- 1 | {{#use_freezed}}{{> freezed_cubit }}{{/use_freezed}}{{#use_equatable}}{{> equatable_cubit }}{{/use_equatable}}{{#use_basic}}{{> basic_cubit }}{{/use_basic}} -------------------------------------------------------------------------------- /bricks/cubit/__brick__/{{name.snakeCase()}}_state.dart: -------------------------------------------------------------------------------- 1 | {{#use_freezed}}{{> freezed_state }}{{/use_freezed}}{{#use_equatable}}{{> equatable_state }}{{/use_equatable}}{{#use_basic}}{{> basic_state }}{{/use_basic}} -------------------------------------------------------------------------------- /bricks/cubit/__brick__/{{~ basic_cubit }}: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | part '{{name.snakeCase()}}_state.dart'; 4 | 5 | class {{name.pascalCase()}}Cubit extends Cubit<{{name.pascalCase()}}State> { 6 | {{name.pascalCase()}}Cubit() : super(const {{name.pascalCase()}}State()); 7 | } 8 | -------------------------------------------------------------------------------- /bricks/cubit/__brick__/{{~ basic_state }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_cubit.dart'; 2 | 3 | class {{name.pascalCase()}}State { 4 | const {{name.pascalCase()}}State(); 5 | } 6 | -------------------------------------------------------------------------------- /bricks/cubit/__brick__/{{~ equatable_cubit }}: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | import 'package:equatable/equatable.dart'; 3 | 4 | part '{{name.snakeCase()}}_state.dart'; 5 | 6 | class {{name.pascalCase()}}Cubit extends Cubit<{{name.pascalCase()}}State> { 7 | {{name.pascalCase()}}Cubit() : super(const {{name.pascalCase()}}State()); 8 | } 9 | -------------------------------------------------------------------------------- /bricks/cubit/__brick__/{{~ equatable_state }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_cubit.dart'; 2 | 3 | class {{name.pascalCase()}}State extends Equatable { 4 | const {{name.pascalCase()}}State(); 5 | 6 | @override 7 | List get props => []; 8 | } 9 | -------------------------------------------------------------------------------- /bricks/cubit/__brick__/{{~ freezed_state }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_cubit.dart'; 2 | 3 | @freezed 4 | class {{name.pascalCase()}}State with _${{name.pascalCase()}}State { 5 | const factory {{name.pascalCase()}}State.initial() = _Initial; 6 | } 7 | -------------------------------------------------------------------------------- /bricks/cubit/hooks/pre_gen.dart: -------------------------------------------------------------------------------- 1 | import 'package:mason/mason.dart'; 2 | 3 | Future run(HookContext context) async { 4 | final style = context.vars['style']; 5 | context.vars = { 6 | ...context.vars, 7 | 'use_basic': style == 'basic', 8 | 'use_equatable': style == 'equatable', 9 | 'use_freezed': style == 'freezed', 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /bricks/cubit/hooks/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: cubit_hooks 2 | 3 | environment: 4 | sdk: ^3.5.4 5 | 6 | dependencies: 7 | mason: ^0.1.0 8 | -------------------------------------------------------------------------------- /bricks/flutter_bloc_feature/__brick__/{{name.snakeCase()}}/view/view.dart: -------------------------------------------------------------------------------- 1 | export './{{name.snakeCase()}}_page.dart'; 2 | -------------------------------------------------------------------------------- /bricks/flutter_bloc_feature/__brick__/{{name.snakeCase()}}/{{name.snakeCase()}}.dart: -------------------------------------------------------------------------------- 1 | export '{{{bloc_export}}}'; 2 | export './view/view.dart'; 3 | -------------------------------------------------------------------------------- /bricks/flutter_bloc_feature/__brick__/{{~ bloc_builder }}: -------------------------------------------------------------------------------- 1 | return BlocBuilder<{{name.pascalCase()}}Bloc, {{name.pascalCase()}}State>( 2 | builder: (context, state) { 3 | // TODO: return correct widget based on the state. 4 | return const SizedBox(); 5 | }, 6 | ); -------------------------------------------------------------------------------- /bricks/flutter_bloc_feature/__brick__/{{~ bloc_provider }}: -------------------------------------------------------------------------------- 1 | return BlocProvider( 2 | create: (_) => {{name.pascalCase()}}Bloc(), 3 | child: const {{name.pascalCase()}}View(), 4 | ); -------------------------------------------------------------------------------- /bricks/flutter_bloc_feature/__brick__/{{~ cubit_bloc_builder }}: -------------------------------------------------------------------------------- 1 | return BlocBuilder<{{name.pascalCase()}}Cubit, {{name.pascalCase()}}State>( 2 | builder: (context, state) { 3 | // TODO: return correct widget based on the state. 4 | return const SizedBox(); 5 | }, 6 | ); -------------------------------------------------------------------------------- /bricks/flutter_bloc_feature/__brick__/{{~ cubit_bloc_provider }}: -------------------------------------------------------------------------------- 1 | return BlocProvider( 2 | create: (_) => {{name.pascalCase()}}Cubit(), 3 | child: const {{name.pascalCase()}}View(), 4 | ); -------------------------------------------------------------------------------- /bricks/flutter_bloc_feature/hooks/.gitignore: -------------------------------------------------------------------------------- 1 | .dart_tool 2 | .packages 3 | pubspec.lock 4 | -------------------------------------------------------------------------------- /bricks/flutter_bloc_feature/hooks/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flutter_bloc_feature_hooks 2 | 3 | environment: 4 | sdk: ^3.5.4 5 | 6 | dependencies: 7 | mason: ^0.1.0 8 | path: ^1.8.2 9 | -------------------------------------------------------------------------------- /bricks/hydrated_bloc/__brick__/{{name.snakeCase()}}_bloc.dart: -------------------------------------------------------------------------------- 1 | {{#use_freezed}}{{> freezed_bloc }}{{/use_freezed}}{{#use_equatable}}{{> equatable_bloc }}{{/use_equatable}}{{#use_basic}}{{> basic_bloc }}{{/use_basic}} -------------------------------------------------------------------------------- /bricks/hydrated_bloc/__brick__/{{name.snakeCase()}}_event.dart: -------------------------------------------------------------------------------- 1 | {{#use_freezed}}{{> freezed_event }}{{/use_freezed}}{{#use_equatable}}{{> equatable_event }}{{/use_equatable}}{{#use_basic}}{{> basic_event }}{{/use_basic}} -------------------------------------------------------------------------------- /bricks/hydrated_bloc/__brick__/{{name.snakeCase()}}_state.dart: -------------------------------------------------------------------------------- 1 | {{#use_freezed}}{{> freezed_state }}{{/use_freezed}}{{#use_equatable}}{{> equatable_state }}{{/use_equatable}}{{#use_basic}}{{> basic_state }}{{/use_basic}} -------------------------------------------------------------------------------- /bricks/hydrated_bloc/__brick__/{{~ basic_event }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_bloc.dart'; 2 | 3 | sealed class {{name.pascalCase()}}Event { 4 | const {{name.pascalCase()}}Event(); 5 | } 6 | -------------------------------------------------------------------------------- /bricks/hydrated_bloc/__brick__/{{~ basic_state }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_bloc.dart'; 2 | 3 | class {{name.pascalCase()}}State { 4 | const {{name.pascalCase()}}State(); 5 | } 6 | -------------------------------------------------------------------------------- /bricks/hydrated_bloc/__brick__/{{~ equatable_event }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_bloc.dart'; 2 | 3 | sealed class {{name.pascalCase()}}Event extends Equatable { 4 | const {{name.pascalCase()}}Event(); 5 | 6 | @override 7 | List get props => []; 8 | } 9 | -------------------------------------------------------------------------------- /bricks/hydrated_bloc/__brick__/{{~ equatable_state }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_bloc.dart'; 2 | 3 | class {{name.pascalCase()}}State extends Equatable { 4 | const {{name.pascalCase()}}State(); 5 | 6 | @override 7 | List get props => []; 8 | } 9 | -------------------------------------------------------------------------------- /bricks/hydrated_bloc/__brick__/{{~ freezed_event }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_bloc.dart'; 2 | 3 | @freezed 4 | class {{name.pascalCase()}}Event with _${{name.pascalCase()}}Event { 5 | const factory {{name.pascalCase()}}Event.started() = _Started; 6 | } 7 | -------------------------------------------------------------------------------- /bricks/hydrated_bloc/__brick__/{{~ freezed_state }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_bloc.dart'; 2 | 3 | @freezed 4 | class {{name.pascalCase()}}State with _${{name.pascalCase()}}State { 5 | const factory {{name.pascalCase()}}State.initial() = _Initial; 6 | } 7 | -------------------------------------------------------------------------------- /bricks/hydrated_bloc/hooks/pre_gen.dart: -------------------------------------------------------------------------------- 1 | import 'package:mason/mason.dart'; 2 | 3 | Future run(HookContext context) async { 4 | final style = context.vars['style']; 5 | context.vars = { 6 | ...context.vars, 7 | 'use_basic': style == 'basic', 8 | 'use_equatable': style == 'equatable', 9 | 'use_freezed': style == 'freezed', 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /bricks/hydrated_bloc/hooks/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: hydrated_bloc_hooks 2 | 3 | environment: 4 | sdk: ^3.5.4 5 | 6 | dependencies: 7 | mason: ^0.1.0 8 | -------------------------------------------------------------------------------- /bricks/hydrated_cubit/__brick__/{{name.snakeCase()}}_cubit.dart: -------------------------------------------------------------------------------- 1 | {{#use_freezed}}{{> freezed_cubit }}{{/use_freezed}}{{#use_equatable}}{{> equatable_cubit }}{{/use_equatable}}{{#use_basic}}{{> basic_cubit }}{{/use_basic}} -------------------------------------------------------------------------------- /bricks/hydrated_cubit/__brick__/{{name.snakeCase()}}_state.dart: -------------------------------------------------------------------------------- 1 | {{#use_freezed}}{{> freezed_state }}{{/use_freezed}}{{#use_equatable}}{{> equatable_state }}{{/use_equatable}}{{#use_basic}}{{> basic_state }}{{/use_basic}} -------------------------------------------------------------------------------- /bricks/hydrated_cubit/__brick__/{{~ basic_state }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_cubit.dart'; 2 | 3 | class {{name.pascalCase()}}State { 4 | const {{name.pascalCase()}}State(); 5 | } 6 | -------------------------------------------------------------------------------- /bricks/hydrated_cubit/__brick__/{{~ equatable_state }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_cubit.dart'; 2 | 3 | class {{name.pascalCase()}}State extends Equatable { 4 | const {{name.pascalCase()}}State(); 5 | 6 | @override 7 | List get props => []; 8 | } 9 | -------------------------------------------------------------------------------- /bricks/hydrated_cubit/__brick__/{{~ freezed_state }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_cubit.dart'; 2 | 3 | @freezed 4 | class {{name.pascalCase()}}State with _${{name.pascalCase()}}State { 5 | const factory {{name.pascalCase()}}State.initial() = _Initial; 6 | } 7 | -------------------------------------------------------------------------------- /bricks/hydrated_cubit/hooks/pre_gen.dart: -------------------------------------------------------------------------------- 1 | import 'package:mason/mason.dart'; 2 | 3 | Future run(HookContext context) async { 4 | final style = context.vars['style']; 5 | context.vars = { 6 | ...context.vars, 7 | 'use_basic': style == 'basic', 8 | 'use_equatable': style == 'equatable', 9 | 'use_freezed': style == 'freezed', 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /bricks/hydrated_cubit/hooks/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: hydrated_cubit_hooks 2 | 3 | environment: 4 | sdk: ^3.5.4 5 | 6 | dependencies: 7 | mason: ^0.1.0 8 | -------------------------------------------------------------------------------- /bricks/mason.yaml: -------------------------------------------------------------------------------- 1 | bricks: 2 | bloc: 3 | path: ./bloc 4 | cubit: 5 | path: ./cubit 6 | hydrated_bloc: 7 | path: ./hydrated_bloc 8 | hydrated_cubit: 9 | path: ./hydrated_cubit 10 | replay_bloc: 11 | path: ./replay_bloc 12 | replay_cubit: 13 | path: ./replay_cubit 14 | flutter_bloc_feature: 15 | path: ./flutter_bloc_feature -------------------------------------------------------------------------------- /bricks/replay_bloc/__brick__/{{name.snakeCase()}}_bloc.dart: -------------------------------------------------------------------------------- 1 | {{#use_freezed}}{{> freezed_bloc }}{{/use_freezed}}{{#use_equatable}}{{> equatable_bloc }}{{/use_equatable}}{{#use_basic}}{{> basic_bloc }}{{/use_basic}} -------------------------------------------------------------------------------- /bricks/replay_bloc/__brick__/{{name.snakeCase()}}_event.dart: -------------------------------------------------------------------------------- 1 | {{#use_freezed}}{{> freezed_event }}{{/use_freezed}}{{#use_equatable}}{{> equatable_event }}{{/use_equatable}}{{#use_basic}}{{> basic_event }}{{/use_basic}} -------------------------------------------------------------------------------- /bricks/replay_bloc/__brick__/{{name.snakeCase()}}_state.dart: -------------------------------------------------------------------------------- 1 | {{#use_freezed}}{{> freezed_state }}{{/use_freezed}}{{#use_equatable}}{{> equatable_state }}{{/use_equatable}}{{#use_basic}}{{> basic_state }}{{/use_basic}} -------------------------------------------------------------------------------- /bricks/replay_bloc/__brick__/{{~ basic_event }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_bloc.dart'; 2 | 3 | abstract class {{name.pascalCase()}}Event extends ReplayEvent { 4 | const {{name.pascalCase()}}Event(); 5 | } 6 | -------------------------------------------------------------------------------- /bricks/replay_bloc/__brick__/{{~ basic_state }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_bloc.dart'; 2 | 3 | class {{name.pascalCase()}}State { 4 | const {{name.pascalCase()}}State(); 5 | } 6 | -------------------------------------------------------------------------------- /bricks/replay_bloc/__brick__/{{~ equatable_event }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_bloc.dart'; 2 | 3 | abstract class {{name.pascalCase()}}Event extends ReplayEvent with EquatableMixin { 4 | const {{name.pascalCase()}}Event(); 5 | 6 | @override 7 | List get props => []; 8 | } 9 | -------------------------------------------------------------------------------- /bricks/replay_bloc/__brick__/{{~ equatable_state }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_bloc.dart'; 2 | 3 | class {{name.pascalCase()}}State extends Equatable { 4 | const {{name.pascalCase()}}State(); 5 | 6 | @override 7 | List get props => []; 8 | } 9 | -------------------------------------------------------------------------------- /bricks/replay_bloc/__brick__/{{~ freezed_event }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_bloc.dart'; 2 | 3 | @freezed 4 | class {{name.pascalCase()}}Event extends ReplayEvent with _${{name.pascalCase()}}Event { 5 | const factory {{name.pascalCase()}}Event.started() = _Started; 6 | } 7 | -------------------------------------------------------------------------------- /bricks/replay_bloc/__brick__/{{~ freezed_state }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_bloc.dart'; 2 | 3 | @freezed 4 | class {{name.pascalCase()}}State with _${{name.pascalCase()}}State { 5 | const factory {{name.pascalCase()}}State.initial() = _Initial; 6 | } 7 | -------------------------------------------------------------------------------- /bricks/replay_bloc/hooks/pre_gen.dart: -------------------------------------------------------------------------------- 1 | import 'package:mason/mason.dart'; 2 | 3 | Future run(HookContext context) async { 4 | final style = context.vars['style']; 5 | context.vars = { 6 | ...context.vars, 7 | 'use_basic': style == 'basic', 8 | 'use_equatable': style == 'equatable', 9 | 'use_freezed': style == 'freezed', 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /bricks/replay_bloc/hooks/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: replay_bloc_hooks 2 | 3 | environment: 4 | sdk: ^3.5.4 5 | 6 | dependencies: 7 | mason: ^0.1.0 8 | -------------------------------------------------------------------------------- /bricks/replay_cubit/__brick__/{{name.snakeCase()}}_cubit.dart: -------------------------------------------------------------------------------- 1 | {{#use_freezed}}{{> freezed_cubit }}{{/use_freezed}}{{#use_equatable}}{{> equatable_cubit }}{{/use_equatable}}{{#use_basic}}{{> basic_cubit }}{{/use_basic}} -------------------------------------------------------------------------------- /bricks/replay_cubit/__brick__/{{name.snakeCase()}}_state.dart: -------------------------------------------------------------------------------- 1 | {{#use_freezed}}{{> freezed_state }}{{/use_freezed}}{{#use_equatable}}{{> equatable_state }}{{/use_equatable}}{{#use_basic}}{{> basic_state }}{{/use_basic}} -------------------------------------------------------------------------------- /bricks/replay_cubit/__brick__/{{~ basic_cubit }}: -------------------------------------------------------------------------------- 1 | import 'package:replay_bloc/replay_bloc.dart'; 2 | 3 | part '{{name.snakeCase()}}_state.dart'; 4 | 5 | class {{name.pascalCase()}}Cubit extends ReplayCubit<{{name.pascalCase()}}State> { 6 | {{name.pascalCase()}}Cubit() : super(const {{name.pascalCase()}}State()); 7 | } 8 | -------------------------------------------------------------------------------- /bricks/replay_cubit/__brick__/{{~ basic_state }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_cubit.dart'; 2 | 3 | class {{name.pascalCase()}}State { 4 | const {{name.pascalCase()}}State(); 5 | } 6 | -------------------------------------------------------------------------------- /bricks/replay_cubit/__brick__/{{~ equatable_cubit }}: -------------------------------------------------------------------------------- 1 | import 'package:equatable/equatable.dart'; 2 | import 'package:replay_bloc/replay_bloc.dart'; 3 | 4 | part '{{name.snakeCase()}}_state.dart'; 5 | 6 | class {{name.pascalCase()}}Cubit extends ReplayCubit<{{name.pascalCase()}}State> { 7 | {{name.pascalCase()}}Cubit() : super(const {{name.pascalCase()}}State()); 8 | } 9 | -------------------------------------------------------------------------------- /bricks/replay_cubit/__brick__/{{~ equatable_state }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_cubit.dart'; 2 | 3 | class {{name.pascalCase()}}State extends Equatable { 4 | const {{name.pascalCase()}}State(); 5 | 6 | @override 7 | List get props => []; 8 | } 9 | -------------------------------------------------------------------------------- /bricks/replay_cubit/__brick__/{{~ freezed_state }}: -------------------------------------------------------------------------------- 1 | part of '{{name.snakeCase()}}_cubit.dart'; 2 | 3 | @freezed 4 | class {{name.pascalCase()}}State with _${{name.pascalCase()}}State { 5 | const factory {{name.pascalCase()}}State.initial() = _Initial; 6 | } 7 | -------------------------------------------------------------------------------- /bricks/replay_cubit/hooks/pre_gen.dart: -------------------------------------------------------------------------------- 1 | import 'package:mason/mason.dart'; 2 | 3 | Future run(HookContext context) async { 4 | final style = context.vars['style']; 5 | context.vars = { 6 | ...context.vars, 7 | 'use_basic': style == 'basic', 8 | 'use_equatable': style == 'equatable', 9 | 'use_freezed': style == 'freezed', 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /bricks/replay_cubit/hooks/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: replay_cubit_hooks 2 | 3 | environment: 4 | sdk: ^3.5.4 5 | 6 | dependencies: 7 | mason: ^0.1.0 8 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | # build output 2 | dist/ 3 | # generated types 4 | .astro/ 5 | 6 | # dependencies 7 | node_modules/ 8 | 9 | # logs 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | pnpm-debug.log* 14 | 15 | 16 | # environment variables 17 | .env 18 | .env.production 19 | 20 | # macOS-specific files 21 | .DS_Store 22 | 23 | # firebase 24 | .firebase -------------------------------------------------------------------------------- /docs/.prettierignore: -------------------------------------------------------------------------------- 1 | src/components/**/*.mdx -------------------------------------------------------------------------------- /docs/public/CNAME: -------------------------------------------------------------------------------- 1 | bloclibrary.dev -------------------------------------------------------------------------------- /docs/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/public/favicon.ico -------------------------------------------------------------------------------- /docs/public/og.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/public/og.png -------------------------------------------------------------------------------- /docs/src/assets/architecture/architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/architecture/architecture.png -------------------------------------------------------------------------------- /docs/src/assets/architecture/bloc_architecture_full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/architecture/bloc_architecture_full.png -------------------------------------------------------------------------------- /docs/src/assets/concepts/bloc_architecture_full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/concepts/bloc_architecture_full.png -------------------------------------------------------------------------------- /docs/src/assets/concepts/cubit_architecture_full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/concepts/cubit_architecture_full.png -------------------------------------------------------------------------------- /docs/src/assets/sponsors/miquido.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/sponsors/miquido.png -------------------------------------------------------------------------------- /docs/src/assets/sponsors/monterail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/sponsors/monterail.png -------------------------------------------------------------------------------- /docs/src/assets/sponsors/netguru.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/sponsors/netguru.png -------------------------------------------------------------------------------- /docs/src/assets/sponsors/rettel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/sponsors/rettel.png -------------------------------------------------------------------------------- /docs/src/assets/sponsors/shorebird-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/sponsors/shorebird-dark.png -------------------------------------------------------------------------------- /docs/src/assets/sponsors/shorebird-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/sponsors/shorebird-light.png -------------------------------------------------------------------------------- /docs/src/assets/sponsors/stream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/sponsors/stream.png -------------------------------------------------------------------------------- /docs/src/assets/tutorials/flutter-counter.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/tutorials/flutter-counter.gif -------------------------------------------------------------------------------- /docs/src/assets/tutorials/flutter-firebase-login.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/tutorials/flutter-firebase-login.gif -------------------------------------------------------------------------------- /docs/src/assets/tutorials/flutter-github-search.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/tutorials/flutter-github-search.gif -------------------------------------------------------------------------------- /docs/src/assets/tutorials/flutter-infinite-list.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/tutorials/flutter-infinite-list.gif -------------------------------------------------------------------------------- /docs/src/assets/tutorials/flutter-login.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/tutorials/flutter-login.gif -------------------------------------------------------------------------------- /docs/src/assets/tutorials/flutter-timer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/tutorials/flutter-timer.gif -------------------------------------------------------------------------------- /docs/src/assets/tutorials/flutter-todos.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/tutorials/flutter-todos.gif -------------------------------------------------------------------------------- /docs/src/assets/tutorials/flutter-weather.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/tutorials/flutter-weather.gif -------------------------------------------------------------------------------- /docs/src/assets/tutorials/ngdart-counter.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/tutorials/ngdart-counter.gif -------------------------------------------------------------------------------- /docs/src/assets/tutorials/ngdart-github-search.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/tutorials/ngdart-github-search.gif -------------------------------------------------------------------------------- /docs/src/assets/tutorials/todos-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/docs/src/assets/tutorials/todos-architecture.png -------------------------------------------------------------------------------- /docs/src/components/architecture/DataProviderSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | class DataProvider { 6 | Future readData() async { 7 | // Read from DB or make network request etc... 8 | } 9 | } 10 | `; 11 | --- 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/src/components/concepts/bloc/AuthenticationChangeSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | Change { 6 | currentState: AuthenticationState.authenticated, 7 | nextState: AuthenticationState.unauthenticated 8 | } 9 | `; 10 | --- 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/src/components/concepts/bloc/AuthenticationStateSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | enum AuthenticationState { unknown, authenticated, unauthenticated } 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/concepts/bloc/AuthenticationTransitionSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | Transition { 6 | currentState: AuthenticationState.authenticated, 7 | event: LogoutRequested, 8 | nextState: AuthenticationState.unauthenticated 9 | } 10 | `; 11 | --- 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/src/components/concepts/bloc/CountStreamSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | Stream countStream(int max) async* { 6 | for (int i = 0; i < max; i++) { 7 | yield i; 8 | } 9 | } 10 | `; 11 | --- 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/src/components/concepts/bloc/CounterBlocOnChangeOutputSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | Change { currentState: 0, nextState: 1 } 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/concepts/bloc/CounterBlocOnChangeUsageSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | void main() { 6 | CounterBloc() 7 | ..add(CounterIncrementPressed()) 8 | ..close(); 9 | } 10 | `; 11 | --- 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/src/components/concepts/bloc/CounterBlocOnTransitionOutputSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | Transition { currentState: 0, event: Instance of 'CounterIncrementPressed', nextState: 1 } 6 | Change { currentState: 0, nextState: 1 } 7 | `; 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/src/components/concepts/bloc/CounterCubitFullSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | class CounterCubit extends Cubit { 6 | CounterCubit() : super(0); 7 | 8 | void increment() => emit(state + 1); 9 | } 10 | `; 11 | --- 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/src/components/concepts/bloc/CounterCubitIncrementSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | class CounterCubit extends Cubit { 6 | CounterCubit() : super(0); 7 | 8 | void increment() => emit(state + 1); 9 | } 10 | `; 11 | --- 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/src/components/concepts/bloc/CounterCubitInitialStateSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | class CounterCubit extends Cubit { 6 | CounterCubit(int initialState) : super(initialState); 7 | } 8 | `; 9 | --- 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/src/components/concepts/bloc/CounterCubitInstantiationSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | final cubitA = CounterCubit(0); // state starts at 0 6 | final cubitB = CounterCubit(10); // state starts at 10 7 | `; 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/src/components/concepts/bloc/CounterCubitOnChangeOutputSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | Change { currentState: 0, nextState: 1 } 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/concepts/bloc/CounterCubitOnChangeUsageSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | void main() { 6 | CounterCubit() 7 | ..increment() 8 | ..close(); 9 | } 10 | `; 11 | --- 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/src/components/concepts/bloc/CounterCubitSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | class CounterCubit extends Cubit { 6 | CounterCubit() : super(0); 7 | } 8 | `; 9 | --- 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/src/components/concepts/bloc/SimpleBlocObserverOnChangeOutputSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | CounterCubit Change { currentState: 0, nextState: 1 } 6 | Change { currentState: 0, nextState: 1 } 7 | `; 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/src/components/concepts/bloc/SimpleBlocObserverOnChangeUsageSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | void main() { 6 | Bloc.observer = SimpleBlocObserver(); 7 | CounterCubit() 8 | ..increment() 9 | ..close(); 10 | } 11 | `; 12 | --- 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/src/components/concepts/bloc/SimpleBlocObserverOnTransitionUsageSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | void main() { 6 | Bloc.observer = SimpleBlocObserver(); 7 | CounterBloc() 8 | ..add(CounterIncrementPressed()) 9 | ..close(); 10 | } 11 | `; 12 | --- 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/src/components/concepts/flutter-bloc/BlocBuilderSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | BlocBuilder( 6 | builder: (context, state) { 7 | // return widget here based on BlocA's state 8 | }, 9 | ); 10 | `; 11 | --- 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/src/components/concepts/flutter-bloc/BlocListenerSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | BlocListener( 6 | listener: (context, state) { 7 | // do stuff here based on BlocA's state 8 | }, 9 | child: const SizedBox(), 10 | ); 11 | `; 12 | --- 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/src/components/concepts/flutter-bloc/BlocProviderEagerSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | BlocProvider( 6 | lazy: false, 7 | create: (BuildContext context) => BlocA(), 8 | child: ChildA(), 9 | ); 10 | `; 11 | --- 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/src/components/concepts/flutter-bloc/BlocProviderLookupSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | // with extensions 6 | context.read(); 7 | 8 | // without extensions 9 | BlocProvider.of(context); 10 | `; 11 | --- 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/src/components/concepts/flutter-bloc/BlocProviderSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | BlocProvider( 6 | create: (BuildContext context) => BlocA(), 7 | child: ChildA(), 8 | ); 9 | `; 10 | --- 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/src/components/concepts/flutter-bloc/BlocProviderValueSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | BlocProvider.value( 6 | value: BlocProvider.of(context), 7 | child: ScreenA(), 8 | ); 9 | `; 10 | --- 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/src/components/concepts/flutter-bloc/RepositoryProviderDisposeSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | RepositoryProvider( 6 | create: (context) => RepositoryA(), 7 | dispose: (repository) => repository.dispose(), 8 | child: ChildA(), 9 | ); 10 | `; 11 | --- 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/src/components/concepts/flutter-bloc/RepositoryProviderLookupSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | // with extensions 6 | context.read(); 7 | 8 | // without extensions 9 | RepositoryProvider.of(context) 10 | `; 11 | --- 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/src/components/concepts/flutter-bloc/RepositoryProviderSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | RepositoryProvider( 6 | create: (context) => RepositoryA(), 7 | child: ChildA(), 8 | ); 9 | `; 10 | --- 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/src/components/concepts/flutter-bloc/WeatherMainSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | import 'package:flutter/material.dart'; 6 | import 'package:flutter_weather/app.dart'; 7 | 8 | void main() => runApp(const WeatherApp()); 9 | `; 10 | --- 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/src/components/faqs/EquatableEmitSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | MyBloc() { 6 | on((event, emit) { 7 | emit(StateA('hi')); 8 | emit(StateA('hi')); 9 | }); 10 | } 11 | `; 12 | --- 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/src/components/lint-rules/avoid_flutter_imports/GoodSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | import 'package:bloc/bloc.dart'; 6 | 7 | class CounterCubit extends Cubit { 8 | CounterCubit() : super(0); 9 | } 10 | `; 11 | --- 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/src/components/lint/BlocLintBasicAnalysisOptionsSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | bloc: 6 | rules: 7 | - avoid_flutter_imports 8 | `; 9 | --- 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/src/components/lint/BlocLintChangingSeveritySnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | bloc: 6 | rules: 7 | avoid_flutter_imports: info 8 | `; 9 | --- 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/src/components/lint/BlocLintDisablingRulesSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | include: package:bloc_lint/recommended.yaml 6 | bloc: 7 | rules: 8 | avoid_public_bloc_methods: false 9 | prefer_bloc: true 10 | `; 11 | --- 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/src/components/lint/BlocLintEnablingRulesSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | bloc: 6 | rules: 7 | - avoid_flutter_imports 8 | - avoid_public_bloc_methods 9 | `; 10 | --- 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/src/components/lint/BlocLintExcludingFilesSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | include: package:bloc_lint/recommended.yaml 6 | analyzer: 7 | exclude: 8 | - "**.g.dart" 9 | `; 10 | --- 11 | 12 | 13 | -------------------------------------------------------------------------------- /docs/src/components/lint/BlocLintMultipleRecommendedAnalysisOptionsSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | include: 6 | - package:very_good_analysis/analysis_options.yaml 7 | - package:bloc_lint/recommended.yaml 8 | `; 9 | --- 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/src/components/lint/BlocLintRecommendedAnalysisOptionsSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | include: package:bloc_lint/recommended.yaml 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/lint/BlocToolsLintHelpOutputSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | $ bloc lint --help 6 | Lint Dart source code. 7 | 8 | Usage: bloc lint [arguments] 9 | -h, --help Print this usage information. 10 | 11 | Run "bloc help" to see global options. 12 | `; 13 | --- 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/src/components/lint/InstallBlocLintSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = `dart pub add --dev bloc_lint:^0.2.0-dev`; 5 | --- 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/src/components/lint/InstallBlocToolsSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = `dart pub global activate bloc_tools`; 5 | --- 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/src/components/lint/RunBlocLintCounterCubitSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = `bloc lint counter_cubit.dart`; 5 | --- 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/src/components/lint/RunBlocLintInCurrentDirectorySnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = `bloc lint .`; 5 | --- 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/src/components/lint/RunBlocLintInSrcTestSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = `bloc lint src/ test/`; 5 | --- 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/src/components/testing/CounterBlocTestImportsSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | import 'package:test/test.dart'; 6 | import 'package:bloc_test/bloc_test.dart'; 7 | `; 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /docs/src/components/testing/CounterBlocTestMainSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | void main() { 6 | group(CounterBloc, () { 7 | 8 | }); 9 | } 10 | `; 11 | --- 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/src/components/testing/CounterBlocTestSetupSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | group(CounterBloc, () { 6 | late CounterBloc counterBloc; 7 | 8 | setUp(() { 9 | counterBloc = CounterBloc(); 10 | }); 11 | }); 12 | `; 13 | --- 14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/FlutterPubGetSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | flutter pub get 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-counter/FlutterCreateSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | flutter create flutter_counter 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-firebase-login/FlutterCreateSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | flutter create flutter_firebase_login 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-infinite-list/FlutterCreateSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | flutter create flutter_infinite_list 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-infinite-list/FlutterPubGetSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | flutter pub get 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-login/FlutterCreateSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | flutter create flutter_login 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-timer/FlutterCreateSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | flutter create flutter_timer 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-todos/ActivateVeryGoodCLISnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | dart pub global activate very_good_cli 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-todos/FlutterCreateSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | very_good create flutter_app flutter_todos --desc "An example todos app that showcases bloc state management patterns." 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-todos/ProjectStructureSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | ├── lib 6 | ├── packages 7 | │ ├── local_storage_todos_api 8 | │ ├── todos_api 9 | │ └── todos_repository 10 | └── test 11 | `; 12 | --- 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-todos/StatsPageTreeSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | ├── StatsPage 6 | │ └── BlocProvider 7 | │ └── StatsView 8 | │ ├── context.watch 9 | │ └── Column 10 | `; 11 | --- 12 | 13 | 14 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-todos/VeryGoodPackagesGetSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | very_good packages get --recursive 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-weather/BuildRunnerBuildSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | dart run build_runner build 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-weather/FeatureTreeSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | flutter_weather 6 | |-- lib/ 7 | |-- search/ 8 | |-- settings/ 9 | |-- theme/ 10 | |-- weather/ 11 | |-- main.dart 12 | |-- test/ 13 | `; 14 | --- 15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-weather/FlutterCreateApiClientSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | flutter create --template=package open_meteo_api 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-weather/FlutterCreateRepositorySnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | flutter create --template=package weather_repository 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-weather/FlutterCreateSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | flutter create flutter_weather 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-weather/FlutterTestCoverageSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | flutter test --coverage 6 | genhtml coverage/lcov.info -o coverage 7 | open coverage/index.html 8 | `; 9 | --- 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-weather/OpenMeteoLibrarySnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | library open_meteo_api; 6 | 7 | export 'src/models/models.dart'; 8 | `; 9 | --- 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-weather/WeatherBarrelDartSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | export 'models/models.dart'; 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-weather/WeatherCubitTreeSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | flutter_weather 6 | |-- lib/ 7 | |-- weather/ 8 | |-- cubit/ 9 | |-- weather_cubit.dart 10 | |-- weather_state.dart 11 | `; 12 | --- 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-weather/WeatherJsonSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | { 6 | "current_weather": { 7 | "temperature": 15.3, 8 | "weathercode": 63 9 | } 10 | } 11 | `; 12 | --- 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/flutter-weather/WeatherRepositoryLibrarySnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | library weather_repository; 6 | 7 | export 'src/models/models.dart'; 8 | `; 9 | --- 10 | 11 | 12 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/github-search/ActivateStagehandSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | dart pub global activate stagehand 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/github-search/DartPubGetSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | dart pub get 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/github-search/FlutterCreateSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | flutter create flutter_github_search 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/github-search/SetupSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | mkdir -p github_search/common_github_search 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/github-search/StagehandSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | stagehand web-angular 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/ngdart-counter/ActivateStagehandSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | dart pub global activate stagehand 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/ngdart-counter/InstallDependenciesSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | dart pub get 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/components/tutorials/ngdart-counter/StagehandSnippet.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { Code } from '@astrojs/starlight/components'; 3 | 4 | const code = ` 5 | stagehand web-angular 6 | `; 7 | --- 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/src/content/config.ts: -------------------------------------------------------------------------------- 1 | import { defineCollection } from 'astro:content'; 2 | import { docsSchema } from '@astrojs/starlight/schema'; 3 | 4 | export const collections = { docs: defineCollection({ schema: docsSchema() }) }; 5 | -------------------------------------------------------------------------------- /docs/src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /docs/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "astro/tsconfigs/strict", 3 | "compilerOptions": { 4 | "baseUrl": ".", 5 | "paths": { 6 | "~/*": ["src/*"] 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /examples/angular_counter/.gitignore: -------------------------------------------------------------------------------- 1 | # Files and directories created by pub 2 | .dart_tool/ 3 | .packages 4 | # Remove the following pattern if you wish to check in your lock file 5 | pubspec.lock 6 | 7 | # Conventional directory for build outputs 8 | build/ 9 | 10 | # Directory created by dartdoc 11 | doc/api/ 12 | -------------------------------------------------------------------------------- /examples/angular_counter/README.md: -------------------------------------------------------------------------------- 1 | [![build](https://github.com/felangel/bloc/actions/workflows/main.yaml/badge.svg)](https://github.com/felangel/bloc/actions) 2 | 3 | # example 4 | 5 | A web app that uses [AngularDart](https://angulardart.dev/). 6 | 7 | Created from templates made available by Stagehand under a BSD-style 8 | [license](https://github.com/dart-lang/stagehand/blob/master/LICENSE). 9 | -------------------------------------------------------------------------------- /examples/angular_counter/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - package:bloc_lint/recommended.yaml 3 | - ../../analysis_options.yaml 4 | 5 | analyzer: 6 | exclude: [build/**] 7 | errors: 8 | uri_has_not_been_generated: ignore 9 | -------------------------------------------------------------------------------- /examples/angular_counter/lib/app_component.css: -------------------------------------------------------------------------------- 1 | :host { 2 | /* This is equivalent of the 'body' selector of a page. */ 3 | } 4 | -------------------------------------------------------------------------------- /examples/angular_counter/lib/app_component.dart: -------------------------------------------------------------------------------- 1 | import 'package:angular_counter/src/counter_page/counter_page_component.dart'; 2 | import 'package:ngdart/angular.dart'; 3 | 4 | /// Top level application component. 5 | @Component( 6 | selector: 'my-app', 7 | templateUrl: 'app_component.html', 8 | directives: [CounterPageComponent], 9 | ) 10 | class AppComponent {} 11 | -------------------------------------------------------------------------------- /examples/angular_counter/lib/app_component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/angular_counter/lib/src/counter_page/counter_page_component.css: -------------------------------------------------------------------------------- 1 | .counter-page-container { 2 | text-align: center; 3 | } 4 | 5 | .counter-button { 6 | background: lightskyblue; 7 | color: black; 8 | padding: 24px; 9 | border-radius: 50%; 10 | font-size: 24px; 11 | } 12 | -------------------------------------------------------------------------------- /examples/angular_counter/lib/src/counter_page/counter_page_component.html: -------------------------------------------------------------------------------- 1 |
2 |

Counter App

3 |

Current Count: {{ $pipe.bloc(counterBloc) }}

4 | 5 | 6 |
7 | -------------------------------------------------------------------------------- /examples/angular_counter/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | angular_bloc: 3 | path: ../../packages/angular_bloc 4 | bloc_lint: 5 | path: ../../packages/bloc_lint 6 | build_modules: ^5.0.0 7 | build_web_compilers: ^4.0.0 8 | -------------------------------------------------------------------------------- /examples/angular_counter/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/angular_counter/web/favicon.png -------------------------------------------------------------------------------- /examples/angular_counter/web/styles.css: -------------------------------------------------------------------------------- 1 | @import url(https://fonts.googleapis.com/css?family=Roboto); 2 | @import url(https://fonts.googleapis.com/css?family=Material+Icons); 3 | 4 | body { 5 | max-width: 600px; 6 | margin: 0 auto; 7 | padding: 5vw; 8 | } 9 | 10 | * { 11 | font-family: Roboto, Helvetica, Arial, sans-serif; 12 | } 13 | -------------------------------------------------------------------------------- /examples/flutter_bloc_with_stream/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - package:bloc_lint/recommended.yaml 3 | - ../../analysis_options.yaml 4 | -------------------------------------------------------------------------------- /examples/flutter_bloc_with_stream/lib/ticker/ticker.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | /// Class which exposes a `tick` method to emit values periodically. 4 | class Ticker { 5 | /// Emits a new `int` up to 10 every second. 6 | Stream tick() { 7 | return Stream.periodic(const Duration(seconds: 1), (x) => x).take(10); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /examples/flutter_bloc_with_stream/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../../packages/bloc 4 | bloc_concurrency: 5 | path: ../../packages/bloc_concurrency 6 | bloc_lint: 7 | path: ../../packages/bloc_lint 8 | bloc_test: 9 | path: ../../packages/bloc_test 10 | flutter_bloc: 11 | path: ../../packages/flutter_bloc 12 | -------------------------------------------------------------------------------- /examples/flutter_bloc_with_stream/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_bloc_with_stream/web/favicon.png -------------------------------------------------------------------------------- /examples/flutter_bloc_with_stream/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_bloc_with_stream/web/icons/Icon-192.png -------------------------------------------------------------------------------- /examples/flutter_bloc_with_stream/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_bloc_with_stream/web/icons/Icon-512.png -------------------------------------------------------------------------------- /examples/flutter_bloc_with_stream/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_bloc_with_stream/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /examples/flutter_bloc_with_stream/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_bloc_with_stream/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /examples/flutter_complex_list/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - package:bloc_lint/recommended.yaml 3 | - ../../analysis_options.yaml 4 | 5 | linter: 6 | rules: 7 | public_member_api_docs: false 8 | -------------------------------------------------------------------------------- /examples/flutter_complex_list/lib/complex_list/complex_list.dart: -------------------------------------------------------------------------------- 1 | export 'cubit/complex_list_cubit.dart'; 2 | export 'models/models.dart'; 3 | export 'view/view.dart'; 4 | -------------------------------------------------------------------------------- /examples/flutter_complex_list/lib/complex_list/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'item.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_complex_list/lib/complex_list/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'complex_list_page.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_complex_list/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../../packages/bloc 4 | bloc_lint: 5 | path: ../../packages/bloc_lint 6 | bloc_test: 7 | path: ../../packages/bloc_test 8 | flutter_bloc: 9 | path: ../../packages/flutter_bloc 10 | -------------------------------------------------------------------------------- /examples/flutter_complex_list/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_complex_list/web/favicon.png -------------------------------------------------------------------------------- /examples/flutter_complex_list/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_complex_list/web/icons/Icon-192.png -------------------------------------------------------------------------------- /examples/flutter_complex_list/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_complex_list/web/icons/Icon-512.png -------------------------------------------------------------------------------- /examples/flutter_complex_list/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_complex_list/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /examples/flutter_complex_list/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_complex_list/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /examples/flutter_counter/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - package:bloc_lint/recommended.yaml 3 | - ../../analysis_options.yaml 4 | -------------------------------------------------------------------------------- /examples/flutter_counter/lib/counter/counter.dart: -------------------------------------------------------------------------------- 1 | export 'cubit/counter_cubit.dart'; 2 | export 'view/view.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_counter/lib/counter/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'counter_page.dart'; 2 | export 'counter_view.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_counter/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | import 'package:flutter/widgets.dart'; 3 | import 'package:flutter_counter/app.dart'; 4 | import 'package:flutter_counter/counter_observer.dart'; 5 | 6 | void main() { 7 | Bloc.observer = const CounterObserver(); 8 | runApp(const CounterApp()); 9 | } 10 | -------------------------------------------------------------------------------- /examples/flutter_counter/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../../packages/bloc 4 | bloc_lint: 5 | path: ../../packages/bloc_lint 6 | bloc_test: 7 | path: ../../packages/bloc_test 8 | flutter_bloc: 9 | path: ../../packages/flutter_bloc 10 | -------------------------------------------------------------------------------- /examples/flutter_counter/test_driver/integration_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:integration_test/integration_test_driver.dart'; 2 | 3 | Future main() => integrationDriver(); 4 | -------------------------------------------------------------------------------- /examples/flutter_counter/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_counter/web/favicon.png -------------------------------------------------------------------------------- /examples/flutter_counter/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_counter/web/icons/Icon-192.png -------------------------------------------------------------------------------- /examples/flutter_counter/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_counter/web/icons/Icon-512.png -------------------------------------------------------------------------------- /examples/flutter_counter/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_counter/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /examples/flutter_counter/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_counter/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /examples/flutter_dynamic_form/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - package:bloc_lint/recommended.yaml 3 | - ../../analysis_options.yaml 4 | 5 | linter: 6 | rules: 7 | public_member_api_docs: false 8 | -------------------------------------------------------------------------------- /examples/flutter_dynamic_form/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_dynamic_form/app.dart'; 3 | import 'package:flutter_dynamic_form/new_car_repository.dart'; 4 | 5 | void main() => runApp(MyApp(newCarRepository: NewCarRepository())); 6 | -------------------------------------------------------------------------------- /examples/flutter_dynamic_form/lib/new_car/new_car.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/new_car_bloc.dart'; 2 | export 'view/new_car_page.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_dynamic_form/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../../packages/bloc 4 | bloc_lint: 5 | path: ../../packages/bloc_lint 6 | bloc_test: 7 | path: ../../packages/bloc_test 8 | flutter_bloc: 9 | path: ../../packages/flutter_bloc 10 | -------------------------------------------------------------------------------- /examples/flutter_dynamic_form/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_dynamic_form/web/favicon.png -------------------------------------------------------------------------------- /examples/flutter_dynamic_form/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_dynamic_form/web/icons/Icon-192.png -------------------------------------------------------------------------------- /examples/flutter_dynamic_form/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_dynamic_form/web/icons/Icon-512.png -------------------------------------------------------------------------------- /examples/flutter_dynamic_form/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_dynamic_form/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /examples/flutter_dynamic_form/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_dynamic_form/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - package:bloc_lint/recommended.yaml 3 | - ../../analysis_options.yaml 4 | 5 | linter: 6 | rules: 7 | public_member_api_docs: false 8 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/to/reference-keystore 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/android/app/src/main/kotlin/com/example/flutter_firebase_login/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.flutter_firebase_login 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() 6 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip 6 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/assets/bloc_logo_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/assets/bloc_logo_small.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_firebase_login/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/ios/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import XCTest 4 | 5 | class RunnerTests: XCTestCase { 6 | 7 | func testExample() { 8 | // If you add code to the Runner application, consider adding tests here. 9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest. 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/lib/app/app.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/app_bloc.dart'; 2 | export 'bloc_observer.dart'; 3 | export 'routes/routes.dart'; 4 | export 'view/app.dart'; 5 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/lib/app/bloc/app_event.dart: -------------------------------------------------------------------------------- 1 | part of 'app_bloc.dart'; 2 | 3 | sealed class AppEvent { 4 | const AppEvent(); 5 | } 6 | 7 | final class AppUserSubscriptionRequested extends AppEvent { 8 | const AppUserSubscriptionRequested(); 9 | } 10 | 11 | final class AppLogoutPressed extends AppEvent { 12 | const AppLogoutPressed(); 13 | } 14 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/lib/home/home.dart: -------------------------------------------------------------------------------- 1 | export 'view/home_page.dart'; 2 | export 'widgets/widgets.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/lib/home/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'avatar.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/lib/login/login.dart: -------------------------------------------------------------------------------- 1 | export 'cubit/login_cubit.dart'; 2 | export 'view/view.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/lib/login/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'login_form.dart'; 2 | export 'login_page.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/lib/sign_up/sign_up.dart: -------------------------------------------------------------------------------- 1 | export 'cubit/sign_up_cubit.dart'; 2 | export 'view/view.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/lib/sign_up/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'sign_up_form.dart'; 2 | export 'sign_up_page.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/packages/authentication_repository/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../../../analysis_options.yaml 2 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/packages/authentication_repository/lib/authentication_repository.dart: -------------------------------------------------------------------------------- 1 | export 'src/authentication_repository.dart'; 2 | export 'src/models/models.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/packages/authentication_repository/lib/src/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'user.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/packages/cache/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../../../analysis_options.yaml 2 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/packages/cache/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: cache 2 | description: A simple in memory cache made for dart 3 | version: 1.0.0 4 | publish_to: none 5 | 6 | environment: 7 | sdk: ">=3.8.0 <4.0.0" 8 | 9 | dev_dependencies: 10 | test: ^1.17.11 11 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/packages/form_inputs/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../../../analysis_options.yaml 2 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/packages/form_inputs/lib/form_inputs.dart: -------------------------------------------------------------------------------- 1 | export './src/confirmed_password.dart'; 2 | export './src/email.dart'; 3 | export './src/password.dart'; 4 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/packages/form_inputs/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: form_inputs 2 | version: 1.0.0+1 3 | publish_to: none 4 | 5 | environment: 6 | sdk: ">=3.8.0 <4.0.0" 7 | 8 | dependencies: 9 | formz: ^0.8.0 10 | -------------------------------------------------------------------------------- /examples/flutter_firebase_login/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../../packages/bloc 4 | bloc_lint: 5 | path: ../../packages/bloc_lint 6 | bloc_test: 7 | path: ../../packages/bloc_test 8 | flutter_bloc: 9 | path: ../../packages/flutter_bloc 10 | -------------------------------------------------------------------------------- /examples/flutter_form_validation/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - package:bloc_lint/recommended.yaml 3 | - ../../analysis_options.yaml 4 | 5 | linter: 6 | rules: 7 | public_member_api_docs: false 8 | -------------------------------------------------------------------------------- /examples/flutter_form_validation/lib/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'email.dart'; 2 | export 'password.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_form_validation/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../../packages/bloc 4 | bloc_lint: 5 | path: ../../packages/bloc_lint 6 | flutter_bloc: 7 | path: ../../packages/flutter_bloc 8 | -------------------------------------------------------------------------------- /examples/flutter_form_validation/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_form_validation/web/favicon.png -------------------------------------------------------------------------------- /examples/flutter_form_validation/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_form_validation/web/icons/Icon-192.png -------------------------------------------------------------------------------- /examples/flutter_form_validation/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_form_validation/web/icons/Icon-512.png -------------------------------------------------------------------------------- /examples/flutter_form_validation/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_form_validation/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /examples/flutter_form_validation/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_form_validation/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /examples/flutter_infinite_list/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - package:bloc_lint/recommended.yaml 3 | - ../../analysis_options.yaml 4 | 5 | linter: 6 | rules: 7 | public_member_api_docs: false 8 | -------------------------------------------------------------------------------- /examples/flutter_infinite_list/lib/app.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_infinite_list/posts/posts.dart'; 3 | 4 | class App extends MaterialApp { 5 | const App({super.key}) : super(home: const PostsPage()); 6 | } 7 | -------------------------------------------------------------------------------- /examples/flutter_infinite_list/lib/posts/bloc/post_event.dart: -------------------------------------------------------------------------------- 1 | part of 'post_bloc.dart'; 2 | 3 | sealed class PostEvent extends Equatable { 4 | @override 5 | List get props => []; 6 | } 7 | 8 | final class PostFetched extends PostEvent {} 9 | -------------------------------------------------------------------------------- /examples/flutter_infinite_list/lib/posts/models/models.dart: -------------------------------------------------------------------------------- 1 | export './post.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_infinite_list/lib/posts/models/post.dart: -------------------------------------------------------------------------------- 1 | import 'package:equatable/equatable.dart'; 2 | 3 | final class Post extends Equatable { 4 | const Post({required this.id, required this.title, required this.body}); 5 | 6 | final int id; 7 | final String title; 8 | final String body; 9 | 10 | @override 11 | List get props => [id, title, body]; 12 | } 13 | -------------------------------------------------------------------------------- /examples/flutter_infinite_list/lib/posts/posts.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/post_bloc.dart'; 2 | export 'models/models.dart'; 3 | export 'view/view.dart'; 4 | export 'widgets/widgets.dart'; 5 | -------------------------------------------------------------------------------- /examples/flutter_infinite_list/lib/posts/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'posts_list.dart'; 2 | export 'posts_page.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_infinite_list/lib/posts/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'bottom_loader.dart'; 2 | export 'post_list_item.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_infinite_list/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../../packages/bloc 4 | bloc_lint: 5 | path: ../../packages/bloc_lint 6 | bloc_test: 7 | path: ../../packages/bloc_test 8 | flutter_bloc: 9 | path: ../../packages/flutter_bloc 10 | -------------------------------------------------------------------------------- /examples/flutter_infinite_list/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_infinite_list/web/favicon.png -------------------------------------------------------------------------------- /examples/flutter_infinite_list/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_infinite_list/web/icons/Icon-192.png -------------------------------------------------------------------------------- /examples/flutter_infinite_list/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_infinite_list/web/icons/Icon-512.png -------------------------------------------------------------------------------- /examples/flutter_infinite_list/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_infinite_list/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /examples/flutter_infinite_list/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_infinite_list/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /examples/flutter_login/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - package:bloc_lint/recommended.yaml 3 | - ../../analysis_options.yaml 4 | 5 | linter: 6 | rules: 7 | public_member_api_docs: false 8 | -------------------------------------------------------------------------------- /examples/flutter_login/lib/authentication/authentication.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/authentication_bloc.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_login/lib/authentication/bloc/authentication_event.dart: -------------------------------------------------------------------------------- 1 | part of 'authentication_bloc.dart'; 2 | 3 | sealed class AuthenticationEvent { 4 | const AuthenticationEvent(); 5 | } 6 | 7 | final class AuthenticationSubscriptionRequested extends AuthenticationEvent {} 8 | 9 | final class AuthenticationLogoutPressed extends AuthenticationEvent {} 10 | -------------------------------------------------------------------------------- /examples/flutter_login/lib/home/home.dart: -------------------------------------------------------------------------------- 1 | export 'view/home_page.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_login/lib/login/login.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/login_bloc.dart'; 2 | export 'models/models.dart'; 3 | export 'view/view.dart'; 4 | -------------------------------------------------------------------------------- /examples/flutter_login/lib/login/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'password.dart'; 2 | export 'username.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_login/lib/login/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'login_form.dart'; 2 | export 'login_page.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_login/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/widgets.dart'; 2 | import 'package:flutter_login/app.dart'; 3 | 4 | void main() => runApp(const App()); 5 | -------------------------------------------------------------------------------- /examples/flutter_login/lib/splash/splash.dart: -------------------------------------------------------------------------------- 1 | export 'view/splash_page.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_login/packages/authentication_repository/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../../../analysis_options.yaml 2 | linter: 3 | rules: 4 | public_member_api_docs: false 5 | -------------------------------------------------------------------------------- /examples/flutter_login/packages/authentication_repository/lib/authentication_repository.dart: -------------------------------------------------------------------------------- 1 | export 'src/authentication_repository.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_login/packages/authentication_repository/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: authentication_repository 2 | description: Dart package which manages the authentication domain. 3 | publish_to: none 4 | 5 | environment: 6 | sdk: ">=3.8.0 <4.0.0" 7 | -------------------------------------------------------------------------------- /examples/flutter_login/packages/user_repository/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../../../analysis_options.yaml 2 | linter: 3 | rules: 4 | public_member_api_docs: false 5 | -------------------------------------------------------------------------------- /examples/flutter_login/packages/user_repository/lib/src/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'user.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_login/packages/user_repository/lib/src/models/user.dart: -------------------------------------------------------------------------------- 1 | import 'package:equatable/equatable.dart'; 2 | 3 | class User extends Equatable { 4 | const User(this.id); 5 | 6 | final String id; 7 | 8 | @override 9 | List get props => [id]; 10 | 11 | static const empty = User('-'); 12 | } 13 | -------------------------------------------------------------------------------- /examples/flutter_login/packages/user_repository/lib/user_repository.dart: -------------------------------------------------------------------------------- 1 | export 'src/models/models.dart'; 2 | export 'src/user_repository.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_login/packages/user_repository/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: user_repository 2 | description: Dart package which manages the user domain. 3 | publish_to: none 4 | 5 | environment: 6 | sdk: ">=3.8.0 <4.0.0" 7 | 8 | dependencies: 9 | equatable: ^2.0.0 10 | uuid: ^3.0.0 11 | -------------------------------------------------------------------------------- /examples/flutter_login/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../../packages/bloc 4 | bloc_lint: 5 | path: ../../packages/bloc_lint 6 | bloc_test: 7 | path: ../../packages/bloc_test 8 | flutter_bloc: 9 | path: ../../packages/flutter_bloc 10 | -------------------------------------------------------------------------------- /examples/flutter_login/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_login/web/favicon.png -------------------------------------------------------------------------------- /examples/flutter_login/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_login/web/icons/Icon-192.png -------------------------------------------------------------------------------- /examples/flutter_login/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_login/web/icons/Icon-512.png -------------------------------------------------------------------------------- /examples/flutter_login/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_login/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /examples/flutter_login/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_login/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /examples/flutter_shopping_cart/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - package:bloc_lint/recommended.yaml 3 | - ../../analysis_options.yaml 4 | 5 | linter: 6 | rules: 7 | public_member_api_docs: false 8 | -------------------------------------------------------------------------------- /examples/flutter_shopping_cart/lib/cart/cart.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/cart_bloc.dart'; 2 | export 'models/models.dart'; 3 | export 'view/cart_page.dart'; 4 | -------------------------------------------------------------------------------- /examples/flutter_shopping_cart/lib/cart/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'cart.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_shopping_cart/lib/catalog/bloc/catalog_event.dart: -------------------------------------------------------------------------------- 1 | part of 'catalog_bloc.dart'; 2 | 3 | sealed class CatalogEvent extends Equatable { 4 | const CatalogEvent(); 5 | } 6 | 7 | final class CatalogStarted extends CatalogEvent { 8 | @override 9 | List get props => []; 10 | } 11 | -------------------------------------------------------------------------------- /examples/flutter_shopping_cart/lib/catalog/catalog.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/catalog_bloc.dart'; 2 | export 'models/models.dart'; 3 | export 'view/catalog_page.dart'; 4 | -------------------------------------------------------------------------------- /examples/flutter_shopping_cart/lib/catalog/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'catalog.dart'; 2 | export 'item.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_shopping_cart/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../../packages/bloc 4 | bloc_lint: 5 | path: ../../packages/bloc_lint 6 | bloc_test: 7 | path: ../../packages/bloc_test 8 | flutter_bloc: 9 | path: ../../packages/flutter_bloc 10 | -------------------------------------------------------------------------------- /examples/flutter_shopping_cart/test/catalog/models/item_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_shopping_cart/catalog/catalog.dart'; 2 | import 'package:flutter_test/flutter_test.dart'; 3 | 4 | void main() { 5 | group('Item', () { 6 | test('supports value comparison', () async { 7 | expect(Item(1, 'item #1'), Item(1, 'item #1')); 8 | }); 9 | }); 10 | } 11 | -------------------------------------------------------------------------------- /examples/flutter_shopping_cart/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_shopping_cart/web/favicon.png -------------------------------------------------------------------------------- /examples/flutter_shopping_cart/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_shopping_cart/web/icons/Icon-192.png -------------------------------------------------------------------------------- /examples/flutter_shopping_cart/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_shopping_cart/web/icons/Icon-512.png -------------------------------------------------------------------------------- /examples/flutter_shopping_cart/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_shopping_cart/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /examples/flutter_shopping_cart/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_shopping_cart/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /examples/flutter_timer/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - package:bloc_lint/recommended.yaml 3 | - ../../analysis_options.yaml 4 | 5 | linter: 6 | rules: 7 | public_member_api_docs: false 8 | -------------------------------------------------------------------------------- /examples/flutter_timer/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_timer/app.dart'; 3 | 4 | void main() => runApp(const App()); 5 | -------------------------------------------------------------------------------- /examples/flutter_timer/lib/ticker.dart: -------------------------------------------------------------------------------- 1 | class Ticker { 2 | const Ticker(); 3 | Stream tick({required int ticks}) { 4 | return Stream.periodic( 5 | const Duration(seconds: 1), 6 | (x) => ticks - x - 1, 7 | ).take(ticks); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /examples/flutter_timer/lib/timer/timer.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/timer_bloc.dart'; 2 | export 'view/timer_page.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_timer/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../../packages/bloc 4 | bloc_lint: 5 | path: ../../packages/bloc_lint 6 | bloc_test: 7 | path: ../../packages/bloc_test 8 | flutter_bloc: 9 | path: ../../packages/flutter_bloc 10 | -------------------------------------------------------------------------------- /examples/flutter_timer/test/ticker_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_test/flutter_test.dart'; 2 | import 'package:flutter_timer/ticker.dart'; 3 | 4 | void main() { 5 | group('Ticker', () { 6 | const ticker = Ticker(); 7 | test('ticker emits 3 ticks from 2-0 every second', () { 8 | expectLater(ticker.tick(ticks: 3), emitsInOrder([2, 1, 0])); 9 | }); 10 | }); 11 | } 12 | -------------------------------------------------------------------------------- /examples/flutter_timer/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_timer/web/favicon.png -------------------------------------------------------------------------------- /examples/flutter_timer/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_timer/web/icons/Icon-192.png -------------------------------------------------------------------------------- /examples/flutter_timer/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_timer/web/icons/Icon-512.png -------------------------------------------------------------------------------- /examples/flutter_timer/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_timer/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /examples/flutter_timer/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_timer/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /examples/flutter_todos/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - package:bloc_lint/recommended.yaml 3 | - ../../analysis_options.yaml 4 | 5 | linter: 6 | rules: 7 | public_member_api_docs: false 8 | -------------------------------------------------------------------------------- /examples/flutter_todos/l10n.yaml: -------------------------------------------------------------------------------- 1 | arb-dir: lib/l10n 2 | template-arb-file: app_en.arb 3 | output-localization-file: app_localizations.dart 4 | nullable-getter: false 5 | synthetic-package: false -------------------------------------------------------------------------------- /examples/flutter_todos/lib/edit_todo/edit_todo.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/edit_todo_bloc.dart'; 2 | export 'view/view.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_todos/lib/edit_todo/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'edit_todo_page.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_todos/lib/home/cubit/home_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | import 'package:equatable/equatable.dart'; 3 | 4 | part 'home_state.dart'; 5 | 6 | class HomeCubit extends Cubit { 7 | HomeCubit() : super(const HomeState()); 8 | 9 | void setTab(HomeTab tab) => emit(HomeState(tab: tab)); 10 | } 11 | -------------------------------------------------------------------------------- /examples/flutter_todos/lib/home/cubit/home_state.dart: -------------------------------------------------------------------------------- 1 | part of 'home_cubit.dart'; 2 | 3 | enum HomeTab { todos, stats } 4 | 5 | final class HomeState extends Equatable { 6 | const HomeState({ 7 | this.tab = HomeTab.todos, 8 | }); 9 | 10 | final HomeTab tab; 11 | 12 | @override 13 | List get props => [tab]; 14 | } 15 | -------------------------------------------------------------------------------- /examples/flutter_todos/lib/home/home.dart: -------------------------------------------------------------------------------- 1 | export 'cubit/home_cubit.dart'; 2 | export 'view/view.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_todos/lib/home/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'home_page.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_todos/lib/l10n/l10n.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/widgets.dart'; 2 | import 'package:flutter_todos/l10n/app_localizations.dart'; 3 | 4 | export 'package:flutter_todos/l10n/app_localizations.dart'; 5 | 6 | extension AppLocalizationsX on BuildContext { 7 | AppLocalizations get l10n => AppLocalizations.of(this); 8 | } 9 | -------------------------------------------------------------------------------- /examples/flutter_todos/lib/stats/bloc/stats_event.dart: -------------------------------------------------------------------------------- 1 | part of 'stats_bloc.dart'; 2 | 3 | sealed class StatsEvent extends Equatable { 4 | const StatsEvent(); 5 | 6 | @override 7 | List get props => []; 8 | } 9 | 10 | final class StatsSubscriptionRequested extends StatsEvent { 11 | const StatsSubscriptionRequested(); 12 | } 13 | -------------------------------------------------------------------------------- /examples/flutter_todos/lib/stats/stats.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/stats_bloc.dart'; 2 | export 'view/view.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_todos/lib/stats/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'stats_page.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_todos/lib/todos_overview/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'todos_view_filter.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_todos/lib/todos_overview/todos_overview.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/todos_overview_bloc.dart'; 2 | export 'models/models.dart'; 3 | export 'view/view.dart'; 4 | export 'widgets/widgets.dart'; 5 | -------------------------------------------------------------------------------- /examples/flutter_todos/lib/todos_overview/view/view.dart: -------------------------------------------------------------------------------- 1 | export 'todos_overview_page.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_todos/lib/todos_overview/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'todo_list_tile.dart'; 2 | export 'todos_overview_filter_button.dart'; 3 | export 'todos_overview_options_button.dart'; 4 | -------------------------------------------------------------------------------- /examples/flutter_todos/packages/local_storage_todos_api/README.md: -------------------------------------------------------------------------------- 1 | # local_storage_todos_api 2 | 3 | [![License: MIT][license_badge]][license_link] 4 | 5 | A Very Good Project created by Very Good CLI. 6 | 7 | [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg 8 | [license_link]: https://opensource.org/licenses/MIT 9 | -------------------------------------------------------------------------------- /examples/flutter_todos/packages/local_storage_todos_api/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../../../analysis_options.yaml -------------------------------------------------------------------------------- /examples/flutter_todos/packages/local_storage_todos_api/lib/local_storage_todos_api.dart: -------------------------------------------------------------------------------- 1 | /// A Flutter implementation of the TodosApi that uses local storage. 2 | library local_storage_todos_api; 3 | 4 | export 'package:shared_preferences/shared_preferences.dart' 5 | show SharedPreferences; 6 | 7 | export 'src/local_storage_todos_api.dart'; 8 | -------------------------------------------------------------------------------- /examples/flutter_todos/packages/todos_api/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://www.dartlang.org/guides/libraries/private-files 2 | 3 | # Files and directories created by pub 4 | .dart_tool/ 5 | .packages 6 | build/ 7 | pubspec.lock -------------------------------------------------------------------------------- /examples/flutter_todos/packages/todos_api/README.md: -------------------------------------------------------------------------------- 1 | # todos_api 2 | 3 | [![License: MIT][license_badge]][license_link] 4 | 5 | A Very Good Project created by Very Good CLI. 6 | 7 | [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg 8 | [license_link]: https://opensource.org/licenses/MIT -------------------------------------------------------------------------------- /examples/flutter_todos/packages/todos_api/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../../../analysis_options.yaml 2 | -------------------------------------------------------------------------------- /examples/flutter_todos/packages/todos_api/lib/src/models/json_map.dart: -------------------------------------------------------------------------------- 1 | /// The type definition for a JSON-serializable [Map]. 2 | typedef JsonMap = Map; 3 | -------------------------------------------------------------------------------- /examples/flutter_todos/packages/todos_api/lib/src/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'json_map.dart'; 2 | export 'todo.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_todos/packages/todos_api/lib/todos_api.dart: -------------------------------------------------------------------------------- 1 | /// The interface and models for an API providing access to todos. 2 | library todos_api; 3 | 4 | export 'src/models/models.dart'; 5 | export 'src/todos_api.dart'; 6 | -------------------------------------------------------------------------------- /examples/flutter_todos/packages/todos_repository/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://www.dartlang.org/guides/libraries/private-files 2 | 3 | # Files and directories created by pub 4 | .dart_tool/ 5 | .packages 6 | build/ 7 | pubspec.lock -------------------------------------------------------------------------------- /examples/flutter_todos/packages/todos_repository/README.md: -------------------------------------------------------------------------------- 1 | # todos_repository 2 | 3 | [![License: MIT][license_badge]][license_link] 4 | 5 | A Very Good Project created by Very Good CLI. 6 | 7 | [license_badge]: https://img.shields.io/badge/license-MIT-blue.svg 8 | [license_link]: https://opensource.org/licenses/MIT -------------------------------------------------------------------------------- /examples/flutter_todos/packages/todos_repository/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../../../analysis_options.yaml 2 | -------------------------------------------------------------------------------- /examples/flutter_todos/packages/todos_repository/lib/todos_repository.dart: -------------------------------------------------------------------------------- 1 | /// A repository that handles `todo` related requests. 2 | library todos_repository; 3 | 4 | export 'package:todos_api/todos_api.dart' show Todo; 5 | export 'src/todos_repository.dart'; 6 | -------------------------------------------------------------------------------- /examples/flutter_todos/packages/todos_repository/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: todos_repository 2 | description: A repository that handles todo related requests. 3 | version: 1.0.0+1 4 | publish_to: none 5 | 6 | environment: 7 | sdk: ">=3.8.0 <4.0.0" 8 | 9 | dependencies: 10 | todos_api: 11 | path: ../todos_api 12 | 13 | dev_dependencies: 14 | mocktail: ^1.0.0 15 | test: ^1.21.4 16 | -------------------------------------------------------------------------------- /examples/flutter_todos/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../../packages/bloc 4 | bloc_lint: 5 | path: ../../packages/bloc_lint 6 | bloc_test: 7 | path: ../../packages/bloc_test 8 | flutter_bloc: 9 | path: ../../packages/flutter_bloc 10 | -------------------------------------------------------------------------------- /examples/flutter_todos/test/helpers/finders.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_test/flutter_test.dart'; 2 | 3 | extension ExtraFinders on CommonFinders { 4 | /// Finds a widget by a specific type [T]. 5 | /// 6 | /// ```dart 7 | /// find.bySpecificType>() 8 | /// ``` 9 | Finder bySpecificType() => find.byType(T); 10 | } 11 | -------------------------------------------------------------------------------- /examples/flutter_todos/test/helpers/helpers.dart: -------------------------------------------------------------------------------- 1 | export 'finders.dart'; 2 | export 'l10n.dart'; 3 | export 'pump_app.dart'; 4 | -------------------------------------------------------------------------------- /examples/flutter_todos/test/helpers/l10n.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_todos/l10n/app_localizations.dart'; 2 | import 'package:flutter_todos/l10n/app_localizations_en.dart'; 3 | 4 | AppLocalizations get l10n => AppLocalizationsEn(); 5 | -------------------------------------------------------------------------------- /examples/flutter_todos/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_todos/web/favicon.png -------------------------------------------------------------------------------- /examples/flutter_todos/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_todos/web/icons/Icon-192.png -------------------------------------------------------------------------------- /examples/flutter_todos/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_todos/web/icons/Icon-512.png -------------------------------------------------------------------------------- /examples/flutter_todos/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_todos/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /examples/flutter_todos/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_todos/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /examples/flutter_weather/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - package:bloc_lint/recommended.yaml 3 | - ../../analysis_options.yaml 4 | 5 | analyzer: 6 | exclude: 7 | - lib/**/*.g.dart 8 | linter: 9 | rules: 10 | public_member_api_docs: false 11 | -------------------------------------------------------------------------------- /examples/flutter_weather/assets/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_weather/assets/clear.png -------------------------------------------------------------------------------- /examples/flutter_weather/assets/cloudy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_weather/assets/cloudy.png -------------------------------------------------------------------------------- /examples/flutter_weather/assets/rainy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_weather/assets/rainy.png -------------------------------------------------------------------------------- /examples/flutter_weather/assets/snow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_weather/assets/snow.png -------------------------------------------------------------------------------- /examples/flutter_weather/assets/thunderstorm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_weather/assets/thunderstorm.png -------------------------------------------------------------------------------- /examples/flutter_weather/build.yaml: -------------------------------------------------------------------------------- 1 | targets: 2 | $default: 3 | builders: 4 | json_serializable: 5 | options: 6 | field_rename: snake 7 | checked: true 8 | explicit_to_json: true 9 | -------------------------------------------------------------------------------- /examples/flutter_weather/lib/search/search.dart: -------------------------------------------------------------------------------- 1 | export 'view/search_page.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_weather/lib/settings/settings.dart: -------------------------------------------------------------------------------- 1 | export 'view/settings_page.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_weather/lib/weather/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'weather.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_weather/lib/weather/weather.dart: -------------------------------------------------------------------------------- 1 | export 'package:weather_repository/weather_repository.dart' 2 | show WeatherCondition; 3 | export 'cubit/weather_cubit.dart'; 4 | export 'models/models.dart'; 5 | export 'view/weather_page.dart'; 6 | export 'widgets/widgets.dart'; 7 | -------------------------------------------------------------------------------- /examples/flutter_weather/lib/weather/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'weather_empty.dart'; 2 | export 'weather_error.dart'; 3 | export 'weather_loading.dart'; 4 | export 'weather_populated.dart'; 5 | -------------------------------------------------------------------------------- /examples/flutter_weather/packages/open_meteo_api/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../../../analysis_options.yaml 2 | analyzer: 3 | exclude: 4 | - lib/**/*.g.dart 5 | linter: 6 | rules: 7 | public_member_api_docs: false 8 | -------------------------------------------------------------------------------- /examples/flutter_weather/packages/open_meteo_api/build.yaml: -------------------------------------------------------------------------------- 1 | targets: 2 | $default: 3 | builders: 4 | source_gen|combining_builder: 5 | options: 6 | ignore_for_file: 7 | - implicit_dynamic_parameter 8 | json_serializable: 9 | options: 10 | field_rename: snake 11 | create_to_json: false 12 | checked: true 13 | -------------------------------------------------------------------------------- /examples/flutter_weather/packages/open_meteo_api/lib/open_meteo_api.dart: -------------------------------------------------------------------------------- 1 | export 'src/models/models.dart'; 2 | export 'src/open_meteo_api_client.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_weather/packages/open_meteo_api/lib/src/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'location.dart'; 2 | export 'weather.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_weather/packages/weather_repository/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../../../analysis_options.yaml 2 | analyzer: 3 | exclude: 4 | - lib/**/*.g.dart 5 | linter: 6 | rules: 7 | public_member_api_docs: false 8 | -------------------------------------------------------------------------------- /examples/flutter_weather/packages/weather_repository/build.yaml: -------------------------------------------------------------------------------- 1 | targets: 2 | $default: 3 | builders: 4 | json_serializable: 5 | options: 6 | field_rename: snake 7 | checked: true 8 | -------------------------------------------------------------------------------- /examples/flutter_weather/packages/weather_repository/lib/src/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'weather.dart'; 2 | -------------------------------------------------------------------------------- /examples/flutter_weather/packages/weather_repository/lib/weather_repository.dart: -------------------------------------------------------------------------------- 1 | export 'src/models/models.dart'; 2 | export 'src/weather_repository.dart'; 3 | -------------------------------------------------------------------------------- /examples/flutter_weather/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../../packages/bloc 4 | bloc_lint: 5 | path: ../../packages/bloc_lint 6 | bloc_test: 7 | path: ../../packages/bloc_test 8 | flutter_bloc: 9 | path: ../../packages/flutter_bloc 10 | hydrated_bloc: 11 | path: ../../packages/hydrated_bloc 12 | -------------------------------------------------------------------------------- /examples/flutter_weather/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_weather/web/favicon.png -------------------------------------------------------------------------------- /examples/flutter_weather/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_weather/web/icons/Icon-192.png -------------------------------------------------------------------------------- /examples/flutter_weather/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_weather/web/icons/Icon-512.png -------------------------------------------------------------------------------- /examples/flutter_weather/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_weather/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /examples/flutter_weather/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_weather/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /examples/flutter_wizard/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - package:bloc_lint/recommended.yaml 3 | - ../../analysis_options.yaml 4 | 5 | linter: 6 | rules: 7 | public_member_api_docs: false 8 | -------------------------------------------------------------------------------- /examples/flutter_wizard/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../../packages/bloc 4 | bloc_lint: 5 | path: ../../packages/bloc_lint 6 | flutter_bloc: 7 | path: ../../packages/flutter_bloc 8 | -------------------------------------------------------------------------------- /examples/flutter_wizard/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_wizard/web/favicon.png -------------------------------------------------------------------------------- /examples/flutter_wizard/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_wizard/web/icons/Icon-192.png -------------------------------------------------------------------------------- /examples/flutter_wizard/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_wizard/web/icons/Icon-512.png -------------------------------------------------------------------------------- /examples/flutter_wizard/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_wizard/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /examples/flutter_wizard/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/flutter_wizard/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /examples/github_search/angular_github_search/.gitignore: -------------------------------------------------------------------------------- 1 | # Files and directories created by pub 2 | .dart_tool/ 3 | .packages 4 | # Remove the following pattern if you wish to check in your lock file 5 | pubspec.lock 6 | 7 | # Conventional directory for build outputs 8 | build/ 9 | 10 | # Directory created by dartdoc 11 | doc/api/ 12 | -------------------------------------------------------------------------------- /examples/github_search/angular_github_search/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 1.0.0 2 | 3 | - Initial version, created by Stagehand 4 | -------------------------------------------------------------------------------- /examples/github_search/angular_github_search/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - package:bloc_lint/recommended.yaml 3 | - ../../../analysis_options.yaml 4 | 5 | analyzer: 6 | exclude: [build/**] 7 | errors: 8 | uri_has_not_been_generated: ignore 9 | 10 | linter: 11 | rules: 12 | public_member_api_docs: false 13 | -------------------------------------------------------------------------------- /examples/github_search/angular_github_search/lib/src/search_form/search_body/search_results/search_results_component.html: -------------------------------------------------------------------------------- 1 |
    2 |
  • 3 | 4 |
  • 5 |
6 | -------------------------------------------------------------------------------- /examples/github_search/angular_github_search/lib/src/search_form/search_form_component.html: -------------------------------------------------------------------------------- 1 |
2 |

GitHub Search

3 | 4 | 5 |
6 | -------------------------------------------------------------------------------- /examples/github_search/angular_github_search/lib/src/src.dart: -------------------------------------------------------------------------------- 1 | export 'github_search.dart'; 2 | -------------------------------------------------------------------------------- /examples/github_search/angular_github_search/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | angular_bloc: 3 | path: ../../../packages/angular_bloc 4 | bloc: 5 | path: ../../../packages/bloc 6 | bloc_lint: 7 | path: ../../../packages/bloc_lint 8 | build_modules: ^5.0.0 9 | build_web_compilers: ^4.0.0 -------------------------------------------------------------------------------- /examples/github_search/angular_github_search/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/github_search/angular_github_search/web/favicon.png -------------------------------------------------------------------------------- /examples/github_search/angular_github_search/web/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:angular_github_search/app_component.template.dart' as ng; 2 | import 'package:ngdart/angular.dart'; 3 | 4 | void main() { 5 | runApp(ng.AppComponentNgFactory); 6 | } 7 | -------------------------------------------------------------------------------- /examples/github_search/common_github_search/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - package:bloc_lint/recommended.yaml 3 | - ../../../analysis_options.yaml 4 | 5 | linter: 6 | rules: 7 | public_member_api_docs: false 8 | -------------------------------------------------------------------------------- /examples/github_search/common_github_search/lib/common_github_search.dart: -------------------------------------------------------------------------------- 1 | export 'src/github_cache.dart'; 2 | export 'src/github_client.dart'; 3 | export 'src/github_repository.dart'; 4 | export 'src/github_search_bloc/github_search_bloc.dart'; 5 | export 'src/github_search_bloc/github_search_event.dart'; 6 | export 'src/github_search_bloc/github_search_state.dart'; 7 | export 'src/models/models.dart'; 8 | -------------------------------------------------------------------------------- /examples/github_search/common_github_search/lib/src/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'github_user.dart'; 2 | export 'search_result.dart'; 3 | export 'search_result_error.dart'; 4 | export 'search_result_item.dart'; 5 | -------------------------------------------------------------------------------- /examples/github_search/common_github_search/lib/src/models/search_result_error.dart: -------------------------------------------------------------------------------- 1 | class SearchResultError implements Exception { 2 | SearchResultError({required this.message}); 3 | 4 | factory SearchResultError.fromJson(Map json) { 5 | return SearchResultError( 6 | message: json['message'] as String, 7 | ); 8 | } 9 | 10 | final String message; 11 | } 12 | -------------------------------------------------------------------------------- /examples/github_search/common_github_search/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../../../packages/bloc 4 | bloc_lint: 5 | path: ../../../packages/bloc_lint 6 | -------------------------------------------------------------------------------- /examples/github_search/flutter_github_search/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - package:bloc_lint/recommended.yaml 3 | - ../../../analysis_options.yaml 4 | 5 | analyzer: 6 | exclude: [build/**] 7 | 8 | linter: 9 | rules: 10 | public_member_api_docs: false 11 | -------------------------------------------------------------------------------- /examples/github_search/flutter_github_search/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../../../packages/bloc 4 | bloc_lint: 5 | path: ../../../packages/bloc_lint 6 | flutter_bloc: 7 | path: ../../../packages/flutter_bloc 8 | -------------------------------------------------------------------------------- /examples/github_search/flutter_github_search/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/github_search/flutter_github_search/web/favicon.png -------------------------------------------------------------------------------- /examples/github_search/flutter_github_search/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/github_search/flutter_github_search/web/icons/Icon-192.png -------------------------------------------------------------------------------- /examples/github_search/flutter_github_search/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/github_search/flutter_github_search/web/icons/Icon-512.png -------------------------------------------------------------------------------- /examples/github_search/flutter_github_search/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/github_search/flutter_github_search/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /examples/github_search/flutter_github_search/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/examples/github_search/flutter_github_search/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /extensions/intellij/assets/dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/extensions/intellij/assets/dialog.png -------------------------------------------------------------------------------- /extensions/intellij/assets/equatable_props_override.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/extensions/intellij/assets/equatable_props_override.png -------------------------------------------------------------------------------- /extensions/intellij/assets/intention_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/extensions/intellij/assets/intention_settings.png -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/gradle.properties: -------------------------------------------------------------------------------- 1 | kotlin.code.style=official 2 | kotlin.stdlib.default.dependency=true 3 | # Libraries versions 4 | lsp4jVersion=0.21.1 5 | lsp4ijVersion=0.12.0 6 | caseFormatVersion=0.2.0 7 | apacheCommonsTextVersion=1.13.1 -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/extensions/intellij/intellij_generator_plugin/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-all.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'intellij_generator_plugin' 2 | 3 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/java/com/bloc/intellij_generator_plugin/action/BlocTemplateType.java: -------------------------------------------------------------------------------- 1 | package com.bloc.intellij_generator_plugin.action; 2 | 3 | public enum BlocTemplateType { 4 | BASIC, 5 | EQUATABLE, 6 | FREEZED 7 | } 8 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/java/com/bloc/intellij_generator_plugin/intention_action/SnippetType.kt: -------------------------------------------------------------------------------- 1 | package com.bloc.intellij_generator_plugin.intention_action 2 | 3 | enum class SnippetType { 4 | BlocBuilder, BlocSelector, BlocListener, BlocProvider, BlocConsumer, RepositoryProvider, MultiBlocProvider, MultiRepositoryProvider, MultiBlocListener, 5 | } -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/icons/bloc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/extensions/intellij/intellij_generator_plugin/src/main/resources/icons/bloc.png -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/icons/cubit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/extensions/intellij/intellij_generator_plugin/src/main/resources/icons/cubit.png -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/intentionDescriptions/BlocConvertToMultiBlocListenerIntentionAction/description.html: -------------------------------------------------------------------------------- 1 | 2 | Converts BlocListener widget to MultiBlocListener. 3 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/intentionDescriptions/BlocConvertToMultiBlocProviderIntentionAction/description.html: -------------------------------------------------------------------------------- 1 | 2 | Converts BlocProvider widget to MultiBlocProvider. 3 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/intentionDescriptions/BlocConvertToMultiRepositoryProviderIntentionAction/description.html: -------------------------------------------------------------------------------- 1 | 2 | Converts RepositoryProvider widget to MultiRepositoryProvider. 3 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/intentionDescriptions/BlocWrapWithBlocBuilderIntentionAction/before.java.template: -------------------------------------------------------------------------------- 1 | class CounterScreen extends StatelessWidget { 2 | @override 3 | Widget build(BuildContext context) { 4 | return Scaffold( 5 | body: Center( 6 | child: Text('Example'), 7 | ), 8 | ); 9 | } 10 | } -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/intentionDescriptions/BlocWrapWithBlocBuilderIntentionAction/description.html: -------------------------------------------------------------------------------- 1 | 2 | Wraps the current widget in a BlocBuilder. 3 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/intentionDescriptions/BlocWrapWithBlocConsumerIntentionAction/before.java.template: -------------------------------------------------------------------------------- 1 | class CounterScreen extends StatelessWidget { 2 | @override 3 | Widget build(BuildContext context) { 4 | return Scaffold( 5 | body: Center( 6 | child: Text('Example'), 7 | ), 8 | ); 9 | } 10 | } -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/intentionDescriptions/BlocWrapWithBlocConsumerIntentionAction/description.html: -------------------------------------------------------------------------------- 1 | 2 | Wraps the current widget in a BlocConsumer. 3 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/intentionDescriptions/BlocWrapWithBlocListenerIntentionAction/before.java.template: -------------------------------------------------------------------------------- 1 | class CounterScreen extends StatelessWidget { 2 | @override 3 | Widget build(BuildContext context) { 4 | return Scaffold( 5 | body: Center( 6 | child: Text('Example'), 7 | ), 8 | ); 9 | } 10 | } -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/intentionDescriptions/BlocWrapWithBlocListenerIntentionAction/description.html: -------------------------------------------------------------------------------- 1 | 2 | Wraps the current widget in a BlocListener. 3 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/intentionDescriptions/BlocWrapWithBlocProviderIntentionAction/before.java.template: -------------------------------------------------------------------------------- 1 | class CounterScreen extends StatelessWidget { 2 | @override 3 | Widget build(BuildContext context) { 4 | return Scaffold( 5 | body: Center( 6 | child: Text('Example'), 7 | ), 8 | ); 9 | } 10 | } -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/intentionDescriptions/BlocWrapWithBlocProviderIntentionAction/description.html: -------------------------------------------------------------------------------- 1 | 2 | Wraps the current widget in a BlocProvider. 3 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/intentionDescriptions/BlocWrapWithBlocSelectorIntentionAction/before.java.template: -------------------------------------------------------------------------------- 1 | class CounterScreen extends StatelessWidget { 2 | @override 3 | Widget build(BuildContext context) { 4 | return Scaffold( 5 | body: Center( 6 | child: Text('Example'), 7 | ), 8 | ); 9 | } 10 | } -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/intentionDescriptions/BlocWrapWithBlocSelectorIntentionAction/description.html: -------------------------------------------------------------------------------- 1 | 2 | Wraps the current widget in a BlocSelector. 3 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/intentionDescriptions/BlocWrapWithRepositoryProviderIntentionAction/before.java.template: -------------------------------------------------------------------------------- 1 | class CounterScreen extends StatelessWidget { 2 | @override 3 | Widget build(BuildContext context) { 4 | return Scaffold( 5 | body: Center( 6 | child: Text('Example'), 7 | ), 8 | ); 9 | } 10 | } -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/intentionDescriptions/BlocWrapWithRepositoryProviderIntentionAction/description.html: -------------------------------------------------------------------------------- 1 | 2 | Wraps the current widget in a RepositoryProvider. 3 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/templates/bloc_basic/bloc_event.dart.template: -------------------------------------------------------------------------------- 1 | part of '{{bloc_snake_case}}_bloc.dart'; 2 | 3 | @immutable 4 | sealed class {{bloc_pascal_case}}Event {} 5 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/templates/bloc_basic/bloc_state.dart.template: -------------------------------------------------------------------------------- 1 | part of '{{bloc_snake_case}}_bloc.dart'; 2 | 3 | @immutable 4 | sealed class {{bloc_pascal_case}}State {} 5 | 6 | final class {{bloc_pascal_case}}Initial extends {{bloc_pascal_case}}State {} 7 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/templates/bloc_equatable/bloc_event.dart.template: -------------------------------------------------------------------------------- 1 | part of '{{bloc_snake_case}}_bloc.dart'; 2 | 3 | sealed class {{bloc_pascal_case}}Event extends Equatable { 4 | const {{bloc_pascal_case}}Event(); 5 | } 6 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/templates/bloc_freezed/bloc_event.dart.template: -------------------------------------------------------------------------------- 1 | part of '{{bloc_snake_case}}_bloc.dart'; 2 | 3 | @freezed 4 | class {{bloc_pascal_case}}Event with _${{bloc_pascal_case}}Event { 5 | const factory {{bloc_pascal_case}}Event.started() = _Started; 6 | } 7 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/templates/bloc_freezed/bloc_state.dart.template: -------------------------------------------------------------------------------- 1 | part of '{{bloc_snake_case}}_bloc.dart'; 2 | 3 | @freezed 4 | class {{bloc_pascal_case}}State with _${{bloc_pascal_case}}State { 5 | const factory {{bloc_pascal_case}}State.initial() = _Initial; 6 | } 7 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/templates/cubit_basic/cubit.dart.template: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | import 'package:meta/meta.dart'; 3 | 4 | part '{{cubit_snake_case}}_state.dart'; 5 | 6 | class {{cubit_pascal_case}}Cubit extends Cubit<{{cubit_pascal_case}}State> { 7 | {{cubit_pascal_case}}Cubit() : super({{cubit_pascal_case}}Initial()); 8 | } 9 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/templates/cubit_basic/cubit_state.dart.template: -------------------------------------------------------------------------------- 1 | part of '{{cubit_snake_case}}_cubit.dart'; 2 | 3 | @immutable 4 | sealed class {{cubit_pascal_case}}State {} 5 | 6 | final class {{cubit_pascal_case}}Initial extends {{cubit_pascal_case}}State {} 7 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/templates/cubit_equatable/cubit.dart.template: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | import 'package:equatable/equatable.dart'; 3 | 4 | part '{{cubit_snake_case}}_state.dart'; 5 | 6 | class {{cubit_pascal_case}}Cubit extends Cubit<{{cubit_pascal_case}}State> { 7 | {{cubit_pascal_case}}Cubit() : super({{cubit_pascal_case}}Initial()); 8 | } 9 | -------------------------------------------------------------------------------- /extensions/intellij/intellij_generator_plugin/src/main/resources/templates/cubit_freezed/cubit_state.dart.template: -------------------------------------------------------------------------------- 1 | part of '{{cubit_snake_case}}_cubit.dart'; 2 | 3 | @freezed 4 | class {{cubit_pascal_case}}State with _${{cubit_pascal_case}}State { 5 | const factory {{cubit_pascal_case}}State.initial() = _Initial; 6 | } 7 | -------------------------------------------------------------------------------- /extensions/vscode/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | out/ 3 | dist/ 4 | *.vsix -------------------------------------------------------------------------------- /extensions/vscode/.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | node_modules 4 | out/** 5 | src/** 6 | .gitignore 7 | vsc-extension-quickstart.md 8 | webpack.config.js 9 | **/tsconfig.json 10 | **/tslint.json 11 | **/*.map 12 | **/*.ts -------------------------------------------------------------------------------- /extensions/vscode/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/extensions/vscode/assets/logo.png -------------------------------------------------------------------------------- /extensions/vscode/assets/new-bloc-usage.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/extensions/vscode/assets/new-bloc-usage.gif -------------------------------------------------------------------------------- /extensions/vscode/assets/wrap-with-usage.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/extensions/vscode/assets/wrap-with-usage.gif -------------------------------------------------------------------------------- /extensions/vscode/src/code-actions/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./bloc-code-action-provider"; 2 | -------------------------------------------------------------------------------- /extensions/vscode/src/commands/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./convert-to.command"; 2 | export * from "./new-bloc.command"; 3 | export * from "./new-cubit.command"; 4 | export * from "./wrap-with.command"; 5 | -------------------------------------------------------------------------------- /extensions/vscode/src/language-server/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./language-server"; 2 | export * from "./selectors"; 3 | -------------------------------------------------------------------------------- /extensions/vscode/src/language-server/selectors.ts: -------------------------------------------------------------------------------- 1 | const ANALYSIS_OPTIONS_FILE = { 2 | pattern: "**/analysis_options.yaml", 3 | scheme: "file", 4 | }; 5 | const DART_FILE = { language: "dart", scheme: "file" }; 6 | 7 | export { ANALYSIS_OPTIONS_FILE, DART_FILE }; 8 | -------------------------------------------------------------------------------- /extensions/vscode/src/templates/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./bloc-event.template"; 2 | export * from "./bloc-state.template"; 3 | export * from "./bloc.template"; 4 | export * from "./cubit-state.template"; 5 | export * from "./cubit.template"; 6 | -------------------------------------------------------------------------------- /extensions/vscode/src/utils/has-dependency.ts: -------------------------------------------------------------------------------- 1 | import * as _ from "lodash"; 2 | 3 | import { getPubspec } from "."; 4 | 5 | export async function hasDependency(dependency: string) { 6 | const pubspec = await getPubspec(); 7 | const dependencies = _.get(pubspec, "dependencies", {}); 8 | return _.has(dependencies, dependency); 9 | } 10 | -------------------------------------------------------------------------------- /extensions/vscode/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "dist", 6 | "lib": ["es6", "DOM"], 7 | "sourceMap": true, 8 | "rootDir": "src", 9 | "strict": true, 10 | "noUnusedLocals": true, 11 | "noUnusedParameters": true 12 | }, 13 | "exclude": ["node_modules", ".vscode-test"] 14 | } 15 | -------------------------------------------------------------------------------- /extensions/vscode/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-string-throw": true, 4 | "no-unused-expression": true, 5 | "no-duplicate-variable": true, 6 | "curly": true, 7 | "class-name": true, 8 | "semicolon": [true, "always"], 9 | "triple-equals": true 10 | }, 11 | "defaultSeverity": "warning" 12 | } 13 | -------------------------------------------------------------------------------- /packages/angular_bloc/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../analysis_options.yaml -------------------------------------------------------------------------------- /packages/angular_bloc/lib/angular_bloc.dart: -------------------------------------------------------------------------------- 1 | /// Angular components that make it easy to implement the BLoC design pattern. 2 | /// Built to be used with the [bloc state management package](https://pub.dev/packages/bloc). 3 | /// 4 | /// Get started at [bloclibrary.dev](https://bloclibrary.dev) 🚀 5 | library angular_dart; 6 | 7 | export 'package:bloc/bloc.dart'; 8 | export './src/pipes/pipes.dart'; 9 | -------------------------------------------------------------------------------- /packages/angular_bloc/lib/src/pipes/pipes.dart: -------------------------------------------------------------------------------- 1 | export './bloc_pipe.dart' show BlocPipe; 2 | -------------------------------------------------------------------------------- /packages/angular_bloc/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../bloc 4 | -------------------------------------------------------------------------------- /packages/angular_bloc/screenshots/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/angular_bloc/screenshots/logo.png -------------------------------------------------------------------------------- /packages/bloc/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../analysis_options.yaml -------------------------------------------------------------------------------- /packages/bloc/lib/bloc.dart: -------------------------------------------------------------------------------- 1 | /// A predictable state management library for [Dart](https://dart.dev). 2 | /// 3 | /// Get started at [bloclibrary.dev](https://bloclibrary.dev) 🚀 4 | library bloc; 5 | 6 | export 'src/bloc.dart'; 7 | export 'src/bloc_observer.dart'; 8 | export 'src/change.dart'; 9 | export 'src/cubit.dart'; 10 | export 'src/transition.dart'; 11 | -------------------------------------------------------------------------------- /packages/bloc/screenshots/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/bloc/screenshots/logo.png -------------------------------------------------------------------------------- /packages/bloc/test/blocs/blocs.dart: -------------------------------------------------------------------------------- 1 | export './async/async_bloc.dart'; 2 | export './complex/complex_bloc.dart'; 3 | export './counter/counter.dart'; 4 | export './seeded/seeded_bloc.dart'; 5 | export './simple/simple_bloc.dart'; 6 | export './stream/stream.dart'; 7 | export './unawaited/unawaited_bloc.dart'; 8 | -------------------------------------------------------------------------------- /packages/bloc/test/blocs/counter/counter.dart: -------------------------------------------------------------------------------- 1 | export './counter_bloc.dart'; 2 | export './counter_error_bloc.dart'; 3 | export './counter_exception_bloc.dart'; 4 | export './merge_bloc.dart'; 5 | export './on_error_bloc.dart'; 6 | export './on_event_error_bloc.dart'; 7 | export './on_exception_bloc.dart'; 8 | export './on_transition_error_bloc.dart'; 9 | -------------------------------------------------------------------------------- /packages/bloc/test/blocs/simple/simple_bloc.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | class SimpleBloc extends Bloc { 4 | SimpleBloc() : super('') { 5 | on((_, emit) => emit('data')); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/bloc/test/blocs/stream/stream.dart: -------------------------------------------------------------------------------- 1 | export 'restartable_stream_bloc.dart'; 2 | export 'stream_bloc.dart'; 3 | -------------------------------------------------------------------------------- /packages/bloc/test/cubits/cubits.dart: -------------------------------------------------------------------------------- 1 | export 'counter_cubit.dart'; 2 | export 'fake_async_cubit.dart'; 3 | export 'seeded_cubit.dart'; 4 | -------------------------------------------------------------------------------- /packages/bloc/test/cubits/seeded_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | class SeededCubit extends Cubit { 4 | SeededCubit({required T initialState}) : super(initialState); 5 | 6 | void emitState(T state) => emit(state); 7 | } 8 | -------------------------------------------------------------------------------- /packages/bloc_concurrency/.gitignore: -------------------------------------------------------------------------------- 1 | # Files and directories created by pub 2 | .dart_tool/ 3 | .packages 4 | pubspec.lock 5 | 6 | # Conventional directory for build outputs 7 | build/ 8 | 9 | # Directory created by dartdoc 10 | doc/api/ 11 | 12 | # Temporary Files 13 | .tmp/ 14 | 15 | # Files generated during tests 16 | .test_coverage.dart 17 | coverage/ -------------------------------------------------------------------------------- /packages/bloc_concurrency/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../analysis_options.yaml 2 | analyzer: 3 | exclude: 4 | - "**/version.dart" 5 | -------------------------------------------------------------------------------- /packages/bloc_concurrency/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../bloc 4 | -------------------------------------------------------------------------------- /packages/bloc_concurrency/screenshots/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/bloc_concurrency/screenshots/logo.png -------------------------------------------------------------------------------- /packages/bloc_lint/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../analysis_options.yaml 2 | -------------------------------------------------------------------------------- /packages/bloc_lint/example/main.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: unused_local_variable 2 | import 'package:bloc_lint/bloc_lint.dart'; 3 | 4 | // Usage: dart run main.dart ./path/to/analyze 5 | void main(List args) { 6 | // Analyze the provided file or directory and report all diagnostics. 7 | final diagnostics = const Linter().analyze(uri: Uri.parse(args.first)); 8 | } 9 | -------------------------------------------------------------------------------- /packages/bloc_lint/lib/all.yaml: -------------------------------------------------------------------------------- 1 | bloc: 2 | rules: 3 | - avoid_flutter_imports 4 | - avoid_public_bloc_methods 5 | - avoid_public_fields 6 | - prefer_bloc 7 | - prefer_cubit 8 | - prefer_void_public_cubit_methods 9 | -------------------------------------------------------------------------------- /packages/bloc_lint/lib/recommended.yaml: -------------------------------------------------------------------------------- 1 | bloc: 2 | rules: 3 | - avoid_flutter_imports 4 | - avoid_public_bloc_methods 5 | - avoid_public_fields 6 | - prefer_void_public_cubit_methods 7 | -------------------------------------------------------------------------------- /packages/bloc_lint/lib/src/rules/rules.dart: -------------------------------------------------------------------------------- 1 | export 'avoid_flutter_imports.dart'; 2 | export 'avoid_public_bloc_methods.dart'; 3 | export 'avoid_public_fields.dart'; 4 | export 'prefer_bloc_lint.dart'; 5 | export 'prefer_cubit_lint.dart'; 6 | export 'prefer_void_public_cubit_methods.dart'; 7 | -------------------------------------------------------------------------------- /packages/bloc_lint/screenshots/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/bloc_lint/screenshots/logo.png -------------------------------------------------------------------------------- /packages/bloc_test/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../analysis_options.yaml -------------------------------------------------------------------------------- /packages/bloc_test/lib/bloc_test.dart: -------------------------------------------------------------------------------- 1 | /// A testing library which makes it easy to test blocs. 2 | /// 3 | /// Get started at [bloclibrary.dev](https://bloclibrary.dev) 🚀 4 | library bloc_test; 5 | 6 | export 'src/bloc_test.dart'; 7 | export 'src/mock_bloc.dart'; 8 | export 'src/when_listen.dart'; 9 | -------------------------------------------------------------------------------- /packages/bloc_test/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../bloc 4 | -------------------------------------------------------------------------------- /packages/bloc_test/screenshots/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/bloc_test/screenshots/logo.png -------------------------------------------------------------------------------- /packages/bloc_test/test/cubits/async_counter_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | 3 | import 'package:bloc/bloc.dart'; 4 | 5 | class AsyncCounterCubit extends Cubit { 6 | AsyncCounterCubit() : super(0); 7 | 8 | Future increment() async { 9 | await Future.delayed(const Duration(microseconds: 1)); 10 | emit(state + 1); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/bloc_test/test/cubits/counter_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | class CounterCubit extends Cubit { 4 | CounterCubit() : super(0); 5 | 6 | void increment() => emit(state + 1); 7 | } 8 | -------------------------------------------------------------------------------- /packages/bloc_test/test/cubits/delayed_counter_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | class DelayedCounterCubit extends Cubit { 4 | DelayedCounterCubit() : super(0); 5 | 6 | void increment() { 7 | Future.delayed( 8 | const Duration(milliseconds: 300), 9 | () { 10 | if (!isClosed) emit(state + 1); 11 | }, 12 | ); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/bloc_test/test/cubits/error_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | class ErrorCubit extends Cubit { 4 | ErrorCubit() : super(0); 5 | 6 | void throwError(Error e) => throw e; 7 | } 8 | -------------------------------------------------------------------------------- /packages/bloc_test/test/cubits/exception_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | class ExceptionCubit extends Cubit { 4 | ExceptionCubit() : super(0); 5 | 6 | void throwException(Exception e) => throw e; 7 | } 8 | -------------------------------------------------------------------------------- /packages/bloc_test/test/cubits/instant_emit_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | class InstantEmitCubit extends Cubit { 4 | InstantEmitCubit() : super(0) { 5 | emit(1); 6 | } 7 | 8 | void increment() => emit(state + 1); 9 | } 10 | -------------------------------------------------------------------------------- /packages/bloc_test/test/cubits/multi_counter_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:bloc/bloc.dart'; 2 | 3 | class MultiCounterCubit extends Cubit { 4 | MultiCounterCubit() : super(0); 5 | 6 | void increment() { 7 | emit(state + 1); 8 | emit(state + 1); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/bloc_tools/.gitignore: -------------------------------------------------------------------------------- 1 | # Files and directories created by pub 2 | .dart_tool/ 3 | .packages 4 | pubspec.lock 5 | 6 | # Conventional directory for build outputs 7 | build/ 8 | 9 | # Directory created by dartdoc 10 | doc/api/ 11 | 12 | # Temporary Files 13 | .tmp/ 14 | 15 | # Files generated during tests 16 | .test_coverage.dart 17 | coverage/ -------------------------------------------------------------------------------- /packages/bloc_tools/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../analysis_options.yaml 2 | analyzer: 3 | exclude: 4 | - "**/version.dart" 5 | -------------------------------------------------------------------------------- /packages/bloc_tools/dart_test.yaml: -------------------------------------------------------------------------------- 1 | tags: 2 | pull-request-only: 3 | skip: "Should only be run during pull request" 4 | -------------------------------------------------------------------------------- /packages/bloc_tools/e2e/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: e2e 2 | version: 0.1.0+1 3 | publish_to: none 4 | 5 | environment: 6 | sdk: ">=3.7.0 <4.0.0" 7 | 8 | dependencies: 9 | path: ^1.0.0 10 | -------------------------------------------------------------------------------- /packages/bloc_tools/example/README.md: -------------------------------------------------------------------------------- 1 | # Activate the Bloc Command Line Tools 2 | 3 | ```sh 4 | dart pub global activate bloc_tools 5 | ``` 6 | 7 | # See list of available commands 8 | 9 | ```sh 10 | bloc --help 11 | ``` 12 | -------------------------------------------------------------------------------- /packages/bloc_tools/lib/src/commands/commands.dart: -------------------------------------------------------------------------------- 1 | export 'language_server/language_server_command.dart'; 2 | export 'lint/lint_command.dart'; 3 | export 'new/new_command.dart'; 4 | -------------------------------------------------------------------------------- /packages/bloc_tools/lib/src/version.dart: -------------------------------------------------------------------------------- 1 | // Generated code. Do not modify. 2 | const packageVersion = '0.1.0-dev.13'; 3 | -------------------------------------------------------------------------------- /packages/bloc_tools/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc_lint: 3 | path: ../bloc_lint -------------------------------------------------------------------------------- /packages/bloc_tools/screenshots/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/bloc_tools/screenshots/logo.png -------------------------------------------------------------------------------- /packages/bloc_tools/test/ensure_build_test.dart: -------------------------------------------------------------------------------- 1 | @Tags(['pull-request-only']) 2 | library ensure_build_test; 3 | 4 | import 'package:build_verify/build_verify.dart'; 5 | import 'package:test/test.dart'; 6 | 7 | void main() { 8 | test('ensure_build', () { 9 | expectBuildClean(packageRelativeDirectory: 'packages/bloc_tools'); 10 | }); 11 | } 12 | -------------------------------------------------------------------------------- /packages/flutter_bloc/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../analysis_options.yaml -------------------------------------------------------------------------------- /packages/flutter_bloc/example/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../../analysis_options.yaml 2 | -------------------------------------------------------------------------------- /packages/flutter_bloc/example/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: example 2 | description: A new Flutter project. 3 | version: 1.0.0+1 4 | publish_to: none 5 | 6 | environment: 7 | sdk: ">=3.0.0 <4.0.0" 8 | 9 | dependencies: 10 | flutter: 11 | sdk: flutter 12 | flutter_bloc: ^9.1.0 13 | 14 | flutter: 15 | uses-material-design: true 16 | -------------------------------------------------------------------------------- /packages/flutter_bloc/example/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | flutter_bloc: 3 | path: ../ -------------------------------------------------------------------------------- /packages/flutter_bloc/example/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/flutter_bloc/example/web/favicon.png -------------------------------------------------------------------------------- /packages/flutter_bloc/example/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/flutter_bloc/example/web/icons/Icon-192.png -------------------------------------------------------------------------------- /packages/flutter_bloc/example/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/flutter_bloc/example/web/icons/Icon-512.png -------------------------------------------------------------------------------- /packages/flutter_bloc/example/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/flutter_bloc/example/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /packages/flutter_bloc/example/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/flutter_bloc/example/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /packages/flutter_bloc/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../bloc 4 | -------------------------------------------------------------------------------- /packages/flutter_bloc/screenshots/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/flutter_bloc/screenshots/logo.png -------------------------------------------------------------------------------- /packages/hydrated_bloc/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../analysis_options.yaml 2 | analyzer: 3 | exclude: 4 | - test/cubits/freezed_cubit.freezed.dart 5 | - test/cubits/freezed_cubit.g.dart 6 | -------------------------------------------------------------------------------- /packages/hydrated_bloc/build.yaml: -------------------------------------------------------------------------------- 1 | targets: 2 | $default: 3 | builders: 4 | source_gen|combining_builder: 5 | options: 6 | ignore_for_file: 7 | - implicit_dynamic_parameter 8 | - unnecessary_null_checks -------------------------------------------------------------------------------- /packages/hydrated_bloc/example/README.md: -------------------------------------------------------------------------------- 1 | # Hydrated Bloc Example 2 | 3 | A sample project that showcases how to use package:hydrated_bloc. 4 | -------------------------------------------------------------------------------- /packages/hydrated_bloc/example/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../../analysis_options.yaml 2 | linter: 3 | rules: 4 | public_member_api_docs: false 5 | -------------------------------------------------------------------------------- /packages/hydrated_bloc/example/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../../bloc 4 | flutter_bloc: 5 | path: ../../flutter_bloc 6 | hydrated_bloc: 7 | path: ../ 8 | -------------------------------------------------------------------------------- /packages/hydrated_bloc/example/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/hydrated_bloc/example/web/favicon.png -------------------------------------------------------------------------------- /packages/hydrated_bloc/example/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/hydrated_bloc/example/web/icons/Icon-192.png -------------------------------------------------------------------------------- /packages/hydrated_bloc/example/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/hydrated_bloc/example/web/icons/Icon-512.png -------------------------------------------------------------------------------- /packages/hydrated_bloc/example/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/hydrated_bloc/example/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /packages/hydrated_bloc/example/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/hydrated_bloc/example/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /packages/hydrated_bloc/lib/src/_migration/_migration_stub.dart: -------------------------------------------------------------------------------- 1 | import 'package:hive_ce/hive.dart'; 2 | 3 | /// The storage migration implementation stub. 4 | Future migrate(String directory, Box box) async {} 5 | -------------------------------------------------------------------------------- /packages/hydrated_bloc/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../bloc 4 | -------------------------------------------------------------------------------- /packages/hydrated_bloc/screenshots/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/hydrated_bloc/screenshots/logo.png -------------------------------------------------------------------------------- /packages/hydrated_bloc/test/cubits/cubits.dart: -------------------------------------------------------------------------------- 1 | export 'bad_cubit.dart'; 2 | export 'cyclic_cubit.dart'; 3 | export 'freezed_cubit.dart'; 4 | export 'from_json_state_cubit.dart'; 5 | export 'json_serializable_cubit.dart'; 6 | export 'list_cubit.dart'; 7 | export 'manual_cubit.dart'; 8 | export 'simple_cubit.dart'; 9 | -------------------------------------------------------------------------------- /packages/replay_bloc/.gitignore: -------------------------------------------------------------------------------- 1 | # Don’t commit the following directories created by pub. 2 | .dart_tool 3 | .packages 4 | pubspec.lock 5 | 6 | # Don’t commit the following directories generated by package:test 7 | coverage/ 8 | .test_coverage.dart 9 | *.lcov 10 | 11 | .DS_Store 12 | 13 | # Exceptions to the above rules 14 | !coverage_badge.svg -------------------------------------------------------------------------------- /packages/replay_bloc/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../analysis_options.yaml -------------------------------------------------------------------------------- /packages/replay_bloc/example/README.md: -------------------------------------------------------------------------------- 1 | # Replay Bloc Example 2 | 3 | A sample project that showcases how to use package:replay_bloc. 4 | -------------------------------------------------------------------------------- /packages/replay_bloc/example/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: ../../../analysis_options.yaml 2 | -------------------------------------------------------------------------------- /packages/replay_bloc/example/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../../bloc 4 | flutter_bloc: 5 | path: ../../flutter_bloc 6 | replay_bloc: 7 | path: ../ 8 | -------------------------------------------------------------------------------- /packages/replay_bloc/example/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/replay_bloc/example/web/favicon.png -------------------------------------------------------------------------------- /packages/replay_bloc/example/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/replay_bloc/example/web/icons/Icon-192.png -------------------------------------------------------------------------------- /packages/replay_bloc/example/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/replay_bloc/example/web/icons/Icon-512.png -------------------------------------------------------------------------------- /packages/replay_bloc/example/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/replay_bloc/example/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /packages/replay_bloc/example/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/replay_bloc/example/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /packages/replay_bloc/lib/replay_bloc.dart: -------------------------------------------------------------------------------- 1 | /// An extension to the [bloc state management library](https://pub.dev/packages/bloc) 2 | /// which adds support for undo and redo. 3 | /// 4 | /// Get started at [bloclibrary.dev](https://bloclibrary.dev) 🚀 5 | library replay_bloc; 6 | 7 | export 'package:bloc/bloc.dart'; 8 | export 'src/replay_cubit.dart'; 9 | -------------------------------------------------------------------------------- /packages/replay_bloc/pubspec_overrides.yaml: -------------------------------------------------------------------------------- 1 | dependency_overrides: 2 | bloc: 3 | path: ../bloc 4 | -------------------------------------------------------------------------------- /packages/replay_bloc/screenshots/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/felangel/bloc/1490936ba00c0f8952c7520833438e0324e1e2e4/packages/replay_bloc/screenshots/logo.png -------------------------------------------------------------------------------- /packages/replay_bloc/test/main.dart: -------------------------------------------------------------------------------- 1 | import 'replay_bloc_test.dart' as replay_bloc_test; 2 | import 'replay_cubit_test.dart' as replay_cubit_test; 3 | 4 | void main() { 5 | replay_cubit_test.main(); 6 | replay_bloc_test.main(); 7 | } 8 | --------------------------------------------------------------------------------