Mastering Clean Architecture & Repository Pattern in Flutter
Вставка
- Опубліковано 30 лип 2024
- Take your Flutter skills to the next level with this Flutter tutorial. Learn how to apply SOLID principles and manage data from a remote API with ease using the Repository Pattern and Clean Architecture framework. You'll come away with the tools to create cleaner, more scalable code that's easy to maintain and update in your own Flutter projects.
☺ Support the channel:
Any donation is gratefully received, thank you!
- Via my website: davidserrano.io/sponsor
- Via UA-cam's Super Thanks (⬆ Button labeled THANKS above ⬆)
🔔 Subscribe:
Subscribe to my channel to see more videos like this:
www.youtube.com/@david-serrano...
📖 Useful resources:
- Remote API used in this tutorial:
rapidapi.com/SAdrian/api/movi...
- Quicktype (quickly convert JSON to Dart entities):
app.quicktype.io/
- Open source project created in this video:
github.com/svprdga/Flutter-Mo...
📖 Flutter libraries used:
- In this tutorial, freezed is used to generate the domain models:
pub.dev/packages/freezed
- Data models are autogenerated with json_serializable:
pub.dev/packages/json_seriali...
- The logger package is used to write to the log:
pub.dev/packages/logger
- The provider package is used for dependency injection and state management:
pub.dev/packages/provider
- Images are displayed and cached with the cached_network_image package:
pub.dev/packages/cached_netwo...
- Internationalization and language-related tools:
pub.dev/packages/intl
- You can create an infinite scrollable list with infinite_scroll_pagination:
pub.dev/packages/infinite_scr...
- We will use sqflite to work with a local database:
pub.dev/packages/sqflite
🔵 Follow me:
Find out about my latest videos and publications:
davidserrano.io/
/ svprdga
hashnode.com/@svprdga
dev.to/svprdga
mastodon.social/@svprdga
⏳ Timecodes:
00:00 - Introduction
02:15 - Project setup & domain model creation with freezed
06:27 - Create the network entity models
08:07 - Map network entities to domain models
10:45 - Create the API client with dio
15:21 - Create the Movie Repository
19:13 - Load local configuration & setup dependency injection tree
26:10 - Create MoviePreview widget
30:26 - Infinite scrollable list with infinite_scroll_pagination
33:47 - Create the database entities
36:37 - Database mapper & Data Access Objects (DAO)
41:38 - Adjust the repository to work with the database
44:50 - Synchronize the local database with new data available in the API
50:34 - Dart analyze, Dart format, and final conclusion - Наука та технологія
This video is a gold mine of information
Thanks ☺️
Amazingly explained. Please make more videos like this.
So impressed and grateful for how clear and well paced this tutorial was. I have not used the data/domain/presentation architecture before but will attempt to implement it in my current project at work using this video as a reference.
I am very glad that it has been useful to you! Thank you very much for your support 🙂
Underrated video 🎉🎉🎉
Thx!!
Great tutorial, you have a great pace for tutoring, something that is lacking at a lot of Flutter videos.
Thank you! And thank you also for the compliment 🤗
This tutorial is so useful I am a new learner and thanks to you for this. Great content.
I'm glad you found it useful, thanks for your kind words!
huge thanks!!
You're welcome!!
Very concise and instructive video
Thanks!
Thank you so much for this wonderful tutorials.
You're welcome! :)
@@DavidSerranoIO I have a question, I take freelancing projects that are not huge and most of them have firebase as backends. and I have two questions please answer them.
Should I implement CLEAN Architecture in small freelance projects that use Firebase as the backend?
Can I use CLEAN Architecture with GetX ?
@@Inandoutpk In my opinion, yes, you should always apply clean architecture. As for GetX, I suppose you can apply clean, but I strongly advise against using this library, since what it does is an over-engineering of Flutter itself, from my point of view it makes no sense and does not provide anything of value.
@@DavidSerranoIO Thanks for your suggestion, I think now I should move toward riverpods.
@@Inandoutpk Good choice 👍
Thank you
You're welcome!
I like is perfect
👍
Retrofit over custom ApiClient
Followed up to the point where you passed the 'providers' parameter to App().. this is making my widget_test.dart fail since i can't access the given parameter in that widget_test.dart file, any suggestions?
You can send a list of providers prepared for your test, what specific error are you having?
siriam using riverpod and i have heard that riverpod is anti architecture need help how can i use clean archetecture for riverpod
After running the application, my application shows blank screen.
The Data is logging in my console.
but after that it becomes null. Any solution?
Could you provide the complete log output?
why you didn't go for hive and used SQLite?
Because SQLite is a suitable tool for this task. Why should I have used Hive instead in your opinion?
hello you said to me:
You're welcome, if you want, when I launch the video, remind me in a comment and I'll explain exactly what you would have to do to incorporate Firestore.
so if you want to explain it to me that would be adorable thank you !!!
Of course, basically you have to follow the same methodology that I follow in this video but adjusting the datasource to Firestore, that is:
- First create an entity that represents the data in Firestore, for example lib/data/firestore/entity/your_entity.dart. Here you can use json_serializable exactly like I do with the network layer models.
- Then you'll need a mapper to convert that entity to your domain objects, which can be in lib/data/firestore/firestore_mapper.dart. The methodology to follow is exactly the same as the Mapper classes that I show in this example.
- You will have to create the datasource that interacts with Firestore, in /lib/data/firestore/client/firestore_client.dart. This class uses the SDK that Firestore provides to work with its data.
- Finally you will have to use all of the above in your repository, where you will use FirestoreClient to get the entities, and FirestoreMapper to map them to your domain objects.
This is roughly the guide by which you could guide yourself to be able to implement your synchronization layer with Firestore, if you have any specific questions do not hesitate to ask.
@@DavidSerranoIO Hello, I'm coming back to you because I'm stuck,
indeed, I can't find the api host for cloud firestore,
as for my api key, I retrieved my web api key from the parameters of my firebase project, hoping that this is it
@@nekorielfredbear1455 To communicate with Firestore you have to use the library and the methodology that Firebase requires. I recommend that you first learn to read and write in Firebase by following the official tutorials offered by Google. Once you've learned that, you can apply that knowledge to building a FirestoreClient to perform the communication.
@@DavidSerranoIO thank you