diff --git a/subjects/mobile-dev/bloc-counter/README.md b/subjects/mobile-dev/bloc-counter/README.md index e752cc8fe..ebbd3ba5f 100644 --- a/subjects/mobile-dev/bloc-counter/README.md +++ b/subjects/mobile-dev/bloc-counter/README.md @@ -1,34 +1,25 @@ -# Bloc Counter +## Bloc Counter -### Introduction +As projects get bigger and more complex, managing all the widgets, their states, and updating their children's states can become troublesome. To avoid potential complexity, it is recommended to use **Patterns**. Patterns are built to help developers control the hierarchy of widgets more easily, and one popular pattern in Flutter is `BLoC`. -Usually, when projects get bigger and more complex, managing all the widges, their states, and updating their children's states will become troublesome. To avoid possible complexity, we recommend using **Patterns**. -Patterns are built in a way that lets developers control the hierarchy of widgets much easier, and a popular one in the Flutter is - BLoC. - -Implement simple counter app using Bloc Pattern. -When you start writing your own application, you will need to structure your app first. +In this project, you will implement a simple `counter app`,like the example bellow, using the `BLoC` pattern. When you start writing your own application, structuring it correctly is important. -### Objective +### Instructions - Observe state changes with `BlocObserver`. -- `BlocProvider`, Flutter widget which provides a bloc to its children. -- `BlocBuilder`, Flutter widget that handles building the widget in response to new states. - -In this subject you will implement Bloc pattern, which is created by Google. -BLoC pattern uses Reactive Programming to handle the flow of data within an app. +- Use `BlocProvider`, a Flutter widget which provides a bloc to its children. +- Use `BlocBuilder`, a Flutter widget that handles building the widget in response to new states. -Bloc consist of 2 concepts : +`BLoC` pattern uses reactive programming to handle the flow of data within an app. -- `Streams` -- `Sinks` - , which are provided by `StreamController`. +A Bloc consists of 2 concepts, `Streams` and `Sinks`, which are provided by `StreamController`.
 
 💡 See this article  Architect your Flutter project using BLoC pattern, by Sagar Suri.
- 
+
 
@@ -36,14 +27,15 @@ Bloc consist of 2 concepts :
 
 💡 Documentation https://bloclibrary.dev/#/gettingstarted.
- 
+
 
-### Part 1 +### Project Setup + +- Create a new Flutter app, so it generates a sample Counter App. +- Add `flutter_bloc` as a dependency to your app. -- Create new flutter app, so it will generate sample Counter App -- Add flutter_bloc as a dependecy of your app -- App structure should be similar to: +Your app structure should be similar to: ```bash —lib @@ -56,9 +48,9 @@ Bloc consist of 2 concepts : —main.dart ``` -### Part 2 +### Bloc Implementation -- add enum to bloc/couter_event.dart +- Add an enum to `bloc/couter_event.dart`. ```jsx enum CounterEvent { @@ -66,15 +58,15 @@ enum CounterEvent { } ``` -- go to bloc/counter_bloc.dart and create `CounterBloc` class which extends from `CounterBloc` +- Go to `bloc/counter_bloc.dart` and create a `CounterBloc` class that extends `CounterBloc`. -> 💡 note: you can generate bloc files using vscode extension +> Note: you can generate bloc files using vscode extension. -- implement override of `mapEventToState` function in `CounterBloc` class, so it will be switching between different events, and return value as an int. In our case we only have case with increment state +- Implement an override of the `mapEventToState` function in the `CounterBloc` class, so it switches between different events and returns the value as an `int`. In our case, we only have a case with an increment state. -### Part 3 (UI and getting data) +### UI and getting data -- Inside MyApp class wrap your home page with BlocProvider class. +- Inside the `MyApp` class, wrap your home page with a `BlocProvider` class. ```jsx return MaterialApp( @@ -85,10 +77,10 @@ return MaterialApp( ); ``` -- Inside Home class create instance of CounterBloc class -- Use BlocBuilder to state from CounterBloc -- Add "+" button to call CounterEvent.increment +- Inside the `Home` class, create an instance of the `CounterBloc` class. +- Use `BlocBuilder` to state from `CounterBloc`. +- Add a "+" button to call `CounterEvent.increment`. ### Bonus -- add button and event to handle decrementing counter +- Add button and event to handle decrementing the counter. diff --git a/subjects/mobile-dev/bloc-counter/audit/README.md b/subjects/mobile-dev/bloc-counter/audit/README.md index 6be5bfcf1..c505267d7 100644 --- a/subjects/mobile-dev/bloc-counter/audit/README.md +++ b/subjects/mobile-dev/bloc-counter/audit/README.md @@ -1,13 +1,17 @@ #### Functional -> In order to run and hot reload app either on emulator or device, follow the [instructions](https://docs.flutter.dev/get-started/test-drive?tab=androidstudio#run-the-app) +> In order to run and hot reload the app either on emulator or device, follow the [instructions](https://docs.flutter.dev/get-started/test-drive?tab=androidstudio#run-the-app) ###### Does the app run without any crashes? -###### Can you increment counter? +###### Can you increment the counter by tapping the "+" button? -###### Can you decrement counter? +###### Can you decrement the counter by tapping the "-" button? -###### Is the BLoC pattern implemented properly? Do you see blockobserver, blockprovider, blockbuilder explicitly? +###### Is the BLoC pattern implemented properly? Can you see the BlocObserver, BlocProvider, and BlocBuilder being used explicitly in the code? -###### Are incrementing and decrememting implemented using BLoC pattern? +###### Are the increment and decrement operations implemented using the BLoC pattern, with the CounterBloc class managing the state of the counter? + +###### Does the app properly display the current value of the counter, and does it update automatically when the counter's value changes? + +###### Are all relevant files and folders organized properly, according to the recommended project structure in the README?