profile-pic
Vetted Talent

Aditya Singh

Vetted Talent
Seeking to leverage deep technical expertise in cross-platform mobile application development using Flutter, along with a strong foundation in software quality assurance, to drive innovation and excellence in a forward-thinking tech company.
  • Role

    Mobile / App Developer

  • Years of Experience

    5 years

  • Professional Portfolio

    View here

Skillsets

  • Flutter - 4 Years
  • Api integration - 4 Years
  • Android Studio - 4 Years
  • RESTful services - 4 Years
  • SQL - 2 Years
  • GraphQL - 3 Years
  • MySQL - 1 Years
  • Database management (mysql)
  • Restful APIs - 3.5 Years
  • Java - 2 Years
  • Dart - 3.5 Years
  • Persistent storage - 3.5 Years
  • RESTful API - 3.5 Years
  • CI/CD - 3.5 Years
  • C++ - 1 Years
  • System Design - 0.3 Years
  • Firebase - 3.5 Years
  • Python - 0.3 Years

Vetted For

10Skills
  • Roles & Skills
  • Results
  • Details
  • icon-skill_image
    Senior Flutter Developer (Remote)AI Screening
  • 83%
    icon-arrow-down
  • Skills assessed :Ci/Cd Pipelines, Node Js, Dart, Flutter, Flutter framework, flutter_bloc package, Restful APIs, Third-party Libraries, Django, Github
  • Score: 75/90

Professional Summary

5Years
  • Apr, 2021 - Feb, 20242 yr 10 months

    Flutter Developer

    Settlin - Linking Spaces Technologies Pvt Ltd
  • Jun, 2019 - Sep, 20201 yr 3 months

    QA and Mobile Application Tester

    Droidshift IT Solutions Pvt Ltd
  • Software Engineer L2

    Settlin - Linking Spaces Technologies Pvt Ltd
  • Flutter Developer

    Droidshift IT Solutions Pvt Ltd

Applications & Tools Known

  • icon-tool

    VSCode

  • icon-tool

    Android Studio

  • icon-tool

    Jupyter Notebook

  • icon-tool

    Github

  • icon-tool

    Firebase

Work History

5Years

Flutter Developer

Settlin - Linking Spaces Technologies Pvt Ltd
Apr, 2021 - Feb, 20242 yr 10 months
    Led the development of Settlin consumer and partner apps using Flutter, overseeing the entire lifecycle from inception to deployment. Integrated Firebase and GraphQL APIs, employing Bloc and Provider state management to achieve a 30% improvement in app performance and data handling efficiency. Implemented custom routing, Hive, CI/CD pipelines, and localization features to enhance user experience and streamline development processes.

QA and Mobile Application Tester

Droidshift IT Solutions Pvt Ltd
Jun, 2019 - Sep, 20201 yr 3 months
    Tested over 150+ Android and iOS applications, gaining a deep understanding of mobile app functionality, which laid the foundation for my transition to mobile app development. Swiftly acquired proficiency in Telerik Fiddler for testing, navigating through testing workflows and deadlines. Demonstrated adaptability by quickly learning to identify and document variances/defects in User Experience and process flows, effectively communicating findings to the team.

Software Engineer L2

Settlin - Linking Spaces Technologies Pvt Ltd
    Led the development of Settlin consumer and partner apps using Flutter, overseeing the entire lifecycle from inception to deployment.

Flutter Developer

Droidshift IT Solutions Pvt Ltd
    Developed various mobile applications, gained expertise in Flutter and Dart, integrated Firebase and GraphQL APIs, and improved app performance and data handling.

