Driven, adaptable Angular Frontend developer with 7 years of experience (overall 6 Years) delivering exceptional results. A collaborative problem solver and quick learner. With a passion for continuous learning and personal growth, I have extended my expertise beyond Flutter to include proficiency in Angular and NestJS. This diversified skill set allows me to tackle a broader range of projects and contribute to various aspects of software development. During my free time, you can often find me unwinding with a cup of tea, reading something on my Kindle. I believe in the power of continuous learning and exploring new subjects to broaden my horizons as a developer.
Senior Software Developer
Faida SouqSoftware Development Engineer
MashtrixJunior Developer
Zamorin GlobalMySQL
CSS3 & CSS5
Javascript
Ajax
Angular
REST API
Laravel
PostgreSQL
Jira
AWS (Amazon Web Services)
TypeScript
GraphQL
Flutter
NestJs
Node.js
Firebase
MobX
Oh, yeah. No. It started my career as a I'm not under public developer. Letter, uh, I'm a full basically, I'm a full stack developer switch to Flutter development. And, uh, I've been a Flutter developer since last, uh, 4, 5 years. I'll I also focus on some back end development using a Node JS framework called Nest. I studied computer science and engineering in the college, and after that, I moved to I moved, uh, started my career in Laravel and Laravel. I said Laravel and Angular. Okay. Small company in here in, uh, delicate. That moved to match things as a full stack for the data. Yeah. Currently, I'm doing freelance Flutterworks and, uh, some back end works using NestJS and with. Uh, mostly, uh, on Flutter, I mostly work with MobX and the FlutterBlow, and, uh, I personally prefer Flutter Block. I'm doesn't it prefer MobX over Flutter Block. Uh, I started, uh, I started developing in Flutter apps using Flutter Block. But sometimes I felt I like that most of the apps doesn't need a event driven app itself, and the Flutter Block does have a lot of boilerplate at 4. That's why I switched switched to Flutter Mobiles. Apart from that, uh, Flutter Development, I also worked with electronics. I also developed the scope application using electron, and also no, um, you know, experience working with Angular and React.
It's gonna be a process of integrating password service. Yeah. Password, the, uh, system app might be having a a state managing solution. So what I will do that I'll create a cons constant file to avoid magic strings on the application. So I'll disable all the endpoints as a constant API, something like the FP constant or some other, you know, other way files. So I'll write, you know first of all, I write all these endpoints as a constant strings in the application, and then, uh, I'll create a, uh, no, create a sublease file for calling all these APIs. But before that, I'll choose 1 a, uh, API library for, uh, for, you know, writing that rest API. Uh, what which one package I prefer is d o. I'll add b o to the pops for YAML file and the ins uh, and do the necessary setup for the real, like, the writing receptors, write or post modifiers of anything else, writing, middle wires, all these things I'll handle. Then I'll create a video instance, and I'll write an abstract functions for all these all the common HTTP methods like get post, uh, put patch, all these kind of stuff. I can use these functions later on my code whenever I need to send some get method or something like that. So, uh, I'll describe so on my application, I'll pass to 4 wherever I need to call the rest rest, uh, that rest of this. I'll according to my, you know, state management, I'll do that things. Like, if it's a block, I'll create an event for that thing, and I'll handle that event in the block file. And based on that event, I'll call that API from the block itself and and update the state according to that. If the, you know, API process is pending, then I'll update this data according to that. So show us some orders or anything like that. I'll show on the app itself. And when the API response came, I'll see the license to a dot model using high commonly user phrase. I'll scribble the API models for the API fields on the freezing model and, uh, use it to that the insert my state management or whatever I have to use. I'll check both statuses and update the, convert the JSON API response to a, uh, dot plus, and use it for that thing. Uh, for testing, I'll move these API responses using some testing library or block itself has some testing tools for mocking API responses and responses and things where they can mock it while use. So I'll mock the API response and test using that thing. And, uh, uh, normally, for production applications, I'll use flowers or something like that. I'll I'll probably define, uh, base URLs in the ENV files itself. So for before going to production, I'll update the base URL and then release it to the.
Now dynamically, you you use for debugging performance issues. I'll use for the Flutter profiler. That is a very good profiler in the Flutter dev tools itself. So I'll use that. I'll build the application using the pro filter profile mode and then check for, you know, any high memory usage or something like that on the barbell tools section. And I can also if, uh, if I'm testing on a VL device, I can also use there are some third party apps for, you know, monitoring the CPU performance and the screen frame rate. All these kind of things can be monitored in third party application. And use those kind of things. The this frame, you know, frame frame rate also can be monitored using dot dev tools. Yeah. Basically, for for Flutter, you can use dot dev tools for every most of our common scenarios, we can use the dot tailed tools. Otherwise, for extra performance, we can use some third party libraries on the real device.
We're doing more about the documenting at the interactions within a quick report based for future of conscious and the maintenance? Uh, Yeah. That that got a pretty good documentation features like you have you can, uh, describe documentation using 3 slashes or double slashes. So I'll what so this is how I document. I'll if there is a function, which calls on my case, I'll first display what is it what what this function is and when it's going to be caller called. And after that, I'll, uh, describe what are its arguments and what what what what what are the types of documents are and what the function returns. All these things, I'll document using the zone documentation methods. I can use 3 slashes for, you know, writing documentation for Sunday. Then what another thing I commonly does is that, uh, for on the I earlier mentioned that I'll use the service calls for all the AKs. There's some module or some, uh, on some business logic. So I'll disc on that service class itself. On the top, I'll describe what the service is, what kind of business logic we are handling. And after that, for if there is a get request for fetching some if if it's a ecommerce, fetching some if there is a, uh, if it's a ecommerce app, if the we are talking about product listing, then that will be, you know, product listing API. So I'll describe in that this API this API will get fetch all the protective products in the application, and it will, you know, return some area or things like that. Then after that, uh, there will be some API for, you know, storing cart on the API side. I'll describe that describe the documentation like that this particular case towards the user start on the server side for later you see? Then, uh, this functions needs, uh, arguments like product IDs and quantities. All these I'll defend all all those things, and in, uh, write it on the top of the function.
We are close and sort of close. We are apps with screen sizes and limitations. Okay. Move the This is, uh, pretty difficult one. Uh, the thing is the challenge here is that the Flutter doesn't have any, you know. Or Yeah. The, uh, on web, it is very easy to handle using CSS and CSS breakpoints. So the flutter doesn't have that much flexibility for handling the different UIs. So what I what I do is that, uh, uh, if there is too much change, like, for example, if one mobile's on mobile devices, we have to show bottom bar. But if it comes to iPad level 3, then that bottom we don't need to, uh, display the bottom bar. Instead of we need to show a full menu on the right left side. And then it then we expand the screen, like, when when we come to laptop or focus screens, then we normally that's as a best practice, we don't show the menu. We just hide the menu and spread spread the content. And the thing is another example is that on mobile phone mobile screen, we list, like, all these things downwards, but on iPad and larger screens, we need to convert this list to integrate grid. So on these are the some of the challenges I faced during development of responsive network applications. So what I'll do that, uh, what I'll do is I'll use the media query. I'll, you know, uh, what I know I'm gonna do is that I'll, define a custom scaffold, you know, for I asked the it's, uh, extending this scaffold with the top And by analyzing the media query and the the screen size and screen width, I'll conditionally show different width. For example, if it's a mobile screen, I'll I'll have some definitions like if the screen size is less than 5:5:80 or something like that, it'll show bottom bar. If it's greater than 55:80 and some other, that will be a higher threshold, like, 740 or something like that, then it will show, uh, open the sidebar, and it will hide the bottom bar, all these kind of things. So, basically, I'll, uh, manage it using the media query. The media query is accessible from different filters context API.
What was the performance for like in front? Uh, for mostly performance bottleneck happens, though, if you are if you are so if you are having some huge calculations while the screen is rendered. So what I will do that, I'll use isolate for dot dot isolates for that, and they'll move this uh, huge calculations or something like that into the isolate and the screen will be the screen will be rendered without any chance. And we can get the, you know, the calculation result from the isolates.
Load that type and update state. I didn't get the question. Instead of following call for testing a temporary that you're setting about that checkbox. I think from the debug strategy, which you suggest to ensure that the load that enables us in correct state chain. Okay. I wait. Just a compound settle. Okay? Experts. Later. Blow. K. And next in order is I'll use the breakpoints to ensure that to debug that, uh, you know, uh, every events every events are all in order in in correct order. So I'll first add breakpoint on this, uh, the next one and the letter. And I But I have I'll then I'll have the control of how the events are propagated across across the event emitter and it's no events file and blow. Low consumer, all these things I can control with the I know the break points.
It's the best fit manager complex thing that includes user interactions. If that is local persistence, I'll use some if I'm is if there is if there is too much data, like, storing some transactions or something like that, I'll use it. I believe you're something like that. It's it's a symbol data like, yes, and or something like that. Symbol JSON. Then I'll use side right to block or get it just for storing the things on local. Okay. That's one sort of another thing is use interactions and data pitching. And the thing is It's not that much complex, uh, that, uh, all the user interactions are, uh, if you have if I'm using Flutter block, all the user interactions are some of some kind of events. And the the block emit the whenever the user clicks one button or something do something like that, then block the block will emit the event, and the the event will be handled inside the block. And based on that event, there'll be some data patching happening. So during the data patching, I'll I need to update the use of that. The data is loading, and all these kind of things will be handling using events or, uh, yielding some states changes from the block itself. Like, when when the data is searching, I'll do some stage changes like, uh, like, for that particular data is loading. I'll leave you that state. And the apps will the apps screen updates, uh, you'll show some loaders or of if it's a button, then the apps screen will show that loading. It'll change the click button, click text to loading or something like that. Uh, Yeah. And the the complex state can be easily, uh, managed using event driven access on any other state manager. And on local persistence, like I said earlier, we can use, uh, database or hydrated storage. So whenever a state changes in hydrated storage store, I hydrated block whenever a state changes, it will automatically stored on the, uh, user's device. If it's if we are using high, then we can use the, uh, another block for storing and retaining data from the driver. Then for communicating with this block, we can use use events also.
Improve the launch time of it. Okay. Uh, I'll avoid using for improving the launch time. I will avoid using, you know, uh, first of all, I'll avoid using large kind of large calculations or something like that on gmail.transactfile. If there is something like that, I'll move the those kind of things into isolate so there won't be any issues, calculations happening when the app starts first time. And I'll, uh, also add a, you know, netting flash screen for to the flash application. So the flash screen display is that is not a responsibility of so you can use the net, uh, iOS or Android's native capabilities for showing the splash feed, and we can remove the responsibility from different location. Uh, another thing is, uh, minimize the app size. So you can, uh, reshape the bundle, uh, reshape the Android bundle and iOS app site iOS IPSIs. Uh, and the thing is I'll check the if there are any assets or phones that can be loaded from server. I'll do that or I'll reduce the asset size to a minimum. Okay? Uh, if if there are huge assets, I'll lazy load from lazy load. That assets when the app is honest, uh, after the app is started or do you can on Android, you can easily load assets from the play itself in during the initial uploading and implement those three kind of things. Another approach to for minimizing app sizes. Of of course, I'll be I'll be building building, uh, on Android, I'll be building a app bundle. So the thing about that bundle is that Google Play Google Play will split the bundle to to a suitable APKs for each device. So some device will be getting a smaller APK, and other device will need a huge screen size as they will be getting a huge epic file. So the the app size the epic I mean, epic size or update size is managed by the Google Play. Then, uh, the thing is, like, uh, normal regular tour, like, removing unwanted codes or removing unwanted unwanted packages. Plus, there are some cases there will be some cases that that, uh, some of some packages will be huge. So I'll try to avoid those kind of packages or they might have said something about reducing the bundle size. So I'll implement those best practices into flip propagation.
How would you utilize additional statements like provider or looks at full openness? Yeah. The thing about, uh, Ratabox is it's, uh, modified version of provider or revoke port. The provider all these provider is provider is transferred, uh, on in provider, the block or whatever the pro, uh, data is transferred using the context, for the wrap context. So how do you utilize the addition statement in solutions like provider or portal? So provider, we can use, uh, some common things like passing the down yeah. For example, the the the theme context is a data example for how provider works along with all other, state management solutions. So the team con that is default with default on flatter. Uh, the team contacts is, uh, contacts which available all the file all the configuration of regular team team of the that app itself. And all the the paid contact users provided to, you know, move the data across the registry.
Why, uh, at least I, uh, regularly review the community by answering some questions on Stackster workflow. I also look for answers on better forums like, uh, Flutter GitHub issues. And, uh, I have some discord channels, the local community Flutter groups. I also joined some I also look for answers on this kind of thing, local community groups. Uh, we have a very active Flutter Kerala group in Telegra. So I sometimes answer questions and and some of my questions were were previously were answered from other community members in that include. Yeah. Uh, other than that, sometimes I know contribute. I'll, uh, modify some packet. I had run some open source contribution for modifying some minor changes and improving the dark version. Or there are some breaking if I saw some breaking changes in the application, which is not compatible with the data's frustration, I'll implement those things. Like, it will be I already I what I have done is small small changes in the those packages. Those PRs are already merged with those package orders. We'll create the PR with the package in the master package and all these those are already merged. Yeah. That's