Experienced Full Stack Developer passionate about new technologies, leading teams to deliver
innovative software solutions, and continuously learning to integrate cutting-edge technologies
for revolutionary results.
Flutter & Fullstack Expert
FreelancerMobile Team Lead (SDE-3)
Signzy TechnologiesSDE-3, Pod Lead
Signzy TechnologiesSenior Software Engineer (Mobile Team)
Proseon TechnologiesLead Flutter Developer
Rockers TechnologiesVSCode
WebStorm
Docker
Jenkins
Github
Bitbucket
Postman
Fiddler
Tomcat
Github Actions
Bash
AWS
Figma
Trello
Zeplin
Adobe XD
SVN
Could you help me understand more about the background by giving a brief introduction? Okay. So, basically, I've been working as a mobile app developer since, 2, 017. I started as a mobile app developer only. I started I started working with Android And beneath you, so after that, I'll, I'll move to, Flutter after a few years, and, that particular switch was also, inspired by the management, We are rewriting the existing native Android application to flutter. We are covering both, iOS and Android, platforms with that. So that is, that was the initial switch to Flutter. After that, I have been working, I I have worked with service provider company.
What is the best way to manage it? Manage a complex state that includes user interaction, data fetching, and local persistent. Best way to manage complex state is basically it depends on the type of, uh, application we are building. A complex state is basically including many type of data included in a single state. Also, handling user interaction inside a state is a complex part. But, uh, I would prefer using Flutter Block or QBuild, um, because they allow us, um, having many freedom and control over the events and the states that we are going to have. Um, also, uh, local persistence, I would basically try to use preferences for simple applications, but, uh, there are other complex, uh, persistent storage libraries also available, like, uh, SQLite, SQLite, and, uh, Hive. Hive is basically, uh, dynamic, uh, storage. It can store any serializable data in any format. So yeah. That's it.
How would you optimize a Flutter app's network request? I'm dealing with large play payloads. Gaut, try to minimize the, uh, API callbacks. Um, going back and forth to the API takes a lot of time and uses a lot of resources as well. Um, I also seen a better drainage when excessively calling APIs. So for that, I would, uh, basically club all the requests, uh, using the future APIs or try to prioritize the recent events. Like, let's say, if we are dealing with, uh, application that calls an API on user click, so I would prefer, uh, or I would prioritize the recent click, uh, rather than handling all the all the requests. Um, basically, debounce any events. Uh, so yeah. That's it.
What approaches do you use to keep the Flutter code base maintainable and readable? Um, I try to keep the, uh, logic away from the widgets. I basically followed the, uh, MVC pattern, but, uh, MVC pattern with a slight change where controller doesn't have, uh, any control over the view. But, uh, it's a mix of MVVM and MVC, uh, for me. I try to keep the logic away from widgets. The domain knowledge keeps inside the model. Any processor or any services that I have, I'll I create a manager class, a manager or a controller class, basically, that processes the data, uh, stores it in the model, and, uh, whenever the data is updated, an observable data reference is forwarded to the widget, so the widget updates directly. Most likely, uh, in Flutter block, uh, package you see, uh, there's a block builder. So block builder is what, uh, I use, uh, generally.
Describe a method for ensuring data security when integrating with third party libraries. Basically, security, I I would prefer using 3rd party libraries with verified uploaders only, um, mostly from the Flutter or that teams. Um, there are some other verified uploaders as well, uh, like, uh, there's a, uh, symphony, uh, there's a symphony company that basically creates a few custom UI libraries, like charting libraries and everything. I review the third party libraries first, even if it is uploaded by a 3rd party, you know, verified uploader. Um, I try to go through the source code as much as possible. Since Flutter is mostly open source, I can review everything. And, uh, that's how I try to manage the security part of security part of checks, uh, for the packages. The other thing I try to do is I check for number of updates that particular package is getting. So, like, uh, if the package is complex, I I try to find any packages that are recently updated. And those packages that are, uh, you know, those packages that are updated with the latest Flutter upgrade as well. So, like, any recent updates with Flutter SDK should be reflected in that package. Um, that's what I look for.
The refactor application to improve your performance and intability using flatter block package. Um, basically, I would try to, uh, separate out all the states and, uh, events. Um, basically, I would try to remove any interaction directly applying on the widgets, and, uh, instead, uh, I would just fire, uh, you know, specific events, uh, to be captured by the block, and then the state can be handled, uh, map to event, uh, sorry, map, uh, event to states, uh, method is responsible to convert that particular event to the state. And, uh, block builder will be updating the particular widget with whenever the state is finally updated. So that's how I would basically refactor a Flutter application. Um, I will try to start, uh, that particular application with the, uh, Flutter block as soon as possible rather than having to having it to be refactored, uh, later on. So yeah.
This is in Flutter block package. What debug strategy would you suggest to ensure that the load data event results in the correct state? I am not sure what load data method or is a method is going to do in here? Let me check. Okay. So my data block is we are adding an event on my data block to load the data. Okay. Uh, tester then comes and settle. Uh, expect later. What debug strategy would you suggest to ensure? In debugging, I would suggest, uh, just, uh, going through the entire event to state conversion. Um, so I'm going to the blocks, uh, map event to state method. Uh, I would check for the particular event where switch case or if statement is there. Uh, I will go through the following method or implementation for converting that particular event, processing that event, and, uh, finalizing or updating the new state before using it. So 1 point is that the other point is where I will receive the event, which is in block, uh, listener or block data. So I'll check for that particular state and state data there. Look for any anomalies or inconsistencies in that. So yeah.
What could cause performance bottleneck in Flutter app, and how might you resolve it? Uh, most of the time, I've seen a Flutter performance bottleneck is due to, uh, widget renders with, uh, heavy API calls or, uh, very, very frequent, uh, rebuilds. So, uh, for starter, I would, uh, I would try to limit the rebuilds of that particular widget. I try to understand, uh, like, why is it rebuilding? Why why, uh, what is causing that particular loop? Um, try to resolve that, uh, that problem and, uh, mostly try to, what, um, like, um, resolve the multiple rebuilds. If not necessary, I would convert it into a stateful widget with, uh, particular events that triggers and creates a new widget, uh, again instead of having it as a straightforward widget. So those will be my initial, uh, implementations, initial changes. The other things I would check was I I would check is that that tools. Dealing tools are performance tools that we get with the that SDK and. So, uh, those tools will allow me to check, like, which particular widget is rebuilding or what is getting, uh, what is happening behind the scenes, uh, like inside the memory or CPU, uh, function calls. So I'll use that to dive deeper into the into the issue and, uh, find the root cause. So, yeah, that's
What strategies do you employ for unit and digit testing in Flutter to ensure high quality code? Um, I try to, uh, follow the TDD someday. I create widgets with, uh, along with their, uh, basic tests. I don't go into the entire testing as well just like in 3dd, but, uh, I try to cover, uh, as much as, uh, basic criterias for that particular widget before I start working on the logic. Also, I I, uh, I try to I try to cover the business logic as well inside the unit testing. I try to keep them separate so that they can be tested proper properly, um, keep them modularized. And the other thing is I I would use, uh, mockable APIs, mockable, uh, plugins, um, that allow me to mock particular widgets with the test data. So, yeah, that's that's it.
Could you suggest a strategy to enhance prototype CICD pipeline sharing screen line code? And then and affect your overall screenings. I'm not sure, like, what is the expected strategy here. Now it depends on the existing strategy. But, uh, let's say, for me, the recent, uh, work I've done with any CICD pipeline was a custom pipeline only. So I'm not aware of the situation here. But, uh, to streamline the, uh, deployment, I would suggest that, uh, every code not every code commit to that particular repository should go through the Flutter Links. Uh, Flutter Links, when the test is passed, it should run the unit tests. Once the unit test passed, uh, it should run all the integration tests if available, uh, if, uh, there are integrations available in the pipeline as well. If not, we can skip it. Uh, integration test can be done by the manual queue as well. Um, there are automated workflows available for tools like, uh, they have manual testing automated, tools like Maestro, mobile testing tool. So it's there. Uh, we can use that in our inside our CICD. Other than that, uh, I would say it's just, uh, uh, passing all the tests is the first, uh, first task. If the test passed, then we build the APKs or iOS files or anything that we want. Um, if any test fails, we are not going to build that. We are just going to, uh, fill that pipeline or fill that particular push and, uh, ask a fix from the developer. So yeah.
How would you utilize additional state management solution like provider? Um, I'm I've been using provider alongside Flutter block. I've been using it as a, uh, basically, block provider in some states where the blocks we cannot pass blocks directly, um, or we cannot create a new instance of a particular block, uh, in some cases. So I I assign it to a provider, and I use the provided, uh, provider reference in, uh, children widgets in some other files to access that particular block. A reward port works the same. Uh, the working of provider and reward are similar, so I use the same approach.