I opened your video hoping I could find a solution to my problem but it seems you have the same problem which is when I use .animatedItem() with LazyColumn it shows a weird animation when flipping quickly and sometimes when changing the sorting type(look at the last item in the list here 18:22)
@brigadut11 күн бұрын
How to customize the navigation style to be horizontal like ios ?
@TheAndroidFactory11 күн бұрын
What do you mean horizontal?
@brigadut11 күн бұрын
@@TheAndroidFactory I mean when you navigate to a screen or activity it will slide horizontally not just fade-in
@TheAndroidFactory11 күн бұрын
Oh, I see. That is just a Fragment or Composable transition. The default nowadays I think is the fade, but you can update that pretty easily. This article seems like a good resource tomas-repcik.medium.com/jetpack-compose-and-screen-transition-animations-b361fc8164cc
@brigadut11 күн бұрын
@@TheAndroidFactory thank you so much.
@TheAndroidFactory11 күн бұрын
@brigadut no problem. Good luck!
@ifedayoadekoya669411 күн бұрын
What happens if you want to return your own object for failures? Say the back sends a 400, and you want to print backendResponse.message (from the returned response object) to the UI? How will you do that with this approach?
@TheAndroidFactory11 күн бұрын
Quite simply! Best way to do it is have your network layer return a Status object. You can use the one built in to Kotlin, or create your own. If the network call succeeds, you return Status.Success(data_goes_here), otherwise you return Status.Failure(error_goes_here) and at the UI layer you can "unwrap" the status to know what type it is (success or failure) and do what you need to from there!
@lpfboyka56112 күн бұрын
what if i got the Failed to authenticate, have you run firebase login?
@TheAndroidFactory12 күн бұрын
Is your service account setup properly?
@rezasafdari-n3m12 күн бұрын
Very cool tutorial bro, three questions 1.Repository should be in network? But you put it in app module. 2.network module is same Data module in google docs? 3.where we should put domain layer if we use clean architecture in multi module project? 🙏🙏
@TheAndroidFactory12 күн бұрын
1. I left repository in the app module because that was specific to the implementation of using the network package. I want to turn that package into a full open source library, so having the repository in there feels too "heavy handed". 2. I don't think so, but I don't know what docs you are referring to. Again, I want to turn that package into a library, so I want to keep it as lightweight as possible. 3. I would probably keep this layer in the app module for simplicity and ease. Making its own module for it would probably be overkill imo, so just try to keep a clean package structure in your app module
@rezasafdari-n3m12 күн бұрын
The first and third questions I understood, but for the second question, I meant the Android Developer website, and whether multi-module programming in Android has a special packaging like the Clean architecture, or if it's just the parts that the developer themselves decides to transfer to their desired module with a custom name?
@TheAndroidFactory12 күн бұрын
I see. I am personally a little unfamiliar with the docs you're referring to, but at the end of the day (in practice, at real companies) we often stray away from specific patterns at times because as your team and project grows, it gets harder to keep everything in alignment. As long as you have a clear enough structure, I wouldn't worry too much about it. Remember: at the end of the day, the users have no idea how your code is structured 😆 One thing I would say from experience though is "package by feature" if you are going to break out different modules. So, you wouldn't want one feature to be touching many different modules, like if you had your network models in on module, domain modules in another, and presentation (Composables) in another module. Instead, I would try to keep all of the code that your feature needs to run in the same module. Otherwise, it becomes a real big pain to try and move it if you need to.
@rezasafdari-n3m12 күн бұрын
If we consider app like instagram We have search feature, profile feature and home feature so : -Search Module .data layer .domain layer .presentation layer -profile Module data layer .domain layer .presentation layer -home Module .data layer .domain layer .presentation layer Like this? And tank you very much for your response.
@TheAndroidFactory12 күн бұрын
Yes that is typically pretty helpful for larger teams because if you just needed to work on a feature, enhancement, or bug fix in one of those areas, you would only need to make changes in a single module. This would reduce your potential for introducing bugs in the other modules, speed up compile time, and this structure allows for good "ownership" amongst the developers i.e. the "search team" vs. "home team", etc. Additionally, there will be some things that overlap between modules, such as specific models, networking and analytics helpers, date formatters, etc. and all of the individual modules can import this "shared" module so each feature area has access to these standard helper classes/functionality. Does that make sense?
@metacode469614 күн бұрын
Sir, please continue the tutorial, add favorite features stored in the room database🙏🙏🙏🙏🙏🙏❤❤
@TheAndroidFactory14 күн бұрын
I know I'm slacking. I have a wedding coming up in less than a month. I want to get back to making content!
@metacode469613 күн бұрын
@@TheAndroidFactory i see, happy wedding sir.😉
@TheAndroidFactory12 күн бұрын
@metacode4696 thank you!
@user-pz6tc5mo5l27 күн бұрын
Great!
@TheAndroidFactory27 күн бұрын
Appreciate your support!
@ShortBits78628 күн бұрын
Please upload next video fast
@wokhardy101829 күн бұрын
Great video as always Dom! Paging3 is really much easier than paging2, definitely gonna be using this going forward. I did have a question, as someone who has probably worked on several projects with paging. Is paging only used for infinite scroll apps? Say we have an app which has pages of it's own, would you use the paging library for that or just make an api call directly each time we change the page?
@TheAndroidFactory28 күн бұрын
Appreciate the support. Can you explain the question a little more? What do you mean when you say the app already has pages of its own?
@wokhardy101828 күн бұрын
@@TheAndroidFactory suppose you had 20 characters per page, and you had to press a button to go the next page and see the next 20 characters, much like you would do on a webpage. Or, if you have a news api which returns a bunch of articles at once, and you want to display one article at a time in the app, then the user would have to click a button to go to the next page to see the next article. I wonder if that makes sense. Would you use the paging library for that, or just make a second api call when the user clicks the button to go to the next page
@TheAndroidFactory28 күн бұрын
I totally understand what you're saying. Truthfully, I probably wouldn't use the paging library for that. You can just fetch the page from the API based on what page the user is on. So as they navigate deeper into pages, you make the API call with the param page=N and can cache the result. So each page could be the same fragment/composable, but configured with a different pageNumber (or whatever you want to call it). This should simplify your implementation to do the same thing for each page: fetch data from API, and display it. As the user navigates backwards in pages, if you have the results cached, you can quickly look that up instead of making a new API call for the data. You'll just need to save the data at a "higher level" than the fragment/composable, so the activity is a good place for this information to be stored. Hope this helps 👍
@wokhardy101827 күн бұрын
@@TheAndroidFactory it does! I'm learning so much about app architecture, and clever solutions to common problems as I'm going through your series. And your detailed answers to every question on your videos, even years later, is very admirable. Hats off, sir!
@TheAndroidFactory27 күн бұрын
Amazing to hear this! I'm so glad it is making sense to you 😀
@thenojus577329 күн бұрын
Awesome tutorials, thanks!
@TheAndroidFactory29 күн бұрын
Glad it helps 😃
@SunMoonBrothersАй бұрын
drop your spotify playlist dude
@TheAndroidFactoryАй бұрын
Appreciate you haha 😆
@brandoncantu5403Ай бұрын
Why doesn't it work anymore? At least for me
@TheAndroidFactoryАй бұрын
What doesn't work for you?
@brandoncantu5403Ай бұрын
Well I'm using Jetpack Navigator and I'm trying to use animations with actions inside fragments but it's not working, the animation is a fade by default and I try to change it but nothing happens, I've been like this for almost 2 days.
@TheAndroidFactoryАй бұрын
How are you setting the transition? In XML? Are your XML animation files properly error free?
@brandoncantu5403Ай бұрын
@@TheAndroidFactory Yes bro, I use xml for the animations, I have defined an animation in an anim folder and the nav in a navigation folder and there are the fragments and the actions specifying the animation for each fragment but it doesn't work, nor do I get any error, how could I solve it? 🥹
@TheAndroidFactoryАй бұрын
That is crazy odd to be honest. It doesn't sound like you should have to do anything else 🤔 feel free to email me code snippets at [email protected] (although I am away from my computer for a little bit but I can check on mobile)
@pawandeepsingh6365Ай бұрын
hey, when u open .onSuccess{}, it shows in light color (it:Character), in my android studio it does not. How can I get that?
@pawandeepsingh6365Ай бұрын
Kudos to you! I am new to Android and didn't know anything about DI and, your playlist is amazing. I learned a lot.
@TheAndroidFactoryАй бұрын
Well, welcome to the channel :) Dependency injection is super powerful! It can be intimidating at first, but you can get the hang of it quite easily
@pawandeepsingh6365Ай бұрын
Hey, Is ktor client slow than retrofit? I am using retrofit it takes 400-500 ms to get data but ktor takes 800-900 ms for same data. What u did in your code same I have done.
@TheAndroidFactoryАй бұрын
That's interesting 🤔 I haven't tested them much to be honest. You're making the same API calls side by side? Are they happening in parallel?
@pawandeepsingh6365Ай бұрын
@@TheAndroidFactory Side by side
@pawandeepsingh6365Ай бұрын
@@TheAndroidFactory Your videos are really helpful, could please make videos on how to use google maps in android with compose, specially how to make custom markers? If possible please do it. Thank you
@TheAndroidFactoryАй бұрын
@pawandeepsingh6365 interesting.... I'm not sure at all. If you Google this concept does anything come up? This is quite interesting
@TheAndroidFactoryАй бұрын
@pawandeepsingh6365 I appreciate your support!! Google maps is a little tricky because of the API key stuff, but I could look into it
@sw_a_ppyАй бұрын
Why not scaffold
@TheAndroidFactoryАй бұрын
Totally could. This is just a simplified version and I probably should update it
@MrVipulLalАй бұрын
Useful series. Thanks
@TheAndroidFactoryАй бұрын
Woo! Appreciate the support :)
@supuerawesome707Ай бұрын
Really loved this series!
@TheAndroidFactoryАй бұрын
I never really finished this so I'm sorry for that 😔 but the code is available on GitHub if you want to play with it yourself!
@supuerawesome707Ай бұрын
@@TheAndroidFactory No need to be sorry, this has been a great series regardless! I may have a stab at implementing the favourite-ing logic myself with Room or DataStore. I'll definitely be checking out some of the other series you've got on the channel!
@TheAndroidFactoryАй бұрын
@supuerawesome707 love to hear it! Thank you for the support :)
@neyasbitАй бұрын
What about error handling. For example, when in the middle of the list, that is, for an unsuccessful loading of one item. Also, what happens if the list ends? You can also find various subtleties that are not being talked about.
@TheAndroidFactoryАй бұрын
When the list ends, there is nothing more to page so the job is "done" so to speak. This can also be detected when the meta.next value is equal to null. Regarding error handling, you can implement a auto-retry feature to attempt the call that failed 1-3 times (or however many times you want) or you can add something to the UI that mentions a failure in loading and the user can click a button or something to trigger the request. The tutorial was meant to be a simpler and mostly working approach as opposed to a fully bulletproof mechanic. The content is more consumable that way, but some bits of what you mentioned are correct. If you'd like to open a pull request enhancing the functionality, I would review it and make content about me reviewing it!
@neyasbitАй бұрын
Perhaps you're right, I just want to see the subtleties of use
@TheAndroidFactoryАй бұрын
@neyasbit I could enhance this over time
@supuerawesome707Ай бұрын
Love the realism of all the errors. It makes newer programmers like myself feel reassured that even the pros are human and write bugs!
@TheAndroidFactoryАй бұрын
Humbled you think I'm a pro 😅 if people cut out the errors and specifically resolving them, it's not a real tutorial 👍 appreciate your support!
@h-ym2ulАй бұрын
hey i found this video very informative and knowledgeable
@TheAndroidFactoryАй бұрын
Glad it helped :)
@dharambudh2646Ай бұрын
Hi, thanks for sharing. I am getting an error saying: Failed to authenticate, have you run firebase login?
@TheAndroidFactoryАй бұрын
Did you setup the service account properly? I imagine that's your issue
@dharambudh2646Ай бұрын
Yes, I did. Additionally I verified steps from 1. From your video, 2. From official documentation & 3. From one Medium article.
@TheAndroidFactoryАй бұрын
I remember seeing these errors in the past but I can't remember how I solved them. It's definitely related to some permissions issue
@supuerawesome707Ай бұрын
Really enjoyed your explanations! Glad I discovered your channel.
@TheAndroidFactory10 күн бұрын
Hey, sorry it took so long to reply! I am a bit busy right now between work and planning a wedding, but I plan to return to making content more regularly when things slow down. Thank you for the support!
@Joeybear88Ай бұрын
Great video, quick question how did you solve the tearing issue? I have the same problem, I'm using Android Studio to emulate.
@TheAndroidFactoryАй бұрын
I think this is one of those things that just kinda resolves itself on its own. Maybe try killing the emulator and cold booting it - that should be an option in the Device Manager side panel. I don't think there was anything in particular I did to fix it. Keeping up to date with Android Studio might help too. Thanks for the support and comment :)
@LucasAlfareАй бұрын
Unfortunately designed to client side. Do you have some design content for ktor Server? It should be very useful too.
@TheAndroidFactoryАй бұрын
I do not at the moment but was looking into it a while back. Maybe another season later down the line!
@isaacnguyen0809Ай бұрын
If i would like to see log from ktor client with the beauty format (like Json format) for body response in logcat , how can i do that ?
@TheAndroidFactoryАй бұрын
I think there is a log plugin that you can attach to the Ktor instance and set it to prettyPrint=true somewhere. Take a look at their docs and it should be pretty straightforward hopefully!
@riezkymaisyar4038Ай бұрын
i love it, this code really pretty clean, thankyou so muchh!
@TheAndroidFactoryАй бұрын
It's available on GitHub!
@ahmedHmila-h9f2 ай бұрын
Hello I am getting error :Error: failed to determine AAB info. HTTP Error: 400, Request contains an invalid argument. i'm using this action - name: Déployer sur Firebase App Distribution uses: wzieba/Firebase-Distribution-Github-Action@v1 with: appId: ${{ secrets.FIREBASE_APP_ID }} serviceCredentialsFileContent: ${{ secrets.CREDENTIAL_FILE_CONTENT }} groups: testers file: android/app/build/outputs/bundle/release/app-release.aab
@AdanSendo2 ай бұрын
I been searching for months for a good channel that explain in great detail the topics for make me get started and learn android development and I found you!! I'll stick with your channel, thanks for sharing your knowledge.
@TheAndroidFactory2 ай бұрын
Amazing!! I'm glad you found me :) the channel has plenty of content on it that evolves linearly in complexity, so feel free to checkout the playlists and watch them in order if you want to :) sharing the channel with anyone else that may find it helpful is always appreciated 🙌
@nicoqueijo2 ай бұрын
I think you may be able to use the native HorizontalDivider() instead of the custom Box there for the separation between toolbar and screen content.
@sammorales59402 ай бұрын
Will be great if you can add a search bar, thanks for the videos bay the way, really awesome content!!!
@TheAndroidFactory2 ай бұрын
Can definitely add search! Search and filter logic would be fun to build out
@GCkk2 ай бұрын
Hi, Is their a way to inject the applicationContext into multi-module lib?
@TheAndroidFactory2 ай бұрын
For sure! Checkout this StackOverflow post: stackoverflow.com/questions/63072927/how-to-inject-application-context-in-a-repository-with-hilt
@GCkk2 ай бұрын
@@TheAndroidFactory Sorry I think Question was not clear. I wish inject the applicationContext of the app to a library module.
@TheAndroidFactory2 ай бұрын
@GCkk yeah it could be done by defining an interface in the library module that needs application context, and is implemented in the app module. I'd consider alternate ways of doing this as well though as a thought exercise, for instance: do you actually need the application context as opposed to another context? Is there a way you can restructure things so whatever needs the application context can be injected into the library as opposed to the library requiring the context itself? It may not be wrong what you're doing, but it may be easier if you try to solve the problem a different way. Just something to think about! Hope this helps
@DaikonDee2 ай бұрын
Should have watch the video until the end, i stop at 7:35 and wondering for hours why it pass 0 integer. Thank you for the tutorial
@TheAndroidFactory2 ай бұрын
Ha. Thanks for watching :)
@AliZz0A2 ай бұрын
Hi I just started this season I am beginner. First episodes of this series is easy for me. But when you start MVVM and this video I got confused. It looks a little hard and I don't understand full of code. What should I do. I actually hate learning something new without practice. Everyday I want to do something myself then I think I should continue this series and I get stuck again
@TheAndroidFactory2 ай бұрын
Understandable -- there's another series on the channel where I build a "digital clock" using LiveData and I think that might go you understand the concepts better. It is a shorter series and specific to how the architecture + tooling works, so maybe try some videos there
@AliZz0A2 ай бұрын
@@TheAndroidFactory so after watching "digital clock" series should I continue this series or do something else?
@TheAndroidFactory2 ай бұрын
I'd say this series is a good thing to come back to when you learn new things so you can "put it all together" into an app. The digital clock series should help you understand how LiveData works in general and then this series is a more practical example of how to use the tool inside the MVVM architecture pattern
@AliZz0A2 ай бұрын
@@TheAndroidFactory Thanks a lot
@nicosummer90202 ай бұрын
Truly solid content. 10/10 ! You have saved my mobile dev module this semester ✨
@TheAndroidFactory2 ай бұрын
Woo! Glad it helped :)
@Dibyendu.M2 ай бұрын
I have completed the playlist today. I must say you have covered most of the important aspects of a basic to intermediate-level project. Thanks a ton, mate. I look forward to more insightful videos in this playlist. One suggestion: please implement pagination in this project. ✨🙏
@TheAndroidFactory2 ай бұрын
I appreciate your support and will make some more content to complete this app. Although, I already did make a video in this series about pagination - just our own custom implementation as opposed to using a library for it
@zeusalmighty67402 ай бұрын
Should we be moving minSdk version to toml? It is not a dependency, better to have a convention plugin?
@TheAndroidFactory2 ай бұрын
Possibly. Mainly just showing off something you can do. To me it is a "version" so it does have a place in the file, but there could be an argument either way I suppose
@jam4l2 ай бұрын
Nice, thanks Domenic 👏
@TheAndroidFactory2 ай бұрын
Hope it helps :)
@stevensilitonga2 ай бұрын
Use shared elements for those characters! ❤
@TheAndroidFactory2 ай бұрын
Ohhh I like it. I'll look into it!
@MrRahulmalik2 ай бұрын
how about implementing shared element transition for character image from list to detail screen using the new API??
@TheAndroidFactory2 ай бұрын
Love the idea. There is more than one comment about this so I'll look into it!
@AliZz0A2 ай бұрын
I am beginner with android programming. First I learn basic and watch Season 1 from your channel. What do you prefer next I can watch season 3 or should I continue with this season
@TheAndroidFactory2 ай бұрын
Well first off, welcome! Thanks for stopping by the channel :) I would recommend the older Rick and Morty season since that is a full app in XML and this is a full app in Jetpack Compose. All the code is available on GitHub for both seasons, but that other project may help explain some other concepts and is a little simpler than this one. We use dependency injection, a new networking library, and this project is multi-module which is a little advanced in my opinion for a beginner. Once you complete that season though, this one will be fun to watch as well since you'll be familiar with the data and other core concepts of Android development. I'd also recommend the "digital clock" season since that shows some good separation of concerns and LiveData concepts to send data around!
@AliZz0A2 ай бұрын
@@TheAndroidFactory Thank you for reply. This channel is really very good for beginners. You are hero. I have 1 more question. When I should stop watching tutorials and try to create simple projects by myself
@TheAndroidFactory2 ай бұрын
I always try to reply! I'd say pulling the code down from GitHub might be a good start because you have something to learn from/reference and you can build off of it to make tweaks to something you want to try. You'll also have "plumbing" in the project already for making an API call or building a certain UI. But you'll learn really quickly what you know and don't know when you try something yourself! I wouldn't wait too long, but I would keep the projects simple to start so you can build momentum building something!
@Dibyendu.M2 ай бұрын
Happy married life, mate!
@TheAndroidFactory2 ай бұрын
Haha thank you ❤️
@joseluismamanicallizaya53522 ай бұрын
Starting the course !
@TheAndroidFactory2 ай бұрын
Should be fun :)
@Dibyendu.M2 ай бұрын
4:06 When PaddingValues is used in the LazyColumn, the padding works horizontally and at the start and end of the composable. This is why we are not able to see the padding while scrolling. However, when you reach the start or end of the list, you will be able to see the padding.