Achievements

  • Led the development of Settlin consumer and partner apps using Flutter, overseeing the entire lifecycle from inception to deployment
  • Integrated Firebase and GraphQL APIs, employing Bloc and Provider state management to achieve a 30% improvement in app performance and data handling efficiency
  • Implemented custom routing, Hive, CI/CD pipelines, and localization features to enhance user experience and streamline development processes
  • Selected as one of the inaugural members of the app development team, achieving proficiency in Dart and Flutter SDK
  • Acquired expertise in SDLC, refining frontend skills, coding principles and object-oriented techniques to meet industry standards
  • Tested over 150+ Android and iOS applications, gaining a deep understanding of mobile app functionality, which laid the foundation for my transition to mobile app development
  • Swiftly acquired proficiency in Telerik Fiddler for testing, navigating through testing workflows and deadlines
  • Demonstrated adaptability by quickly learning to identify and document variances/defects in User Experience and process flows, effectively communicating findings to the team
  • Created apps for Settlin from scratch using Flutter, allowing the development of apps that are visually appealing and highly functional
  • Developing the Settlin partner app has demonstrably improved the team workflows and resulted in reduced operational time by 20%, which led to a 15% increase in company profits
  • Developed ABC Genius, an educational app designed to make alphabet learning engaging for toddlers, featuring interactive and vibrant activities that enhance early learning
  • Successfully led the development of Settlin consumer and partner apps using Flutter.
  • Integrated Firebase and GraphQL APIs to achieve a 30% improvement in app performance.
  • Implemented custom routing, Hive, CI/CD pipelines, and localization features.
  • Tested over 150+ Android and iOS applications.
  • Developed ABC Genius, an educational app designed to make alphabet learning engaging for toddlers.
  • Improved team workflows and reduced operational time by 20%, resulting in a 15% increase in company profits.

Major Projects

3Projects

Settlin Consumer App

Apr, 2021 - Feb, 20242 yr 10 months
    Led the development of Settlin consumer apps using Flutter. Integrated Firebase and GraphQL APIs, employing Bloc and Provider state management to achieve a 30% improvement in app performance and data handling efficiency.

Settlin Partner App

Apr, 2021 - Feb, 20242 yr 10 months
    Developed Settlin partner app, improving team workflows and reducing operational time by 20%, leading to a 15% increase in company profits.

ABC Genius

Oct, 2020 - Mar, 2021 5 months
    Developed ABC Genius, an educational app designed to make alphabet learning engaging for toddlers, featuring interactive and vibrant activities that enhance early learning.

Education

  • Master of Computer Applications

    Indira Gandhi National Open University (2022)
  • Bachelor of Computer Applications

    IINTM- Indraprastha University (2019)

AI-interview Questions & Answers

Yes. So hi. My name is Aditya Singh, and I have 5 years of experience in the industry. Over the past 5 years, I have extensively worked with Slutter. I have being a senior software engineer in my previous company. I have led a team of junior developers Over the past 5 years, in Flutter, I have extensively used Block and provider as the state management. I have expertise in API integration using both rest APIs and, GraphQL APIs. Although I very much prefer using GraphQL APIs. Then I have experience in using Code Magic for CICD pipelines. I have experience in using Hive for offline storage and storage in the applications. I know GitHub and both, GitLab for version controlling. And I have extensively used Firebase for both analytics and graph analytics of the mobile applications.

Name a tool you would use for debugging performance issues in the setup and why. Okay. So in my previous projects, I am familiar with using that dev tools, first of all, which, uh, gives all the insights on the, uh, processes of the application. So, for example, if there are any leakages, memory leakages, or any kind of issues to for that, I have used, uh, that dev tools. It also provides, uh, ins widget inspector using which we can actually look at all the wizardry, um, in front of us. So it also gives some, uh, timeline view on, uh, at what time what was happening in the application. So, yeah, I have extensively used that dev tools. The second 1 I would mention is the Firebase. We have in my previous company, we have extensively used Firebase for both, uh, Crashlytics and analytics. It has helped us in analyzing if, uh, the user is using our application, how often are they using it, which pages are they visiting. So that has been really helpful using, uh, Firebase. And, uh, apart from that, same thing in the Firebase, I would say mentioned, uh, Crashlytics. Crashlytics was really helpful in analyzing if a page was breaking, if some events were happening. We were identified the we were able to identify the events, uh, by which, uh, we were able to solve the problems. It gave us real time crash reports and insights into non fatal errors as well. So, yeah, all in all, I would say I have extensively used that dev tools and Firebase for my for improving the debugging performance issues in my Flutter applications. Thank you.

