Awesome
<p align="center"> <img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/logos/bloc.png" height="100" alt="Bloc" /> </p> <p align="center"> <a href="https://github.com/felangel/bloc/actions"><img src="https://github.com/felangel/bloc/workflows/build/badge.svg" alt="build"></a> <a href="https://codecov.io/gh/felangel/bloc"><img src="https://codecov.io/gh/felangel/Bloc/branch/master/graph/badge.svg" alt="codecov"></a> <a href="https://github.com/felangel/bloc"><img src="https://img.shields.io/github/stars/felangel/bloc.svg?style=flat&logo=github&colorB=deeppink&label=stars" alt="Star on Github"></a> <a href="https://flutter.dev/docs/development/data-and-backend/state-mgmt/options#bloc--rx"><img src="https://img.shields.io/badge/flutter-website-deepskyblue.svg" alt="Flutter Website"></a> <a href="https://github.com/Solido/awesome-flutter#standard"><img src="https://img.shields.io/badge/awesome-flutter-blue.svg?longCache=true" alt="Awesome Flutter"></a> <a href="http://fluttersamples.com"><img src="https://img.shields.io/badge/flutter-samples-teal.svg?longCache=true" alt="Flutter Samples"></a> <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-purple.svg" alt="License: MIT"></a> <a href="https://discord.gg/bloc"><img src="https://img.shields.io/discord/649708778631200778.svg?logo=discord&color=blue" alt="Discord"></a> <a href="https://github.com/felangel/bloc"><img src="https://tinyurl.com/bloc-library" alt="Bloc Library"></a> </p>A predictable state management library that helps implement the BLoC design pattern.
Package | Pub |
---|---|
bloc | |
bloc_test | |
bloc_concurrency | |
flutter_bloc | |
angular_bloc | |
hydrated_bloc | |
replay_bloc |
Sponsors
Our top sponsors are shown below! [Become a Sponsor]
<table style="background-color: white; border: 1px solid black"> <tbody> <tr> <td align="center" style="border: 1px solid black"> <a href="https://shorebird.dev"><img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/sponsors/shorebird.png" width="225"/></a> </td> <td align="center" style="border: 1px solid black"> <a href="https://www.monterail.com/services/flutter-development/?utm_source=bloc&utm_medium=logo&utm_campaign=flutter"><img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/sponsors/monterail.png" width="225"/></a> </td> <td align="center" style="border: 1px solid black"> <a href="https://getstream.io/chat/flutter/tutorial/?utm_source=Github&utm_medium=Github_Repo_Content_Ad&utm_content=Developer&utm_campaign=Github_Jan2022_FlutterChat&utm_term=bloc"><img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/sponsors/stream.png" width="225"/></a> </td> </tr> <tr> <td align="center" style="border: 1px solid black"> <a href="https://www.miquido.com/flutter-development-company/?utm_source=github&utm_medium=sponsorship&utm_campaign=bloc-silver-tier&utm_term=flutter-development-company&utm_content=miquido-logo"><img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/sponsors/miquido.png" width="225"/></a> </td> <td align="center" style="border: 1px solid black"> <a href="https://bit.ly/parabeac_flutterbloc"><img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/sponsors/parabeac.png" width="225"/></a> </td> <td align="center" style="border: 1px solid black"> <a href="https://www.netguru.com/services/flutter-app-development?utm_campaign=%5BS%5D%5BMob%5D%20Flutter&utm_source=github&utm_medium=sponsorship&utm_term=bloclibrary"><img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/sponsors/netguru.png" width="225"/></a> </td> </tr> </tbody> </table>Overview
<img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/diagrams/bloc_architecture.png" width="500" alt="Bloc Architecture"></img>
The goal of this library is to make it easy to separate presentation from business logic, facilitating testability and reusability.
Documentation
- Official Documentation
- Bloc Package
- Bloc Test Package
- Bloc Concurrency Package
- Flutter Bloc Package
- Angular Bloc Package
- Hydrated Bloc Package
- Replay Bloc Package
Migration
Examples
<div style="text-align: center"> <table> <tr> <td style="text-align: center"> <a href="https://bloclibrary.dev/tutorials/flutter-counter"> <img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/examples/flutter_counter.gif" width="200"/> </a> </td> <td style="text-align: center"> <a href="https://bloclibrary.dev/tutorials/flutter-infinite-list"> <img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/examples/flutter_infinite_list.gif" width="200"/> </a> </td> <td style="text-align: center"> <a href="https://bloclibrary.dev/tutorials/flutter-login"> <img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/examples/flutter_firebase_login.gif" width="200" /> </a> </td> </tr> <tr> <td style="text-align: center"> <a href="https://bloclibrary.dev/tutorials/github-search"> <img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/examples/flutter_github_search.gif" width="200"/> </a> </td> <td style="text-align: center"> <a href="https://bloclibrary.dev/tutorials/flutter-weather"> <img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/examples/flutter_weather.gif" width="200"/> </a> </td> <td style="text-align: center"> <a href="https://bloclibrary.dev/tutorials/flutter-todos"> <img src="https://raw.githubusercontent.com/felangel/bloc/master/assets/examples/flutter_todos.gif" width="200"/> </a> </td> </tr> </table> </div>Dart
- Counter - an example of how to create a
CounterBloc
(pure dart).
Flutter
- Counter - an example of how to create a
CounterBloc
to implement the classic Flutter Counter app. - Form Validation - an example of how to use the
bloc
andflutter_bloc
packages to implement form validation. - Bloc with Stream - an example of how to hook up a
bloc
to aStream
and update the UI in response to data from theStream
. - Complex List - an example of how to manage a list of items and asynchronously delete items one at a time using
bloc
andflutter_bloc
. - Infinite List - an example of how to use the
bloc
andflutter_bloc
packages to implement an infinite scrolling list. - Login Flow - an example of how to use the
bloc
andflutter_bloc
packages to implement a Login Flow. - Firebase Login - an example of how to use the
bloc
andflutter_bloc
packages to implement login via Firebase. - Github Search - an example of how to create a Github Search Application using the
bloc
andflutter_bloc
packages. - Weather - an example of how to create a Weather Application using the
bloc
andflutter_bloc
packages. The app uses aRefreshIndicator
to implement "pull-to-refresh" as well as dynamic theming. - Todos - an example of how to create a Todos Application using the
bloc
andflutter_bloc
packages. - Timer - an example of how to create a Timer using the
bloc
andflutter_bloc
packages. - Shopping Cart - an example of how to create a Shopping Cart Application using the
bloc
andflutter_bloc
packages based on flutter samples. - Dynamic Form - an example of how to use the
bloc
andflutter_bloc
packages to implement a dynamic form which pulls data from a repository. - Wizard - an example of how to build a multi-step wizard using the
bloc
andflutter_bloc
packages. - Fluttersaurus - an example of how to use the
bloc
andflutter_bloc
packages to create a thesaurus app -- made for Bytconf Flutter 2020. - I/O Photo Booth - an example of how to use the
bloc
andflutter_bloc
packages to create a virtual photo booth web app -- made for Google I/O 2021. - I/O Pinball - an example of how to use the
bloc
andflutter_bloc
packages to create a pinball web app -- made for Google I/O 2022. - I/O Holobooth - an example of how to use the
bloc
andflutter_bloc
packages to create a virtual photobooth experience -- made for Flutter Forward. - I/O Flip - an example of how to use the
bloc
,flutter_bloc
, andflame_bloc
packages to create a card game -- made for Google I/O 2023.
Web
- Counter - an example of how to use a
CounterBloc
in an AngularDart app. - Github Search - an example of how to create a Github Search Application using the
bloc
andangular_bloc
packages.
Flutter + Web
- Github Search - an example of how to create a Github Search Application and share code between Flutter and AngularDart.
Articles
- Bloc package - An intro to the bloc package with high level architecture and examples.
- Login tutorial with flutter_bloc - How to create a full login flow using the bloc and flutter_bloc packages.
- Unit testing with bloc - How to unit test the blocs created in the flutter login tutorial.
- Infinite list tutorial with flutter_bloc - How to create an infinite list using the bloc and flutter_bloc packages.
- Code sharing with bloc - How to share code between a mobile application written with Flutter and a web application written with AngularDart.
- Weather app tutorial with flutter_bloc - How to build a weather app which supports dynamic theming, pull-to-refresh, and interacting with a REST API using the bloc and flutter_bloc packages.
- Todos app tutorial with flutter_bloc - How to build a todos app using the bloc and flutter_bloc packages.
- Firebase login tutorial with flutter_bloc - How to create a fully functional login/sign up flow using the bloc and flutter_bloc packages with Firebase Authentication and Google Sign In.
- Flutter timer tutorial with flutter_bloc - How to create a timer app using the bloc and flutter_bloc packages.
- Firestore todos tutorial with flutter_bloc - How to create a todos app using the bloc and flutter_bloc packages that integrates with cloud firestore.
Books
- Flutter Complete Reference - A book about the Dart programming language (version 2.10, with null safety support) and the Flutter framework (version 1.20). It covers the bloc package (version 6.0.3) in all flavors: bloc, flutter_bloc hydrated_bloc, replay_bloc, bloc_test and cubit.
Extensions
- IntelliJ - extends IntelliJ/Android Studio with support for the Bloc library and provides tools for effectively creating Blocs for both Flutter and AngularDart apps.
- VSCode - extends VSCode with support for the Bloc library and provides tools for effectively creating Blocs for both Flutter and AngularDart apps.
Community
Learn more at the following links, which have been contributed by the community.
Packages
- Bloc.js - A port of the
bloc
state management library from Dart to JavaScript, by Felix Angelov. - Firebase Auth - A Web, Mobile Firebase Auth Plugin, by Rody Davis.
- Form Bloc - An easy way to create forms with BLoC pattern without writing a lot of boilerplate code, by Giancarlo.
- Flame Bloc - Bloc integration for the Flame game engine, by Flame Engine.
Video Tutorials
- Bloc Library: Basics and Beyond 🚀 - Talk given at Flutter Europe about the basics of the bloc library, by Felix Angelov.
- Flutter Bloc Library Tutorial - Introduction to the Bloc Library, by Reso Coder.
- Flutter Youtube Search - How to build a Youtube Search app which interacts with an API using the bloc and flutter_bloc packages, by Reso Coder.
- Flutter Bloc - AUTOMATIC LOOKUP - v0.20 (and Up), Updated Tutorial - Updated Tutorial on the Flutter Bloc Package, by Reso Coder.
- Dynamic Theming with flutter_bloc - Tutorial on how to use the flutter_bloc package to implement dynamic theming, by Reso Coder.
- Persist Bloc State in Flutter - Tutorial on how to use the hydrated_bloc package to automatically persist app state, by Reso Coder.
- State Management Foundation - Introduction to state management using the flutter_bloc package, by Techie Blossom.
- Flutter Football Player Search - How to build a Football Player Search app which interacts with an API using the bloc and flutter_bloc packages, by Techie Blossom.
- Learning the Flutter Bloc Package - Learning the flutter_bloc package live, by Robert Brunhage
- Bloc Test Tutorial - Tutorial on how to unit test blocs using the bloc_test package, by Reso Coder.
- Bloc - from Zero to Hero - Playlist which includes everything needed to get started with bloc, by Flutterly.
- Bloc (Full Course, 11+ Hours) - Flutter State Management Course - 11+ hour video tutorial on Bloc and Flutter Bloc. In this video you will learn how to create fully fledged production-ready apps with Bloc and Firebase as your backend, by Vandad Nahavandipoor.
Written Resources
- DevonFw Flutter Guide - A guide on building structured & scalable applications with Flutter and BLoC, by Sebastian Faust
- Using Google´s Flutter Framework for the Development of a Large-Scale Reference Application - Scientific paper describing how to build a large-scale Flutter application with BLoC, by Sebastian Faust
Extensions
- Feature Scaffolding for VSCode - A VSCode extension inspired by Reso Coder's clean architecture tutorials, which helps quickly scaffold features, by Kiritchouk Clément.