As a skilled Flutter and native Android developer, I bring three years of immersive experience in Flutter development coupled with 6 years in native Android expertise. My foundation encompasses an adept understanding of Google services, REST APIs, cloud databases like Firebase, and seamless integration with various payment gateways. Embracing Clean architecture and Bloc design patterns is ingrained in my approach to crafting robust applications.
My track record speaks for itself, marked by a series of high-quality, responsive apps from conceptualization to a triumphant release on both the Play Store and App Store. I am dedicated to delivering excellence, driven by an innate enthusiasm for transforming concepts into tangible realities.
While I'm continuously honing my craft as a top Flutter developer, my standout attribute lies in communication. I prioritize clarity, always seeking the right questions before initiating work and presenting optimal solutions. My commitment to transparency ensures an open dialogue throughout our collaboration.
Seeking opportunities for long-term partnerships, I offer:
Professional Design Expertise Leveraging Flutter
Swift and Responsive Communication
Ongoing Support for Flutter App Development
Comprehensive Flutter App Source Code
Unlimited Revisions Until Absolute Satisfaction
I am committed to elevating your project with reliability, enthusiasm, and unwavering honesty. Let's embark on this journey together and bring your aspirations to fruition!
Open to engaging in full-time, part-time, or long-term commitments.
Warm regards,
Tech Lead - Mobile
Yooli Health SolutionsFreelancer
FreelancingAndroid Developer/Tech Lead
LeewayHertz INSenior Android Developer
Ncrypted Technology PVT LTD.Mobile Application Developer
LeewayhertzMobile Application Developer/Tech Lead
LeewayHertz INAndroid Developer
Keshav InfotechSenior Android Developer
Keshav InfotechJunior Android Developer
iGreenTech servicesAndroid Developer
iGreenTech ServicesJava
Kotlin
Flutter
Dart
Android Debug Bridge
Android
Android SDK
Android Studio
Visual Studio Code
Google Ads
Google Chrome
Google Play Console
Firebase
Firebase Realtime Database
GitHub
GitLab
Bitbucket
Zoho
Jira
Slack
Microsoft Teams
Zoom
Eclipse
VSCode
Flutter SDK
Github
Bitbucket
Xcode
I am working as full time freelancer
Worked as tech lead for mobile applications
Worked as Android developer.
Worked as junior android developer
Break away from Big Tech and join an inspiring, uplifting, positive social media
platform for all! GETTR wants to bring enjoyment back to your social media
experience by supporting freedom of independent thought and rejecting
political censorship.
Realsnft - an NFT marketplace where user can buy or sell any video content as
NFT, also can like comment on videos.
GET: Is the premium food delivery and restaurant reservation platform that
focuses on quality independent mid-high end restaurants in London. The
platform is smartly designed to navigate seamlessly in a user friendly fashion
and allows users to search, research, and order delivery, collection of reserve
tables at restaurants according to their live or specified location, or by cuisine or
food type.
With BooknRide app, booking a ride has never been easier. It quickly go through
number of procedures of available services and enables you to select one of
them that matches well with you.
The app secures data and secrecy. Drivers will have a range of vehicles, which
includes sedans and utility vehicles. It plainly puts its whole focus on driver
based requirements such as navigation details, ride details, user details, etc.
ShareCaar is a standard ride-sharing service app. A user logged in can book a
ride provided by other users or can share his ride and book passengers for it.
The smart search algorithms make it very easy to show rides nearby any place
user wants to get picked up or dropped off to making the flow total hassle free
and seamless.
Thank you. So hi. Uh, hi there. My name is. And, uh, I have a total 11 years of experience in mobile application development. I've started, uh, like, I've completed my MCA in, uh, master of computer application in 2014. And since I've, uh, since, uh, January 2014, I'm working as an junior I have started working as a junior in developer. And since then I've, uh, worked with 4 different companies, I've I've, uh, worked with beta, uh, little bit, uh, on the platter itself, uh, in in between, like, uh, but I mostly work with Android. So, uh, yeah, I I will mostly work with, uh, all kind of tooling. Like, I work with the social media applications. I work with the financial application like Wallet and, uh, cryptocurrency related. I work with dating application. I work with, uh, Yeah. So I think, um, almost I've worked with, uh, all domains, like, mostly all domains. And, uh, yeah, that is, uh, about me. And, uh, since, uh, my last company, I was working as an entry developer, but they they wanted to move to, uh, react native with their reps. And, uh, they were they were, uh, they were they have only few reps. Uh, they have 4 reps. It's for the for the product based company, and, uh, they have they wanted to know to, uh, reactivity. So that is why I'm looking for a change. And, uh, yeah, that is all about me. Like, I'm I'm married, and I have a a kid, uh, 2 year old daughter. So, yeah, that's about me.
In this scenario, would using your Intel service be more beneficial than reducing yourself? Yeah. So, uh, let's say, uh, there is a scenario where the task which we are going to be executed in the in the service, which is related, uh, to the Excel or, uh, any particular thing, uh, which is which is executed based on any, uh, user action or any, uh, particular, uh, Excel, uh, which is provided by either the app or, uh, either the system. So in that case, uh, the intent service will be a great fit. Like, let's say, for example, uh, we wanted to execute something when there is a very low battery level, or, uh, we wanted to execute something when, uh, user have, uh, provided a specific input or either user have clicked on any button or user have, uh, set the time of that, uh, particular, uh, task. So in that case in that case, the intent service will be a very, uh, will be a great fit, I I think. Yeah.
Can you out the the state security store? The sensitive to the user is entered key store system. Yeah. So, uh, basically, entered key store system is a is a way to store a sensitive data, like, let's say, ID password and things like that. So, uh, if we want to store our edge sensitive data in key store, so there will be, uh, we have to, uh, call the key store classes and, uh, use those classes to store the data, store and retrieve the data. So, uh, let's say if we want to store the store the data securely, send the guest, uh, like, uh, basically, KeyStore itself, uh, stores the data securely. So there is, uh, none, uh, like, like, uh, for normal applications, there'll there'll be no need to add extra security layer because, uh, key store, uh, in risk key store itself, uh, secure, uh, way to store the data. But if we like, let's say, if we want to, uh, make it more secure, uh, for some, uh, application or some use cases, so in that case, uh, what we can do is, uh, we can, uh, like, encrypt those data. Like, let's say, I'm I'm I'm storing the password to, uh, key store system, but I am not storing as a plain password, like, all of or a plain text. I I, uh, what I will do is I'll first encrypt that using a a key or using any algorithm, like s h a 256 or any like like, any way, I'll, uh, encrypt it. And, uh, whenever I'll, uh, retrieve the information of the retrieve the data from from the Android key store, I'll, uh, decrypt it and use it. So in that case, like, we also have to store the security key, like, the public and private keys to the both terms or, uh, to encrypt or decrypt data. Uh, we have to store those keys also in the in the key store system. And, uh, yeah, we can do it that way, or I thought we can store the, uh, public key on, um, on a server or somewhere or on a cloud somewhere. So, uh, using that, we can also, uh, like, integrate the data. Yeah. So that is, uh, how we can show the data securely on Android East Coast system.
Yeah. So, uh, let's say there is a a list of images of which we want to show, uh, so, uh, on on a single screen. So in that case, I I would, uh, firstly use a recycler view. And, uh, yeah, recycler view helps, uh, RecyclerView introduce a lazy lazy loading, uh, using which, uh, the list which we are showing will be very responsive. And, uh, yeah, it will be fast, I would say. And, uh, too many of the images, uh, like, I would I would use a library like Picasso or Glide, uh, using which we can, uh, manage the bitmap or images, uh, very easily, uh, without any memory leak issues. And, uh, we can also, yeah, create our own, uh, like, let's say, our own solution, uh, similar to Picasso or, uh, Glide. But, uh, I would suggest, like, uh, to use the Picasso Glide. So in that case, uh, we don't have to, uh, worry much about the because it's a it's a well trained, uh, or, uh, vastly used, uh, platforms. And, uh, using, uh, like, uh, there will, uh, there will be very less issues, uh, instead of, uh, we are we are developing. Like, uh, if we let's say, if we create a custom solution so that, uh, that can be that cannot be error prone. Like, uh, there may be a few errors, but, uh, the Picasso and Glides are, uh, Glide are, uh, very, uh, used. Like, it's it's, uh, working with images since, uh, last few years, so they might be, uh, very upgraded. So there will be less chance to, uh, any error or the memory issues. So, yeah, I would, uh, use a Picasso or Glide or any image, uh, loading library. And that case and I'll, uh, use a recycle view to solve list. Yeah. And, uh, if we are using a list view, let's say, we, uh, in this question, we have, uh, specifically to list view. So in that case, I'll, uh, what I will do is I'll make is make a few changes in his adapter. And, uh, that way, I'll, uh, let an adapter will use, they will, uh, make some changes and, uh, list 2 adapters so that way we can, uh, populate the data easily.
Yeah. So, uh, in input, like, uh, state management is a very crucial, uh, part, and, uh, I would suggest I'll, uh, I, uh, use live data and view manager and those kind of, uh, classes. Let's say the application is very large and, uh, there are multiple components, 80. So I would, uh, and then the check, pick, compose. Uh, I will use a a statement as well, uh, I'll, uh, like, uh, there will be a particular state, uh, assigned to a particular screen. And based on the, uh, changes on the state variable, uh, they will, uh, update the JPEG compose, uh, view. So I would so the basic strategy, uh, would be, uh, making this, uh, a different screen for different different state for different UI. And, uh, yeah, it is, uh, all we will be needing. Like yeah. That would be a best strategy, I think, uh, because, uh, every, uh, if every screen have, uh, if every screen have, uh, a space, uh, state management classes. So in that case, what we'll, uh, we'll be able to achieve is, uh, like, let's say there are 5 screen, which is currently active, uh, one upon another. Like, uh, full screen is in on post it and one screen is in, uh, a few state. So in that case, like, uh, if there is there are changes and then, uh, all the 5 screens. Let's say there is a variable, uh, which, uh, which is, uh, which affect things all the 5 screens. So let's say there is a change in that variable, so we'll be able to execute those, uh, changes in a different, uh, like, differently because, uh, the state of the classes are different, and, uh, we can, uh, execute those, uh, on a differently. So whenever there, uh, the user go, they exclude the previous screen. The changes executed there, and, uh, like, the variable is already changed. So whenever user calls on resume, uh, method, So at that time, the change will happen. So I think that will be the best strategy.
Yeah. So, uh, basically, a repository layer is a layer where, uh, we are getting the data. So the other layers, uh, do not concern, like, how we will getting the data or from where we are getting the data. So, uh, the repository layer is basically our, uh, layer where we are getting data. So, uh, if we, uh, if we, like, discuss how you would use a repository data and flag data to be able to pull the data layer for yeah. So, uh, date, uh, repository module is itself a module which decouples data layer from from the view model. Like, let's say, for for example, like, let's say there is a tape where, uh, we are using, uh, a network data and, uh, a local storage. So we are using both. So let's say, uh, for for the first time, we have, uh, update the data from the network, and we have stored it on the local database. And then, uh, from the second time onwards, uh, until there is, uh, any change on the live data, we will, uh, sorry. Uh, until there is a change, uh, in the in the in the data on the cloud, we will what we will use is we will use data stored in the local database. So and that, uh, the repository layer manages, uh, the, uh, phasing of the data, like, uh, if there is any change. And, uh, based on the change, uh, if we want to, uh, fix the data from the network, so the repository may, uh, repository layer will minute that. And, uh, using a live data, we will, uh, update the live data, uh, at the time of change. So in that case, uh, like, a view model will will be not, uh, like, attached to the repository layer or the data fetching or data, um, gating layer. Every time, like, uh, if there is a change on the on the data at the repository layer, either fetch it from the network or fetch it from the database and, uh, pass those data to live data object. And so that, uh, that way, it will be managed, and, uh, view model have only how to refresh those data or update those data. Yeah. So that way, we can, uh, achieve that.
In Kotlin, that what would what will be the outcome if c user function is called with unknown initialized user data object. Initialized user data object explaining the potential issue and how it could resolve them. Yeah. So, uh, in that case, if, uh, the same user is called with unknown initialized user data. Let's let's say user object is, uh, not initialized or user class, uh, is not initialized. In that case, like, uh, I think they'll give error to initialize the data first on, uh, the user if if the user is a nullable variable, uh, from from from where the same same user is called, In that case, it will allow, uh, to call the function. But here, uh, it will check it is checking that, uh, it is checking that, uh, how, uh, like, if the user is null or no. In that case, like, uh, if the user is null, so it will, uh, pay it it is printing a logo workflow, and, uh, otherwise, it will, uh, store in the database itself. And, uh, yeah. So now, uh, if the user data is not initialized, in that case, uh, like, uh, the, uh, save user function call itself will give the error because, uh, user, uh, is because that, uh, uh, Kotlin, uh, monitor the, uh, variables whenever there, uh, there is, uh, like, when whenever the null, uh, or no null, uh, it's, uh, non null object is, uh, is not in the slide. Like, let's say, we have a user late in it, uh, for, uh, for the user data, and let's say we are not initializing that in in in everywhere, and, uh, it will give a error to initialize it first. So, uh, whenever they will, uh, like, we'll call the user consent, it will, uh, at the time of compilation itself, it will give error or, uh, it will also give error at runtime. So it will, uh, give error that, uh, the data, uh, we are using, the user data, is not initialized, uh, anywhere. So, yeah, in that case, uh, we what we can, uh, show is we can, uh, create a nullable, uh, instance of the user data instead of deleting it. So in that case, uh, our function will handle if the user data is null, uh, if it is not. So, yeah, we can create an enable object of the user data instead of updating it object, and, uh, that way, we can resolve this.
No. Object to it, we have to suggest to convey to move itself up to view within different parts of yes. So to, uh, like, uh, like, uh, to use this function, this launch activity function using a different lab, uh, part of the activity. In that case, we what we have to do is, uh, we have to, uh, put the context as an argument. So every time, like, uh, we will get 2 arguments, uh, one will be context, uh, of the classes, uh, from where we are using this launch activity function, and the other one will be, uh, the activity. I mean, uh, the class we want to redirect to. And, uh, yeah, there'll be, uh, like, uh, there are many things we can add here. Like, uh, we can also add arguments or a bundle. So which using which, we can pass the data from this activity to another activity. But, uh, yeah, basically, uh, that, uh, the bundle, uh, variable, uh, will be an optional thing because, uh, we will not be having, uh, we will not be passing the data every time. So that will be a 1 or 2 time thing or, uh, it will be not a regular thing. So we can make it optional, and we can use the context, uh, as a variable. Uh, sorry. As a request parameter. Uh, we can use context at a request parameter. So there will be, uh, 2, uh, parameters, context and activity, and then the 3rd parameter bundle will be Hoexner. And using which, uh, we can use this, uh, functional as it is. But, uh, instead of this, uh, the we have to use the context, uh, context or object. And, uh, before the start activity, we have to, uh, put a condition. If condition, if the bundle is not null. So in that case, we have to add, uh, intent dot output extra and then bundle. And, uh, yeah. Uh, so that way, we can use this, uh, function from anywhere. Uh, like, uh, like, let's say, we are we have 6 or 7. Sorry. We have 6 and 7 screens in our application, and we want to use the same function to, uh, redirect from, uh, one screen to another. So, yeah, for every places, I think we can,
Yeah. So, uh, in that case, like, uh, I'm I'm creating an application, and it is expected to get a high, uh, uh, high, uh, users or high, uh, network request. So the volume, uh, will be very large. So in that case, what I will do is I will first, uh, create, like, I'll choose an, uh, beacon or, uh, server, which is, uh, very, very good with a high request. Let let's say there are, uh, 50 request in a second or 80 request in a second. So I would, uh, choose the base server or a base to begin, uh, for the API calls based and response. And from, uh, my end, from front end, like, let's say, I'm I'll I'll use a proper uh, API calls. Like, let's say, I'll I'll add, uh, validation on every API call. Like, let's say, uh, user token or, uh, I'm I'll I'll use authentication and, uh, every API call. So in that case, we will, uh, neglect the API calls which are, uh, coming from non user or, uh, which are, uh, not related like like or known users. So we can neglect those calls first. Secondly, I'll, uh, cancel every request. Uh, like sorry. Not cancel every request, but cancel the request which, uh, user, uh, no more required. Like, let's say, user have come to a page, uh, where API have call. Yeah. Like, let's say, there is a 2 API call on that page. So whenever user comes to the page, the 2 API codes are made, and, uh, user instantly goes back, uh, without, uh, getting the result or before getting the results. So in that case, what I'll do is I'll cancel those request. Cancel those 2 requests so there will be a very, uh, like like because of, uh, this, uh, there will be, I think, a few, uh, request call. And, uh, thirdly, what I'll I would, uh, do is, uh, if there is any static thing or static data or there is any data which, uh, updates, uh, rarely. Like, let's say, there is some some data in our app, which, uh, rarely updates in a month or in a 2 months. So I'll switch, uh, those data in our local database, and I'll fix the data from there. And I'll definitely, uh, put on a on a to token or a way, uh, so that I can identify the data on the server has updated. So I have to call those data again and, uh, update those data in my local message. So, yeah, using these techniques, I can I, uh, we can achieve the, uh, like, reliable under heavy, uh, network traffic?
Yeah. So, uh, my, uh, strategy would be, uh, like, let's say, uh, there'll be, uh, 3 branch. First, uh, first is a main branch or, uh, or a parent. Let let's say main there is a main branch. There is a a staging branch, and there is a development. And so in that case, like, we'll first develop and, uh, staging brat sorry, development branch. We will, uh, create a different, uh, branch for different, uh, functionality or different, uh, issues. And let's say if, uh, let's say I'm I'm I'm working on a functionality. So once I'll I'll finish the functionality and test it on my I'll, uh, boost this to a development branch where, uh, someone will review the core of the of the branch and then merge it. And, uh, after that, there will be a testing. Uh, there is a proper testing and, uh, using which we can identify the issue and resolve their own. So after that, we will, uh, move to, uh, next branch, uh, publish uh, sorry. Uh, like, let's say there is a development. There is a, uh, other branch, uh, production branch. So we will move to that production branch, and, uh, there also, we'll, uh, take the details, like, test the, uh, thoroughly, uh, for any, uh, issues or anything. And if that is working fine, then also we will be moving to the main branch. And whenever there will be a push in main branch, if we will say it as c, uh, CD, like, let's say, uh, code magic or something. So, uh, using the code magic, we will, uh, what we will do, like, we will set the function that, uh, if we are getting any boost in the main branch, so in that case, we will, uh, update, uh, the AirPods player. So we'll, uh, set up the, uh, black code magic or similar for for the main branch. And whenever there is boost, the code, uh, code magic will, uh, execute the, uh, execute the, uh, code on the main branch and, uh, create a new release and, uh, push it to Play Store and send it to review. So in that case, we don't have to do anything. But, yeah, we we have to make sure that, uh, there will be no unauthorized, uh, push on the main branch. And, uh, so using, uh, like, that way, we can achieve, uh, I think it will be a great great strategy for CAC.
Yeah. So, uh, data is basically, uh, uh, dependence injection thing. So, uh, whenever, like, we, like, uh, in our mobile app, like, let's say, we are using a single class for, uh, a variety of, uh, like, for many places. Like, let's say, there is we are storing the data, uh, in the local database, and, uh, we are accessing that, uh, local database, uh, manager or local database helper class in, uh, many activities. Like, let's say, we are fetching this data from, uh, on this activity. We are fetching their data from, uh, another activity, and we are, uh, pushing the data on, uh, the third activity. So we are using that same class and, uh, every, like, uh, let's say, on all the 3 of the activities. So using, uh, data or Hilt, what we can do is we can create a singleton class for, uh, for that particular, uh, for that particular, uh, helper class, uh, database helper class. And using which, we can, uh, create a single object and, uh, use that on all the 3 library sorry, 3 activities. So, uh, we don't have to create an object, uh, every time on every activity. Like, let's say, there are 3 activities and, uh, to access the data database related thing, I have to create first, uh, the object of that, uh, database helper class. And, uh, after that, I'll, uh, after that, I'll be able to use that class and use the methods like, uh, getting the data or fetching the data or pushing the data on the data. So instead of, uh, using data or Hilt, we what we can do is we can create a singleton object and singleton class, its object, and, uh, we can use that particular object in all the 3 of the object duties. So that, uh, that is, uh, that helps, uh, like, that manages the, uh, it reduces the multiple object concept, and, uh, it will create a single object. So in that case, uh, it will be memory efficient, I would say. Uh, Yeah.