Architecture. Okay. So in my case, what I did was we implemented our own architecture, and that was in the first project, the settling consumer app. And the other 1 was the settling, uh, partner app where we use the feature first architecture where we specifically focused on the, uh, feature and separated the whole module, uh, under the library. And inside that, uh, library, we had the whole feature, uh, its UIs. We, uh, separated the states, the services, and if there were an API calls required for that. Now for implementing, uh, my strategy, it was first discussing it with the team. If there was a new feature coming, we would first discuss it with the team. Uh, we would discuss the requirements. We would understand the requirements. Uh, we would identify the what what user might require. And then after that, we would go with the design and architecture. So I think separating the concerns is the most important part where we have to describe to the UI UX as well upon our requirements on what the user might expect and might not expect. So that would be the other step. And then as programmers, we would define the interfaces and the classes that we need for that particular feature. Now, uh, in the architectures, services and network layers are very much important. So we could implement the APIs. We could, uh, for that particular feature, we would call the, uh, data on the back end. So that would also be included in that particular folder for that feature. And, uh, the presentation layer comes, uh, up in under the UI. So we would definitely use Sigma, uh, given by our UI UX, and we would implement that using Flutter. And I have also used, uh, several state managements, uh, such as block and provider and integrated the block with the UI. So it would give on a particular event, it would give the resultant, uh, or the required state. And, uh, most importantly, I would suggest, uh, testing. So in my case, uh, if I talk about clean architecture as well, so we had separate unit tests for each features. For example, we had a filter page where, uh, we used to, uh, ask the user upon or, like, what features or what kind of properties the user would like to see. So we would pick that particular filter page, uh, as a feature, and we would test it under the unit testing. And we would, again, test it manually as well. So that is, all in all, the implementation and my strategy that I had used in my company and under my team. And the last 1 would be reviewing the tests and then finally releasing it to production. Thank you.

Describe your method for ensuring data security when integrating with 3rd party libraries. Okay. Describe your method for ensuring data security when integrating. So in my previous experience, we would ensure data security by separating, uh, by not directly using the, uh, package, uh, with the UI, but we would add some layers. So, for example, uh, security. If I talk about security layers, uh, we would have so let's say if I'm fetching the API using, uh, 1 of my services, the services the custom made services in my project, I would ensure that we would have, uh, secure communication with the HTTPS while fetching the REST APIs. We would have, uh, we would give limited permission for, uh, the particular that particular package if it asks for so many permissions, then, uh, then for example, we would also add exception handling. So let us assume you while using some package, it breaks or some or the package is upgraded and some features are not working. So we would also add exception handling for that. And, uh, the next step would be, I would say the other step would be, uh, in our case, we were using GraphQL. So we had some specific API keys, which we were using in a separate folder. It was in our, uh, own, uh, separate folder, uh, under the environment variables, which were not being, uh, which the user would not be able to read. So using that as an API we'll separate the, uh, important, uh, elements or access keys and tokens under the environment variables. Then we would use the regular updates. So what do I mean by that is we would regularly update our application. If the package was being updated, then we would, uh, update our code as well. So we were, uh, secure from any kind of, uh, vulnerabilities if the user were using your application. Now comes, uh, the secure storage. In my experience, I have used Flutter secure storage. It's a package. It's a third party, uh, package which would which would, uh, ensure that the sensitive data is stored on the device is encrypted. So it would help us as coders to secure it from the customer or any kind of threats. Thank you.

