Timestamps: 0:01:41 [01] Explanation & Project Structure 0:25:14 [02] Entities & Use Cases 1:03:45 [03] Domain Layer Refactoring 1:26:41 [04] Data Layer Overview & Models 1:56:17 [05] Contracts of Data Sources 2:22:32 [06] Repository Implementation 3:03:38 [07] Network Info 3:23:15 [08] Local Data Source 3:53:15 [09] Remote Data Source 4:24:46 [10] Bloc Scaffolding & Input Conversion 4:50:57 [11] Bloc Implementation 1/2 (and Basics of Test Driven Development) 5:26:47 [12] Bloc Implementation 2/2 5:59:15 [13] Dependency Injection 6:29:22 [14] User Interface
@ResoCoder5 жыл бұрын
Whoah! You're faster than me. Thank you!
@saisonysrinu5 жыл бұрын
Very very useful. Thank U
@shantanooh64554 жыл бұрын
@@ResoCoder By TDD it meant that test drives the design. But I am confused by the fact that in this tutorial you have not written UI test or integression tests. Just the unit tests which will drive our business logic but not UI or it's logic. It will be really useful if we get a bigger project to get more of this tutorial. Your tutorial and teaching methodology is really great. Thanks. Also, adding your references for creating this tutorial in description will also help us to get into more details.
@nepalesecreator86714 жыл бұрын
God bless
@vutuananh7473 жыл бұрын
@@shantanooh6455 I think he keeps the rest for people who subscribed his courses, and he should be.
@rossthemusicandguitarteacher4 жыл бұрын
I would have paid good money for this course. Just finished the video version, now I am going to go through the written version a few times. This guy is SOLID AF! :)
@nabijonazamov36955 жыл бұрын
Before watching this tutorial, I thought that I was not a professional flutter programmer, after watching it I realized that my thoughts were correct. Thanks to the author, I learned a lot of things
@nvr__4 жыл бұрын
Hey hi, iam just begginer. I complete flutter begginer course in net ninja . Do u need any further things to take this course. Plse show me a path , I follow docs now, but I have idea of nothing I got.
@BelgianDaSeeD5 жыл бұрын
Seriously man, you're my preferred content creator about flutter. I love your way to explain things. It's always clear and without any glitch disturbing the learning curve ! Keep up the good work dude !
@achinthaisuru80474 жыл бұрын
mine preferred content creator abot flutter as well , keep up the good work @rescoCoder
@JimmyCheng5 жыл бұрын
man, you are the hero of 2020!
@reyPiti5 жыл бұрын
33:04 for the lastest version of equatable instead of NumberTrivia({@required this.text, @required this.number}) : super([text, number]); the new way to pass the parameters is through an override of props --> NumberTrivia({@required this.text, @required this.number}); @override List get props => [text, number]; Just something I noticed while following the tutorial
@solomonaryeetey73704 жыл бұрын
This is absolutely the best Flutter content is this whole world!!!!!!
@rossthemusicandguitarteacher4 жыл бұрын
For the bloc -> use add instead of dispatch if you are following along with current package versions. Also, in the current version of bloc, the bloc.state will return the current state and not the stream. So just use bloc, and the test will pass just fine. :) At about 5:19:00
@DennisIvy5 жыл бұрын
Just had this video recommended to me by KZbin and I had to check out your channel because of your awesome thumbnails. Seriously, love the way your feed looks. Good thumbnails tell me the creator took time on the video. I’ll be following :)
@ResoCoder5 жыл бұрын
Thank you for noticing 🥳
@spanndanbhandari3172 жыл бұрын
Thank you completed 7 hrs course...learnt alot!
@amitforever20074 жыл бұрын
Great tutorial, I used flutter bloc 5.0.0 and followed your tutorial anyone facing problem passing test at this 5:30:00 For Initial state use test('initial state should be empty', () async { final initialState = await bloc.first; expect(initialState, equals(Empty())); }); -------------------- test('should emit [Error] when the input is invalid', () async { //arrange when(mockInputConverter.stringToUnsignedInteger(any)) .thenReturn(Left(InvalidInputFailure())); //assert later final expected = [ Empty(), Error(message: INVALID_INPUT_FAILURE_MESSAGE), ]; expectLater(bloc.asBroadcastStream(), emitsInOrder(expected)); //act bloc.add(GetTriviaForConcreteNumber(tNumberString)); }); ---------------------
@ankitlakum14 жыл бұрын
I salute your patience for being with us for such a elastic elaboration
@FonkamL4 жыл бұрын
On a very serious note, flutter and everything aside. Your mic and sound quality is amazing👌🏿👌🏿. There are many good courses out there one can't complete because of headache caused by the poor sound quality. Thank you!
@M.BilalAhmad4 жыл бұрын
So precious knowledge, flawlessly delivered without any charges. Amazing! Hats off to you! Watched this video twice to get the grip :)
@ShadowInfest5 жыл бұрын
Best series on flutter in one video, for what more you could ask 😂🔥👊🏻 thanks a lot.
@pedrodelacruz23694 жыл бұрын
Done!!! This has beem one of the most important Tutorials for me!! i am going to start the next FB & DDD Tutorial. Thanks Reso!!!
@Akleo59 Жыл бұрын
Thank you so much man, this course was so interesting and especially with the modifications to perform with all the new versions of the differents packages forces us to trully understand what's going on. Can"t thank you enough for the knowledge i got through out this course 👏👏
@4funrc115 жыл бұрын
_Clean Architecture_ says it all! And for my mindset, simply can't be stressed enough. Thank you.
@elliotalderson37244 жыл бұрын
Thank you for the excellent tutorial! It's even better than most of the paid stuff on udemy... Really good work!
@jakeromeopeniano13564 жыл бұрын
Gem tutorial with no ads.
@MuslimStoic1232 жыл бұрын
it so informative that i watch it full video without any break thank u reso bro
@matthieuregnauld96482 жыл бұрын
This is some next level tutorial. Thanks to you, I finally managed to understand many concepts I had a hard time wrapping my head around. Thank you so much!
@meek68362 жыл бұрын
this is 2 years old, still relevant?
@lone.wo1f5 жыл бұрын
Wow, just wow! You should be a flutter GDE!
@ResoCoder5 жыл бұрын
Spread the message! 😄
@purushottamkumar38533 жыл бұрын
@@ResoCoder now
@joyblanks5 жыл бұрын
Very well articulated. you have patience and skills hats off to you brother. thanks for this awesome tutorial
@swplogic41585 жыл бұрын
My friend, where did you learn this? Awesome! Thank you a lot man
@ispiretechnologies5 жыл бұрын
You rock My dear sir, please keep us learning, and we cant thank you enough, all love from Zimbabwe.
@mihaiignat23065 жыл бұрын
AFRICA ARISE HonestChiefPoet iwe! You started learning flutter? Give me your watsapp number and we can learn together tho
@TM-xp7hd Жыл бұрын
Just reached the 3 hour mark and this course is beating my ass 🤣 Thanks for the awesome instruction.
@gautambedi591 Жыл бұрын
Next level content mate! Loved it
@clintonomondi49493 жыл бұрын
Im restarting my app again coz of my spaghetti code but for some reason i am so excited to do coz i was so worried about the crash reports i was gonna get ... TDD actually grows on you and men! it sticks
@kaunk11834 жыл бұрын
Are 10 dislikers kinda struggling React Native users? :D Gosh, this is gold, as always.
@krzysztofk.88423 жыл бұрын
Well there's some issues with the architecture, for example, @ResoCoder keeps sayin that these modules are "completely independent". But it's not the case. Nothing is stopping developers to write code where domain logic (or data) has dependency on presentation layer, which breaks the entire idea.
@elpolodiablo5486 Жыл бұрын
Bro this is so cringe
@MrJahchap5 жыл бұрын
Wow! Content so good no single dislike. Thanks thanks people! 457th Like was from me. Let's keep it coming people.
@haidernaqvi87 Жыл бұрын
How to handle the stream like firestore stream in the streambuilder widget in the UI. Anybody can give an exampleof the usecase, data source?
@davidalejandroreyesmilian95014 жыл бұрын
thanks for such a detailed and easy to consume content. Great work!
@osamadarabeh2 жыл бұрын
Thanks a lot for your great tutorials, it was beneficial for me in my career.
@fclinuxnova79775 жыл бұрын
the new version of equatable 1.0.2 change the code like this, and will it be ok when we do not use meta in code: 36:43 class NumberTrivia extends Equatable{ final String text; final int number; NumberTrivia(this.text, this.number); @override List get props => [text, number]; /* equatable version 0.4.0 NumberTrivia({ @required this.text, @required this.number, }) : super([text, number]); */ }
@user-sankarsana5 жыл бұрын
Sumptuously! Do not come off! Thanks for the job.
@anandkumark33965 жыл бұрын
Thanks for your valuable content. It helped me to be a better programmer. I started applying clean architecture to my office project. I have a question: ** My app has Authentication and Homepage (contains basic info of all modules in the application, like info about the number of applications to approve whereas the applications list is the separate page). How to divide the complete app into features? Should I consider the whole authentication module(Login, Signup, OTP Verification) as one feature ? Or each individual page itself as a feature? Would like to know your valuable insights about it. Thanks for your valuable time.
@jeffglenn52484 жыл бұрын
You have helped me immensely. Thank you for everything you do!
@Benony915 жыл бұрын
At 3:45:50. If anyone has issues with testing that the getLastNumberTrivia throws a CacheException, then make sure that you imported 'package:matcher/matcher.dart' but not 'package:flutter/material.dart'.......
@jimmyfmedina5 жыл бұрын
Excellent work, amazing as well as Flutter. Your videos and content on Flutter are very helpful and useful.
@jabbarbakhshande13954 жыл бұрын
always enjoy your videos. please enable CC caption for this video, thanks in advance
@as-pn9105 жыл бұрын
This can be one of the best thing ever created in the flutter world. Since the day one of Android development I was looking for something like this. And with flutter this architecture seems to be perfect, scalable, colloborative. After this course entire flutter app can be planned using UML and Mind Map, only thing remain to do is coding which later becomes really easy. It will be highly appreciated if you can make an note app starting from UML, TDD + Architecture.
@bacsiszekely21493 жыл бұрын
Omg you are a godsent, this series was super helpful, learned a lot. But let's turn to the real questions, what font and theme were you using in the videos ?
@alex_moreno4 жыл бұрын
What a master class! Thanks a lot for sharing this. You are amazing
@robbenooyens20644 жыл бұрын
3:12:28 Thought my speaker broke or something haha Anyway, nice tutorial! Perfect for beginning flutter-devs!
@ResoCoder4 жыл бұрын
Holy smokes! I almost lost my left ear. Pardon the Premiere Pro rendering 😅
@chinyun15262 жыл бұрын
04:17:00 Just wanna know that should we test the parsing error for JSON? that makes It throw an unexpected exception, and also the previous part, we used `on ServerException` instead of `catch(e`), that made the repository break Either? Is this expected? Will you guys handle these cases in production?
@phamluc26614 жыл бұрын
Thanks so much Reso Your tutorial is very useful to me
@TevaIllathaAani5 жыл бұрын
u r my hero ...respect from INDIA sallluuuuuuuuuuuuuuuute!
@patricklin10143 жыл бұрын
This is amazing and really appreciated. Thank you for making these!!
@PhillipMwaniki5 жыл бұрын
I just found about you.... And I thank God for it!!!!!!
@JayeshLathiya77 Жыл бұрын
Thank you SO much, Really appreciate your effort.
@그르릉-f3c4 жыл бұрын
I am in love !! Thank you for the good tutorial
@he.who.debugs2 жыл бұрын
Damn, man!! I'm waiting for more more more videos like this one from you
@rossthemusicandguitarteacher4 жыл бұрын
Muuuuuuuuuuuuuuuuuch love for this my friend.
@Cryaxxx4 жыл бұрын
1. TypeMatcher is deprecated use isInstanceOf rather for the test in number_trivia_local_data_source_test to pass. 2.Add this to your manifest file to allow unsecured HTTP connection as the API has no https provision Thanks for the awesome tutorial
@karleisheim80435 жыл бұрын
video suggestion: showing how to share data between blocs using clean architecture. Best explained by example: You have an app in which the user can save e.g. recipes. In this app, you can navigate to different routes, and also edit recipes. If the user does so, the recipe data has to update on every opened screen on the navigation stack. How can this be archieved by Clean Architecture (with Bloc)? I know that one way to fo this is to pass blocs to other blocs in the constructor and listen for changes. But that doesn't seem nice.. I feel like it would be best to implement it on other layers. Thanks for your awesome work!
@ResoCoder5 жыл бұрын
Thanks for the suggestion, I've just added it to my list. However, passing BLoCs into constructors is what I'm doing in apps I build for clients too and it seems to be working fine. I'm not sure what else we can do while keeping the app "non-overengineered".
@karleisheim80435 жыл бұрын
@@ResoCoder I thought about getting the data as Streams out of the repository, so that the Blocs listen to changes and don't have to listen for actions in other blocs, which may cause changes. Like the first answer of phillywiggins suggests: www.reddit.com/r/FlutterDev/comments/asgggp/recommended_way_to_share_data_between_blocs/ But yeah it would cause more code and may be overengeneered then.. Thanks for putting this topic on your list anyways! :D
@KanishkaDilshan5 жыл бұрын
This is super useful! Really appreciate your effort.
@foufoulala4 жыл бұрын
Great content, but I think there is a mistake. In an "Onion" architecture, the domain is at the center. That means that you should not use external dependencies in your domain because it makes it dependant on something out of your control. As far as I understand this kind of architecture, the domain should be pure. Btw, this is by far the most professional content on flutter that I have found.
@johnpaulcarter74 жыл бұрын
He explicitly proposes “Reso Coder's Flutter Clean Architecture Proposal” for implementing the Onion.
@sumeet96764 жыл бұрын
@Reso Coder 1:52:13 what if backend developer screws the JSON. like number will be received as null or "1"? TDD is scary. Fun until you receive weird JSON changes overnight. Also, when new keys are added to the JSON for displaying in the UI, we will still have to touch multiple layers to make it compatible right?
@leviroelofsma79585 жыл бұрын
Thanks for making this tutorial.
@AlexChe75 жыл бұрын
This is gold. Thanks, sincerely.
@nicolasdupere3 жыл бұрын
No. This is Diamond.
@evansowamoyo26124 жыл бұрын
I have a very crucial question, say for example, I have many features I want to implement in my app, namely, authentication feature, data fetching using REST, using datas like Maps, and many other device specific functions, do i have to create features like this for all of them as regards clean architecture or I can mix them??.. I am confused
@ArielMoments2 жыл бұрын
Hey, I'm really glad that you made these course. And, Im really enjoying learning here. However, I'm having some issues with the website though. Whenever I try to load more content, the page keeps loading. On the network tab, I seem to get the 403 error for some reason.
@dilyorbekalimov27594 жыл бұрын
Full Course was awesome! Are you going to add UI tests too?
@mercenex63295 жыл бұрын
Thank you SO much man! Really appreciate your effort.
@etiennetheodore5 жыл бұрын
Wow the full tuto is 7hours long oO ! With 13 videos we don’t know haha. Very thanks for this content ! You rock !
@ResoCoder5 жыл бұрын
I was quite shocked as well 😄
@wSRV5 жыл бұрын
Amazing job, dude! Thank you very much!
@adailyq Жыл бұрын
Жақсы курс. Рахмет!
@chrislamont75294 жыл бұрын
For anyone looking to add the aaa snippet: Visual Studio Code > Code > Preferences > User Snippets and paste this in. "Test AAA": { "prefix": "aaa", "body": [ "test(", " 'should $0',", " () async {", " // arrange", " ", " // act", " ", " // assert", " ", " },", ");" ], "description": "Test with arrange, act and assert" }
@kyawzin-kz5 жыл бұрын
I love this kind of long videos
@XxX0Simpen1XxX4 жыл бұрын
He is using the extension "Material Icon Theme" by Philipp Kief (with some tweaks to it in the settings.json) if anyone else but me wondered :)
@JkeyKong5 жыл бұрын
2:23:45 I will continue it by tomorrow
@ResoCoder5 жыл бұрын
Slacker! 😂😂😂 JK
@JkeyKong5 жыл бұрын
@@ResoCoder ok continue again
@ognacyyoutuification3 жыл бұрын
pure gold, thank you
@DeathStocker4 жыл бұрын
3:20 clicks random trivia, gets 69. Nice. XD
@yoriichi288 ай бұрын
Great video @ResoCoder Suppose there is some variable like bool , string or any variable that can change UI like isSaved Something like that so if we need to handle them how we can Like in Getx we can declare in controller file but in this structure how we can manage As u said in bloc there will be only less logic like calling apiRepo/use case so can you explain that one? It will be great. Also more question on any sdk implementation like firebase services or suppose we are using any ChatSdk so how do we manage that in clean architecture
@alex_kenbo5 жыл бұрын
Timeline step-by-step screenshots for this course alexkenbo.github.io/index.html ✅success run test ⛔️failed run test
@ResoCoder5 жыл бұрын
This is amazing! 🤩🤯 If only I could pin multiple comments 😢
@alex_kenbo5 жыл бұрын
@@ResoCoder Comments for the step? Yes, I think that would be great. There is the ability to display any html with the image.
@evansowamoyo26124 жыл бұрын
how also do we implement clean architecture when we want to create an app that has so many screens if only this one screen has so much code
@LuisDa202 жыл бұрын
Is better, this arquitecture is for large proyects, imagine having 40 screens and 200 widgets in two folders and the code keep growing, just whit folders the code is a mess whit clean arquitecture you now the modules of your proyects and it's more organized
@faisalansari8092 Жыл бұрын
Correct
@haydensprogramming67664 жыл бұрын
A better idea than using the NoParams class for the use cases is to use the Unit type from dartz, which is a functional programming concept anyway.
@ronytesler3 жыл бұрын
Is it updated for today? For example, does it take into consideration the 'provider' package?
@michaelbedry35304 жыл бұрын
Where can I find your code snippets like aaatest, etc
@kretynek12 жыл бұрын
Number trivia, you are Talking about code design and abstraction, and at the same time you are bound to ints. What if I would like to change api to return doubles, or number trivia could return for example pi or Euler number info? Maybe it does?
@harisijazwarraich13063 жыл бұрын
I have a question? Can I use the Clean Architecture with GetX?
@kavinkumar-v Жыл бұрын
Can you explain how to use when we have multiple feature like login, signup, setting? And Whether we need to make the user entity in core folder. Looking for reply or video about it.
@Linxy5 жыл бұрын
Fantasic Video Job Good Man
@code59312 күн бұрын
still very useful tutorial ever
@THEMithrandir094 жыл бұрын
How can you use such simple names like "Error" for the BLoC states? Wouldn't you get a naming collision as soon as you create your second bloc?
@mehranshoghii54933 жыл бұрын
Amazing! 😍
@TalksFromCar Жыл бұрын
@reso coder - can you update the course and can anyone help me how http interceptor will work in these case
@PrabhathDarshana3 жыл бұрын
Man, you are a Legend! (Y)
@twh45265 жыл бұрын
Thank you kind sir. I'm a relative newb to programming. But I've made a few basic apps and just finished one fully working one for a client. They were all spaghetti without any formal architectures. So thank you very much for this, even though I will have to look up a lot of terminologies you may use. A few questions if I may: 1. What theme are you using for your vs code? 2. Is there a way to make vs code Debug Console color coded so I can read them much more easily? 3. How do you do that auto import classes thingy when you code? Is that an extension or a shortcut? Thanks!
@dawidniegrebecki22054 жыл бұрын
Great tutorial
@kretynek12 жыл бұрын
Wouldnt it be better to make failure dependend on exception, and then return dependant of it...? No copy paste?
@akshaymankodia90034 жыл бұрын
@Reso , please upload for the Firebase sign In methods with the same architecture. it will be helpful in understanding repos implementation better.
@88res4 жыл бұрын
Why did you use a Failure class instead of the try/catch pattern? Try/catch is what Clean Code recommends. Curious on the motivation for that
@adeelzahid96223 жыл бұрын
Super Awesome 👌👌👍👍💕💕
@evansowamoyo26124 жыл бұрын
Why do we have to use Params and NoParams for the usecases?
@eliasayele11023 жыл бұрын
Thanks brother, and we expect updates
@awangprajaanugerah82313 жыл бұрын
What if I have more than one feature that is almost the same for example a feature to display a news and search for a news, how to divide the project structure for presentation, domain, and data
@tamacroft5 жыл бұрын
love this tutorial, thanks
@kobowo4 жыл бұрын
Hi Matt, great tutorial! We're trying to implement your architecture into our own app. I just wanted to ask about handling global state. If lets say I had a login feature and this returns a User object, how would I go about sharing the User object to other features without breaking the concepts of clean architecture? Nice explanation on how to TDD without going insane btw XD