If anyone is showing a blank screen on refresh when you test the app for the first time, check your StockApi. The `@Query` decorator needs to have the string `"apikey"`, _not_ `"apiKey"`. Happy hacking! 😉
Thank you very much Philipp. It is really a nice and necessary content for Android. Also, thank you for sharing it for free. We have a lot to learn from you. 👊
Thanks Phillip. I enjoyed every single bit of the video. I can't image how much more I'll learn and the skills I'll gain through the premium courses. I plan on buying one someday, to learn more and scale up. Thanks again
at 1:40:04 i got this error when i rebuild project how can i fix this 3 issues were found when checking AAR metadata: 1. Dependency 'androidx.activity:activity-ktx:1.8.0-alpha02' requires libraries and applications that depend on it to compile against codename "UpsideDownCake" of the Android APIs. :app is currently compiled against android-33. Recommended action: Use a different version of dependency 'androidx.activity:activity-ktx:1.8.0-alpha02', or set compileSdkPreview to "UpsideDownCake" in your build.gradle file if you intend to experiment with that preview SDK. 2. Dependency 'androidx.activity:activity:1.8.0-alpha02' requires libraries and applications that depend on it to compile against codename "UpsideDownCake" of the Android APIs. :app is currently compiled against android-33. Recommended action: Use a different version of dependency 'androidx.activity:activity:1.8.0-alpha02', or set compileSdkPreview to "UpsideDownCake" in your build.gradle file if you intend to experiment with that preview SDK. 3. Dependency 'androidx.activity:activity-compose:1.8.0-alpha02' requires libraries and applications that depend on it to compile against codename "UpsideDownCake" of the Android APIs. :app is currently compiled against android-33. Recommended action: Use a different version of dependency 'androidx.activity:activity-compose:1.8.0-alpha02', or set compileSdkPreview to "UpsideDownCake" in your build.gradle file if you intend to experiment with that preview SDK.
3:02:23 why are we checking for loading state inside the box and not outside, even if loading is false we'll still create that box, Can anyone please help🤔
This is a list of disadvantages of using extension functions instead of a dependency for the Data Mapper: Testing might be tricky: if you create a model in the repository class you can’t mock the mapping, so you are forced to test the mapping again. You lose the dependency inversion: when you are coding the repository you need to have the mapping beforehand, with the mapper instead you just put an interface and don’t care about the actual implementation. Also whenever you change the mapping your repository needs to be recompiled. Doesn’t work well with java, in case you have legacy code. Less reusability: by using a dependency the generic logic of the mapping can be extracted in another class. With an extension function you don’t have the same flexibility.
@@orangasli2943 Why does he have to create a video to do so?, pointing things out is not wrong albeit he could have started the comment with something along the lines of "Great video!, (...) I do want to point out something, in my opinion (...)"
I also ran into the NavGraphs class not found issue. According to the setup directions for the compose-destinations library, you need to tell Android Studio to look at the generated folder, add the following code in the Android block of the app level gradle file: applicationVariants.all { kotlin.sourceSets { getByName(name) { kotlin.srcDir("build/generated/ksp/$name/kotlin") } } }
Thank you a lot my friend always keep going up it's gr8 and you spend so much much of engery for it, please accept my Endless Gratitude. Nice and applicable🙌🙏
This is really good, thanks for sharing it for free. i'll save to my watch list. Can't wait to learn from here. You are my incredible online professor ... love from Indonesia
Congratulations on a presentation! Your dedication in helping others to help themselves, as they journey to become Android developers has far outpaced others on this platform. I am forever grateful for your commitment in this space. BEST REGARDS!
Hello, thank you for your work. In second part of repository, where we load data from internet, cashe it to database. Then get from database with "" parameter. I think parameter must be querystring.
Thank you for providing such great content for free. I have followed your tutorials from the basic Android Tutorials to the recent Clean Code and I am now ready to work on my personal project. I do wonder what is your current opinion on use cases. In earlier clean tutorials you use use-cases, but here you chose not to and used the repository in the view model. Do you no longer recommend using use-cases? Or do you use it when it is needed and mix repositories and use cases in the view model? Or was it a simplification for this specific project and you would have used use-cases if it was a larger project.
I used them in earlier projects to show their concepts for people who want to learn it. Use cases have their purpose, but not in most projects people here build. So often, they just call a repo function and pollute your code with tons of classes that do nothing. For large scale projects, they do make sense though, but people tend to use them just because they heard somewhere it's a best practice. Always question if a specific architecture makes sense for your particular project without listening to trends too much.
This is a great tutorial. I have learnt many things from this. Many of the things I learnt here were applied on my personal project. Thank you for that!
Hi Phillip, you can add a donation to your video (thanks button) so that you can get still give content for free but also increase ability to make money via donations for those that benefited.
There is a buymeacoffee link in the description, but generally the best way to support me and get amazing value at the same time is to get my premium courses :) thanks a lot, appreciated
Whilst this is a great example, this architecture is missing one key layer, the domain layer as part of clean architecture. Having usecases is critical and these need to be injected into the Viewmodel. In the above example becuase you have not used usecases, this mean all the bussiness logic overspills into two areas, the ViewModel and or the Repository. By having the Usecases (as a pure kotlin module or package) allows us to isolate business logic and therefore leave the Repo to be purley handling CRUD operations and leave the view model to handle purley view related work. For the same reason why we back a view such as a Fragment or Activity by a Presenter or ViewModel to handle View logic, if we accept this, then we should accept that the view model or presenter should also be backed by a usecase to handle business logic
If you would've watched the video, you would've heard my explanation why I didn't use use cases here 😄 I have plenty of other videos using it with use cases
Hello! Thank you so much for your content and for videos like this. I have already watched all your videos connected to Compose, but still found at least 5 things to make better in my apps watching this video. Also I would like to ask you to start making sample apps with edit/update/delete functionality. Apps with read/cache functions are not so difficult and you already have lots of samples and advices connected to that. As for CRUD apps, there are lots of places for which it is difficult to determine best way to do them. For example, the same app with one on the video, but with possibility to delete/create entries. When cache should be updated, how it should be updated, what to do in case of internet unavailable (deny modifying or caching changes and then syncing) and so on. How to use values from datastore in API requests, on which level it is correct to access datastore in cause of using it as part of API requests and in te same time as app settings. Anyway, thanks so much for content and sorry for my english:)
Hello everyone, CompanyListing( name = name ?: return@mapNotNull null, symbol = symbol ?: return@mapNotNull null, exchange = exchange ?: return@mapNotNull null) inside the companyListingParser class. Why do we need to have "return @mapNotNull null"? How does it work, please help
Question: Supppose I am using an UserRespostory which depends on LoginRepository and RegistationRepository, where can I place the UserRep?? Also should the UserRespo only access the interface of other two repos?? Can i go with below project structure or please suggest other option. ---> data ------> repository (Implementation) ----------> LoginRepo ----------> RegistrationRepo -----------> UserRepo (use required data from LoginRepo and RegistrationRepo) --> domain ------> repository (interfaces) ----------> LoginRepo ----------> RegistrationRepo -----------> UserRepo
Thank you so much, loved this video. I like what you do and how you do it. I would like to take my expertise to the next level, hope you would help me out on that. Hopefully, I will keep learning from you more in future 🙏. Take ❤ brother.
Thank you a lot, Phillip! I have one question. How to do full package naming if you have only one subclass/subdirectory (for example remote { dto }) instead of Android Studio default (for example remote.dto).
RE: Comments: Comments should not explain what code does, they should explain _why_ the code is the way it is. Links to upstream issue trackers, stack overflow-based workarounds, explaining a weird order of operations that may be necessary for some API, etc. There's a whole lot of people who say that "comments don't belong in code", but if that were the case, comments wouldn't exist. They have a purpose, like everything else. Use them wisely, but don't just not use them.
Thank you very much Philipp for a nice video. But I didn't understand, why do we need suspend repository function if it returns Flow ? For example: suspend fun getCompanyListings():Flow.
Hi, great content, thanks. Can you explain more why do you have Resource. Loading(loading: true / false) ? Why don't you have like: Resource.loading Resource.success Resource.error If is success or error, the loading will be false ... The only reason that I can think to use this will be for example, remove the loading of the screen only after the content is loaded, but the time difference will be so short that maybe does not worth ...
"In line with legal and regulatory requirements, we currently do not offer services for clients based in Russia" Noice, we are just short of starting to burn books of specific culture, to return to our ancestry, German, probably, kekw
Not a good idea. This is no longer MVVM. You are breaking the flow from the DB to the UI. Please make a new version that reacts as soon as the cache is updated. No need to do a pull to refresh ...
1:06:35 when any one of three state changes does it recomposes other composes as well ? for ex. when I swipe down To Refresh my loading state will go to true until I get response from api, when loading state changes from false to true any composable depending on it will recompose, will that change in state of CompanyListingState also recompose other composables?
Hi philipp, i have a problem with item clickable, there's not any happen when i click the item, i see in logcat but that doesn't appear any information or some error too.. what should i do?
The solution to the problem with the graph not working on monday and sunday is just getting the current day from localdatetime and using when to get minus 2 or minus 3 days :) hope it helps someone
Hello, thank you for this amazing tutorial its really make alot of things clear in my head 💜💜, If you allow me to ask you please consider uncle Bob clean code thing like fun should continue 4 to 6 line max, it will be amazing thank you so much again I really appreciate you help with those awesome tutorials.
Hi Philip Thanks for this wonderful tutorial, I would like to know the explanation for the step you carried out at the 22:57 of your video where you created a CompanyListingEntity.toCompanyListing() method based on my understanding I would have created the toCompanyListing() without the CompanyListingEntity before it but you didn't create it that way. I also understand that the way you created the method it affords you direct access to the variable in the CompanyListingEntity class. I would really like to know what rule explains dis
Hi Philip you are amazing person 🔥💙❤ and I benefit from your videos. . Course of industry world tracker is paid and it very very nice .. please can you make it free and downloaded it in UA-cam.🙏
Thanks for tutorial. I used chart in my own project and found an error in stroke path. val y1 = height - spacing - (leftRatio * height).toFloat() shoul actually be val y1 = height - spacing - (leftRatio * (height - spacing)).toFloat() Same with val y2. And similarly in Y axis labels the Y coordinate should be: size.height - spacing - i * (size.height - spacing) / 5f,
thank you for your video,it helped me alot. But i just want to konw that ever since I import ksp,my as split preview went cracked. I don't konw why. ps it just like you don't use the "preview" in your video, it's cut out?
Hi Philipp, the video is very good as always. I have a question. Actually it’s not a question its a issue with my understanding. I always ending up with adding wrong dependencies in gradle file. I learned everything from UA-cam. I search for the dependency but always always end-up with wrong one. The dependency always confuses me. Like how to know which dependency is required when. For example: hilt . There are different dependency for android compiler kotlin viewmodel. And these all dependency are not in one place We have search it differently. Is there any documentation from where i get all the dependency at ones and with description that for what purpose the dependency work Please answer.
33:00 you created resource class, atleast explain a bit about it , instead of saying "it seems difficult,but it isnt" : (
Dude is just unbelievable! You are the reason I have a job.
🙏🙏❤️
I am next in that list
If anyone is showing a blank screen on refresh when you test the app for the first time, check your StockApi. The `@Query` decorator needs to have the string `"apikey"`, _not_ `"apiKey"`.
Happy hacking! 😉
Thanks a lot mate :'D
save my day, thanks a lot
This frustrated me a lot, thanks 🙏
You are a lot more qualified than all those university teachers and proffessors. thumbs up my bro and hope to learn a lot more from you.
🙏❤️
because a good teacher can't never stop learning
Thank you very much Philipp. It is really a nice and necessary content for Android. Also, thank you for sharing it for free. We have a lot to learn from you. 👊
Sure this is a gold in it self, given for free his massive hours of work.
We appreciate his work
L
@@raymondmichael4987 q
If possible please make an e-commerce app tutorial as well.
Thanks Phillip. I enjoyed every single bit of the video. I can't image how much more I'll learn and the skills I'll gain through the premium courses. I plan on buying one someday, to learn more and scale up. Thanks again
at 1:40:04 i got this error when i rebuild project how can i fix this
3 issues were found when checking AAR metadata:
1. Dependency 'androidx.activity:activity-ktx:1.8.0-alpha02' requires libraries and applications that
depend on it to compile against codename "UpsideDownCake" of the
Android APIs.
:app is currently compiled against android-33.
Recommended action: Use a different version of dependency 'androidx.activity:activity-ktx:1.8.0-alpha02',
or set compileSdkPreview to "UpsideDownCake" in your build.gradle
file if you intend to experiment with that preview SDK.
2. Dependency 'androidx.activity:activity:1.8.0-alpha02' requires libraries and applications that
depend on it to compile against codename "UpsideDownCake" of the
Android APIs.
:app is currently compiled against android-33.
Recommended action: Use a different version of dependency 'androidx.activity:activity:1.8.0-alpha02',
or set compileSdkPreview to "UpsideDownCake" in your build.gradle
file if you intend to experiment with that preview SDK.
3. Dependency 'androidx.activity:activity-compose:1.8.0-alpha02' requires libraries and applications that
depend on it to compile against codename "UpsideDownCake" of the
Android APIs.
:app is currently compiled against android-33.
Recommended action: Use a different version of dependency 'androidx.activity:activity-compose:1.8.0-alpha02',
or set compileSdkPreview to "UpsideDownCake" in your build.gradle
file if you intend to experiment with that preview SDK.
3:02:23 why are we checking for loading state inside the box and not outside, even if loading is false we'll still create that box, Can anyone please help🤔
Always love your tutorials. I learn a lot from you
This is a list of disadvantages of using extension functions instead of a dependency for the Data Mapper:
Testing might be tricky: if you create a model in the repository class you can’t mock the mapping, so you are forced to test the mapping again.
You lose the dependency inversion: when you are coding the repository you need to have the mapping beforehand, with the mapper instead you just put an interface and don’t care about the actual implementation.
Also whenever you change the mapping your repository needs to be recompiled.
Doesn’t work well with java, in case you have legacy code.
Less reusability: by using a dependency the generic logic of the mapping can be extracted in another class. With an extension function you don’t have the same flexibility.
Show some video and then talk
@@orangasli2943 Why does he have to create a video to do so?, pointing things out is not wrong albeit he could have started the comment with something along the lines of "Great video!, (...) I do want to point out something, in my opinion (...)"
I also ran into the NavGraphs class not found issue. According to the setup directions for the compose-destinations library, you need to tell Android Studio to look at the generated folder, add the following code in the Android block of the app level gradle file:
applicationVariants.all {
kotlin.sourceSets {
getByName(name) {
kotlin.srcDir("build/generated/ksp/$name/kotlin")
}
}
}
Thanks!
Thanks, I can't quite get it to work but I appreciate this. Do you know why this issue is appearing only now?
Thanks. This solution worked for me.
Just landed from Multi-Module Architecture and the ink on my Certificate is not even dry, thx Philipp for the exposure.
YEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh
Thank you my man, you are helping to create new generation of devs!
Thank you a lot my friend always keep going up it's gr8 and you spend so much much of engery for it, please accept my Endless Gratitude. Nice and applicable🙌🙏
This is really good, thanks for sharing it for free. i'll save to my watch list. Can't wait to learn from here. You are my incredible online professor ... love from Indonesia
Congratulations on a presentation! Your dedication in helping others to help themselves, as they journey to become Android developers has far outpaced others on this platform. I am forever grateful for your commitment in this space. BEST REGARDS!
🙏🙏🙏
1:30:50 DI Application
1:31:47 DI Modules
1:32:50 DI AppModule
1:37:38 DI RepositoryModule
1:38:44 @Binds
1:40:57 Navigation
Hello, thank you for your work. In second part of repository, where we load data from internet, cashe it to database. Then get from database with "" parameter. I think parameter must be querystring.
Thank you for providing such great content for free. I have followed your tutorials from the basic Android Tutorials to the recent Clean Code and I am now ready to work on my personal project.
I do wonder what is your current opinion on use cases. In earlier clean tutorials you use use-cases, but here you chose not to and used the repository in the view model.
Do you no longer recommend using use-cases? Or do you use it when it is needed and mix repositories and use cases in the view model? Or was it a simplification for this specific project and you would have used use-cases if it was a larger project.
I used them in earlier projects to show their concepts for people who want to learn it. Use cases have their purpose, but not in most projects people here build. So often, they just call a repo function and pollute your code with tons of classes that do nothing.
For large scale projects, they do make sense though, but people tend to use them just because they heard somewhere it's a best practice. Always question if a specific architecture makes sense for your particular project without listening to trends too much.
@@PhilippLackner Thanks for the explanation. :)
Then I can get rid of those useless use case classes without feeling guilty.
Nice tutorial . Can you make a tutorial about modular architecture?
He made a course about that, highly recommend it! Check the first link in the video description.
Just put the network and db into different module for this project
Never expected the entire video without parts. TQSM
Thank You. You are amazing. Love You.
Thank you for this Amazing Tutorial! After i fixed some gradle issues its running now!!!!
how to solve that? i m having gradle issues,too.
This is a great tutorial. I have learnt many things from this. Many of the things I learnt here were applied on my personal project. Thank you for that!
man I really needed this And I said to my self I wish
philipp has a tutorial on it . Like before Watching .
Hi Phillip, you can add a donation to your video (thanks button) so that you can get still give content for free but also increase ability to make money via donations for those that benefited.
There is a buymeacoffee link in the description, but generally the best way to support me and get amazing value at the same time is to get my premium courses :) thanks a lot, appreciated
I solve it by myself, I was change import of Path()
i see something odd, isRefreshing state is never changed so loading circle newer shows up, easy fix is to change isRefreshing to isLoading in screen
Perfect!!!! Nothing to say more except THANKS a lot for your course and teaching!!! Perfect!!!
Glad you like it!
Whilst this is a great example, this architecture is missing one key layer, the domain layer as part of clean architecture. Having usecases is critical and these need to be injected into the Viewmodel. In the above example becuase you have not used usecases, this mean all the bussiness logic overspills into two areas, the ViewModel and or the Repository. By having the Usecases (as a pure kotlin module or package) allows us to isolate business logic and therefore leave the Repo to be purley handling CRUD operations and leave the view model to handle purley view related work. For the same reason why we back a view such as a Fragment or Activity by a Presenter or ViewModel to handle View logic, if we accept this, then we should accept that the view model or presenter should also be backed by a usecase to handle business logic
If you would've watched the video, you would've heard my explanation why I didn't use use cases here 😄 I have plenty of other videos using it with use cases
Just finished the video, hands down the best video on best practices I ever watched (including Philipps')
Thank you🙏
Hey Philipp! Make more of these large videos for UA-cam!
My channel is full of these 😄
Hello! Thank you so much for your content and for videos like this. I have already watched all your videos connected to Compose, but still found at least 5 things to make better in my apps watching this video. Also I would like to ask you to start making sample apps with edit/update/delete functionality. Apps with read/cache functions are not so difficult and you already have lots of samples and advices connected to that. As for CRUD apps, there are lots of places for which it is difficult to determine best way to do them. For example, the same app with one on the video, but with possibility to delete/create entries. When cache should be updated, how it should be updated, what to do in case of internet unavailable (deny modifying or caching changes and then syncing) and so on. How to use values from datastore in API requests, on which level it is correct to access datastore in cause of using it as part of API requests and in te same time as app settings. Anyway, thanks so much for content and sorry for my english:)
Thanks, but my channel is full of crud tutorials 🤔 check my note app course for example
Nice video. But the StockChart y coordinate calculate wrong. val y1 = height - spacing - (leftRatio * (height - spacing)).toFloat(), isn't it?
Hello everyone,
CompanyListing(
name = name ?: return@mapNotNull null,
symbol = symbol ?: return@mapNotNull null,
exchange = exchange ?: return@mapNotNull null)
inside the companyListingParser class. Why do we need to have "return @mapNotNull null"? How does it work, please help
Bro why are your earlobes attached like this
Those are normal earlobes bro
@@PhilippLackner nice
Question: Supppose I am using an UserRespostory which depends on LoginRepository and RegistationRepository, where can I place the UserRep?? Also should the UserRespo only access the interface of other two repos?? Can i go with below project structure or please suggest other option.
---> data
------> repository (Implementation)
----------> LoginRepo
----------> RegistrationRepo
-----------> UserRepo (use required data from LoginRepo and RegistrationRepo)
--> domain
------> repository (interfaces)
----------> LoginRepo
----------> RegistrationRepo
-----------> UserRepo
Is the SOLID and MVVM architecture are same?
Thanks awesome, you are a great inspiration and teacher!
Thank you so much, loved this video. I like what you do and how you do it. I would like to take my expertise to the next level, hope you would help me out on that. Hopefully, I will keep learning from you more in future 🙏. Take ❤ brother.
Do you have anything about foreground, background maybe with a timer, that keeps running when app goes into background?
I think Phillip already upload a work manager tutorial, may be that will help you.
@@nipunkumarit2168 thanks I'll have a look, is it with compose?
@@paulvickers8059 yes
I am also having that same NavGraphs class import issue and that re import doesn't works for me, anybody facing the same issue ?
Thank you for your work Philipp. I enjoyed it and it is always educational to see your designs.
Thank you, glad it's helpful!
Thank you a lot, Phillip! I have one question. How to do full package naming if you have only one subclass/subdirectory (for example remote { dto }) instead of Android Studio default (for example remote.dto).
Go to up settings, check compact middle packages
@@novruzceferov8666 Thats great! Thank you a lot
RE: Comments: Comments should not explain what code does, they should explain _why_ the code is the way it is. Links to upstream issue trackers, stack overflow-based workarounds, explaining a weird order of operations that may be necessary for some API, etc.
There's a whole lot of people who say that "comments don't belong in code", but if that were the case, comments wouldn't exist. They have a purpose, like everything else. Use them wisely, but don't just not use them.
Thank you very much Philipp for a nice video. But I didn't understand, why do we need suspend repository function if it returns Flow ? For example: suspend fun getCompanyListings():Flow.
This looks amazing, can't wait to start this tomorrow.
Philipp for President!
Hello World! , if i use ktor not retrofit how to retrive CompanyListing ResponseBody [with ktor] ?
Hi, great content, thanks.
Can you explain more why do you have Resource. Loading(loading: true / false) ? Why don't you have like:
Resource.loading
Resource.success
Resource.error
If is success or error, the loading will be false ... The only reason that I can think to use this will be for example, remove the loading of the screen only after the content is loaded, but the time difference will be so short that maybe does not worth ...
awesome, thanks a lot! Спасибо! My solution of filter problem
.filter {
val yesterday = LocalDate.now().minusDays(1)
val filter = when (yesterday.dayOfWeek.value) {
6 -> yesterday.minusDays(1)
7 -> yesterday.minusDays(2)
else -> yesterday
}
it.date.dayOfMonth == filter.dayOfMonth
}
"In line with legal and regulatory requirements, we currently do not offer services for clients based in Russia" Noice, we are just short of starting to burn books of specific culture, to return to our ancestry, German, probably, kekw
Scandeless that you not even get 3k likes in a year when you produce such quality, I've seen tutorials of less quality reach a milj likes
Not a good idea. This is no longer MVVM.
You are breaking the flow from the DB to the UI.
Please make a new version that reacts as soon as the cache is updated.
No need to do a pull to refresh ...
Preview!? What about preview in Compose? Is it so bad for now that you do not use it?
Damn! What a man!
We are not worthy of such concentrated delicious tutorials :)
New Formatter (datetime) object will be create on every mapping operation, is it make sense to have one formatter?
I finished the app and added error handling, I learned a lot
I fixed the date problem by using the first stock data day returned from api
amazing 🤩 well done 👍
Please tell what Android Studio IDE Theme you are using in this video. It looks great.
1:06:35 when any one of three state changes does it recomposes other composes as well ? for ex. when I swipe down To Refresh my loading state will go to true until I get response from api, when loading state changes from false to true any composable depending on it will recompose, will that change in state of CompanyListingState also recompose other composables?
Hi philipp, i have a problem with item clickable, there's not any happen when i click the item, i see in logcat but that doesn't appear any information or some error too.. what should i do?
Yes! I repeat this! Your code is repeatable and you talk about places where can stuck.
I want to use charts in my app, after this video I think I can do something.
So funny that I actually did it on Monday and the yesterday came to be sunday as well for me. What a coincidence. Lol :D
The solution to the problem with the graph not working on monday and sunday is just getting the current day from localdatetime and using when to get minus 2 or minus 3 days :) hope it helps someone
Can someone tell me why does he use openCV and parsing? Do i need it also if the respond only a simple object like user object? Thank u
Thanks for video ❤
You're the GOAT!! Thanks for consistently putting out awesome content.
Thanks for sharing your acknowledgement!
Amazing ❤️👌
Really nice video. Thanks❤ Why do you use mutableState (COMPOSE) and not stateFlow in your viemodel?
Thanks Philipp . Any discount for your courses !?
you are the best of the best
Whew! finally finished this, learn't a lot, first time working with CSV rather than Json, many many Thanks Philip!!!
Awsome content, I have a query: 1:40 Why do we need to add @Inject when we don't need any object there? Thank you
Hello, thank you for this amazing tutorial its really make alot of things clear in my head 💜💜,
If you allow me to ask you please consider uncle Bob clean code thing like fun should continue 4 to 6 line max, it will be amazing thank you so much again I really appreciate you help with those awesome tutorials.
Wow, Philipp! You are like a Gandhi who codes ;)
20:11 why to mark the id as nullable? When we are already marking it @PrimaryKey
i will surely buy your course but i have not credit or master card. But in near future i will surely buy your course if i got one and start earning.
Thanks So much Sir.. learning from the best
Hey why are you naot use post api.We want to see what actually behaivour of post api in clean arcitecture
is that ok to access util package Resource class from domain layer in clean arch?
super amazing!
Love it.
Can you do a tutorial for developing a launcher and channel app for android tv?
your new android studio colors are aesthetic af
Hi Philip Thanks for this wonderful tutorial, I would like to know the explanation for the step you carried out at the 22:57 of your video where you created a CompanyListingEntity.toCompanyListing() method based on my understanding I would have created the toCompanyListing() without the CompanyListingEntity before it but you didn't create it that way. I also understand that the way you created the method it affords you direct access to the variable in the CompanyListingEntity class. I would really like to know what rule explains dis
Man! You are the best... looking forward for the Tests
im wondering, can i create this inside a flutter project?
Thanks you Philip your really helping the android community out
Hi Philip you are amazing person 🔥💙❤ and I benefit from your videos. . Course of industry world tracker is paid and it very very nice .. please can you make it free and downloaded it in UA-cam.🙏
Can you please pay for it? How do you think I can make all these free videos without being able to pay my food?
Thanks for tutorial. I used chart in my own project and found an error in stroke path.
val y1 = height - spacing - (leftRatio * height).toFloat()
shoul actually be
val y1 = height - spacing - (leftRatio * (height - spacing)).toFloat()
Same with val y2.
And similarly in Y axis labels the Y coordinate should be:
size.height - spacing - i * (size.height - spacing) / 5f,
Your efforts are highly appreciated🙏❤
Still not whatch the video
But i know it's a awesome content!
thank you for your video,it helped me alot. But i just want to konw that ever since I import ksp,my as split preview went cracked. I don't konw why. ps it just like you don't use the "preview" in your video, it's cut out?
got it,Its the gradle dependency cause
thank you for the video, how you are sharing the Mobile screen on the computer? which tool you are using?
Vysor
I learned a lot from this. It is better to learn from Google docs.
Hi Philipp, the video is very good as always. I have a question. Actually it’s not a question its a issue with my understanding. I always ending up with adding wrong dependencies in gradle file. I learned everything from UA-cam.
I search for the dependency but always always end-up with wrong one.
The dependency always confuses me.
Like how to know which dependency is required when.
For example: hilt . There are different dependency for android compiler kotlin viewmodel.
And these all dependency are not in one place We have search it differently.
Is there any documentation from where i get all the dependency at ones and with description that for what purpose the dependency work
Please answer.
Hi, what I have tried is to get the most up to date dependency for each thing and hope they all line up and they do :)