How do we approach and solve a flutter layout challenge where you adapt multiple screen sizes? Okay. So, uh, in my experience, we have used Flutter layout challenge for multiple screen size and orientation. Okay. So first of all, I would talk about the responsive design. Now Flutter has this, uh, thing, uh, called as responsive design under which it provides, uh, certain widgets or features. First, uh, the number 1 would be media query. Media query allows the allows us and the visits so that on the, uh, so that if the screen size changes, the visit would automatically adapt as per the screen sizes. Then the second 1 would be, uh, if in case so for example, let's say we used media query. Now what happens is sometimes there is a text there is a particular text which, uh, if the screen shrinks and the text starts to overflow. Now to counter that or to solve that problem, we used flexible and expanded features. These both are, uh, these both widgets are responsible to control the overflows, and they are usually wrapped under row and the column, uh, visits. And apart from that, I have specifically in my, uh, projects previously in my past projects, have used, uh, Flutter screen utile, which gave us parameters like, uh, height and width and radius and so many other, uh, parameters. So So what it did was, uh, it helped in the widgets to adapt with the screen sizes along with the font sizes. So what we did was so this is the package that we actually used more than media query or any other widget. This was really helpful because in, uh, because our product was released both on iOS, Android, as well as desktop. So we would we required multiple, uh, tests. And, also, I would mention for the tests, we had, uh, uh, so before releasing the application, we would always test our new feature and the whole application manually by using it on multiple devices. Although we did not have physical multiple devices, what we did was there is a package called, uh, device preview. It's a Flutter package that enables us to run our application. We can select the application, and using that, we can run the code and see what output it is giving. It it works kind of as an emulator. So that helped us a lot in understanding how the output will be shown to the user. And I think DC are the, uh, main important layout challenges that I have faced and resolved by using these 3. So first 1 would be the, uh, Flutter screen utile, the number 1. And the other 1 would be the, uh, responsive design under which Flutter has its own widgets like media query. And then there is a device, uh, and then there is a device preview package that we used. So all in all, that was thank you.

How do you refactor a Flutter application to improve performance and rentability using the FlutterBlox package? Okay. So if we are refactoring our application, uh, with block, so we are assuming that the application, uh, the code base that we have right now, uh, is not, uh, using block at all. So what block first of all, what block does is it separates the UI components and the business logic. That is the main task of Flutter block. Now to use that to refactor our application, what we would do is we would first, uh, separate our concerns. So for that, we what we do is, uh, we discuss with the team. For example, in my team, I used to discuss it with my team upon what requirements do we have, uh, what will be the events, and what would be the states? Now first, after separating all of it, we would start create we would first import, uh, the Flutter block into our, uh, project. Then what we did was we defined the events and the respective states which were required for, uh, that particular feature or the whole project. We then created the block classes which actually hold it all the business logic. So on the on some particular event, the block would the block logic would be applied, and then it will show the resulting state on the, uh, output. Now, uh, we would optimize the performance. So after implementing the whole block, we would then in integrate it with the with our UI as well with data. So, uh, that is how we integrate how would how we would integrate the Flutter, uh, block package in our existing project and refactoring. Now there are some features that block provides, which are, uh, block builder and block provider. Block provider basically provides the that particular block to its descendants, and the block builder is usually, uh, responsible for rebuilding the UI on a particular state change. Now, uh, in order to improve further performance, what we could also do is we could make some services. We could add some services. For example, in my company, in my project, we used the, uh, network service, which would constantly listen to, uh, the device which, uh, on which, uh, the application was being used. It would, uh, listen to what is the Internet's Internet status right now. If somehow the Internet connection was lost, we would, uh, show a snack bar showing that the Internet is, uh, access, like, the Internet is not working. And if it comes back, then we would use the service to again show a green snack box telling the that the, uh, Internet is back. We can also use GraphQL instead of rest APIs, which I have used in my previous company because GraphQL has particular, uh, fields that we can use. Instead of for 1 feature, we we have to make, uh, if you make a REST API call, everything will be called, and it might be a heavy call. But in GraphQL, we can particularly and specifically pick on what do we need to, uh, add, what fields in the API do we need. Apart from that, I would mention caching. Caching is also very important for, uh, uh, improving the performance for which we actually used Hype, uh, which was very helpful for us. Once the application was, uh, loaded and the user logs in, we would use it to maintain our cache. And even if the Internet was lost, we would show that, uh, local data to the user. Thank you.

Expect the following code for testing a flutter widget using flutter block package. What do you have strategy would you suggest to ensure that the load data event triggers in the correct state change? Inspect the following code for testing. Okay. So what I'm understanding is that we have a dummy code where load data is the event that we are using to further update our states. So, uh, testing for testing our flutter widget. Okay. So there are a few things that we can do here. Uh, what we can do here is we can number 1, would if if I was doing it in my previous job, uh, how I did it was we used, uh, the debugs, the debugs on the models through which the data was coming. Um, and using those debuggers, we would analyze if the correct data is coming on each and every step in the block. We would make sure that, uh, if if if the events that we have written are correct or not, if the states that we are throwing, are they correct or not, if the exception is being handled or not. So, uh, to make sure that load data event results in the correct state change, we would particularly look into all the states, the events, the block logic that we have used. Um, we would use breakpoints, uh, using the, uh, while developing the application in the dev environment. Uh, I would particularly like to mention the staging. So staging is basically, uh, the main, uh, of the production data. So what we did was after completing, uh, everything, after creating blocks as well, we used that staging, uh, data to manually and as well as manually check test, as well as we would do unit tests to check if the data was coming correctly or not, if the block was working correctly or not. So in this case, when we're using the load data, I would ensure it, uh, its success, and I would, uh, make sure that it is working properly by, uh, the aforementioned, including the debuggers that we use the most. Then we would use, uh, unit tests, um, and then finally, the staging tests in under which we did all the manual testings and everything. So that's it. Thank you.

How do you handle asynchronous data flow in a Flutter application with Flutter block? Okay. So, uh, uh, in Flutter block, what we used to do what what we did was mostly use the asynchronous data only. So I would go to the steps 1 by 1. Now first of all, we would, uh, import the Flutter block in our application. After that, what we would do is we would create the models. So, uh, under block, we would obviously first discuss with the team what what kind of model do we need, what kind of data are we expecting from the back end, and what is required, uh, in the application in that particular feature. Once we do this once we make the, uh, models, we would then define a method for, uh, API calls, which would, uh, either call the rest API or the graph. Then we would discuss and create states and events. We would define those for what events are we going to show what steps. For example, if the user presses on login after entering his or her details, we would then trigger that those states. And if the request is successful, it will successfully log in. If not, it would show an exception, and the user would have to re re log in again. That is 1 step. And then we would create the, block which would contain all the logic. And, uh, using that logic, it would show that particular state that is required for application to show. Now we would create the block class, uh, for the block implementation, uh, which takes both block event and the block state that we have created. And it would then use both of them to create, uh, the work on that particular logic and show the expected output. Once that was done, uh, we would, uh, connect our block to the UI. So the whole cycle would be completed from starting from importing block to, uh, making models to integrating the API with the application or with the fee, uh, with the API, uh, with the application. And after that was done, uh, we would do, uh, we would create events and states, and then we would, uh, make create the block. And, finally, we would integrate that block to the UI. So and to mention that data that we were getting would be asynchronous, and the method that I discussed about creating after creating the models would be an async, uh, function. So that async function would be responsible for getting all the asynchronous data. If there is some exception, we would handle it there only, and, uh, we would tackle it there. So that is how I would handle the asynchronous data flow in our Flutter application using the plan.

What are some of those approaches you use to minimize the app size and improve the launch time of your application? Okay. So, uh, it's an interesting question. So there are many approaches. Uh, 1 of them which I mentioned in 1 of the previous questions is, first of all, I would move from rest APIs to GraphQL because what GraphQL does is, uh, it reduces the request time. So when we are using REST APIs for a particular call, let's say, what happens is the rest API will get all the fields for, uh, that particular feature. But in case of GraphQL, if we want to remove, but some particular fields and if we want to add some, uh, particular fields, it gives us the flexibility to do that. So number 1, I would say I would switch from, uh, REST APIs to GraphQL. That is number 1. The other approach I would suggest would be using, uh, persistent storage, by which I mean Hive, which I have extensively used in that previous job. In Hive, what we do is we first initialize Hive. We then create the Hive models for which, uh, the the models for which the data we need to store, uh, in our local storage. We would then, uh, run the build runner script, which, uh, what it does is is, uh, it generates the files and the adapters, which are required for Hive. What Hive does is it, uh, registers the those adapters, and then it saves the models that we created in the boxes. So there is a concept of boxes in Hive. What it does is it saves for a particular model. What it does is it saves that particular model in 1 of its boxes. So how do we achieve it? We achieve it by open boxes or by opening the boxes. So once we open that box, uh, the data will start getting to load in that, and we would be able to use that for our local storage. And, finally, we can delete the data from disk, delete the boxes, and close the boxes from, uh, our application. That depends on user to user. For example, in our application, we wanted to remove the local data once the user logs out of the application. So, uh, that was all about the persistent storage. Number 1 was caching. Number 2 was persistent storage. And number 3, I would suggest, would be using services. And by that, I mean, custom services. We extensively used a lot of custom services in our projects. For example, I, myself, uh, implemented, uh, network cubit, which would, again, which would, uh, closely monitor if the state of the if the Internet state of the, uh, device, uh, is there or not. So let's say if the Internet was disconnected, we would directly show the snack bar that we lost the Internet connection. And using the Hive in from the previous step Using Hive from the previous step, and the caching would be achieved. So even if we lose the Internet, the high will directly show the data rather than making calls again and again and again. So caching is very important if you want to raise if you want to minimize the app size and improve the launch time. Uh, we would use the solid principles and object oriented principles a lot. We should avoid dry, which means do not repeat yourself. So we should a coder should always, uh, avoid using the boilerplate code. So these are all the approaches that we have used, and I would personally use to achieve this. Thank you.

Could you suggest a strategy to enhance Flutter app, CICD partner insurance team and Colette? Yes. So, uh, since I was the only senior Flutter developer in my previous company and I had a team under, so I had the full control of and, uh, of the CICD pipeline. So coming to how we implemented it, we used, uh, the 3rd party application called CodeMagic. Uh, I would my name. It's CodeMagic. What CodeMagic does is, uh, it basically, uh, makes it so easy for us developers to release the CICD pipeline as it automates the whole process. The user, the developer actually has to give the input only once about all the required fields that it would ask. So then we would give give it all the inputs once, and we would give it 2 environments. 1 is for staging, and 1 is for production. Now for CICD pipeline, what we did was, uh, we first created a staging environment. A staging environment is nothing but, uh, the API that we use for production. The staging did the same except it had the dummy data. We would first, uh, release our application on, uh, on staging through, uh, CodeMagic CICD pipeline. Once the application was, uh, released, we would then, uh, do the manual testing of the application before actually making it to prod. So which includes manual testing by the whole team as well as unit testing for a particular feature that we have created and released. So integration when it comes to integration and widget testing, we actually haven't, used it extensively in our, uh, projects. We were mostly dependent on unit testing as well as, uh, the manual testing. So I after achieving all of that, uh, again, uh, code reviews as well, I was responsible for reviewing the code of my juniors, and then we would go ahead with the, uh, staging release of the CICD pipeline. Once we were once we would ensure that the application is working, the caching wasn't is working properly, if no feature is breaking, uh, if the new feature is working properly, if the previous ones are not affected by it, we would then go for the production deployment. And there is an interesting thing, uh, that we have is, uh, that we had is, uh, I had this, uh, feature, uh, flag as a service in my application where if I had to discontinue a feature for a particular while let's say something breaks in the production. If I had if if something was breaking, what I did was I simply, uh, set I would simply set that, uh, feature flag as false. What it would do is and it was a provider by the way, which was wrapped above all the blocks that we had created. So if I wanted to discontinue a particular feature, I would simply set that, uh, provided to false, and the whole feature would be disabled for that particular time. So, uh, it was important, uh, you for our CICD pipelines. For example, we created a, uh, we released our application in prod and something breaks. So we would, uh, set the flag to false, And then we would fix that bug and re release the other application re release our application so the user does not have to, uh, face, uh, the breaking of the application and for that feature. Thank you.