At Codewave, my role as a Flutter Developer centers on crafting seamless mobile and web applications, leveraging my expertise in Firebase and state management tools like Getx, Provider, and Bloc. My educational journey at the University of Kerala for a Master's in Computer Applications bolsters my technical foundation, enhancing my ability to deliver high-quality software solutions.
Our team prioritizes user experience, resulting in crystal-clear applications that resonate with users. With a background in Computer Software Engineering from the University of Calicut, I contribute to the development of diverse applications, from e-commerce to educational management, all while navigating the complexities of real-time data and communication systems like WebRTC and Socket IO.
Flutter Developer
CodewaveSenior Flutter Developer
Bellway InfotechFlutter Developer
Tektronix Technology Systems LLCAadhaar Supervisor cum Entroller
Akshaya ServicesApplication Developer - Flutter & Native Android
CTS MediaApple App Store
Firebase
Crashlytics
GitHub
Android Studio
VSCode
Yeah. I'm Mohammad Wasip, and, a Flutter developer currently, and I I've been working in this industry for more than 6 years. It's actually 6.5 years. In the beginning of my career, I started working in like, as a native Android developer, which was I was using Java for our development. And later, I switched to Flutter where I can, develop for all Android, iOS, web, and, And, I have graduated bachelor's of, computer
So we have multiple methods. I use Android, uh, Android Studio for developing the applications. We can use Versus Code also, any other ID also. So in Android Studio, we have the debugger options. Well, in the code itself, we can put, like, stops debug stops in any any anywhere, uh, in the code, and, uh, we can see the logs also while running the app. And there is also even the app is terminated. Can see the errors or the what were the message we have created in the. And, uh, we can use a debugger also same as I said. And there is 1 more method which I used in this beginning of my career. Like, I'll just print, uh, if I some if I fail, like if I need to see something in the clouds, uh, or I need to confirm whether, okay, we have reached in the line in of the of the project. So I'll just print or log whatever there is in the, like, in the code itself so I can see in the logs.
Okay. Dependency dependency injection, we have, uh, multiple methods. Uh, even the state managing is actually a dependency injection. And so, uh, instead of state management, I'll go with creating a a singleton classes, which will will create a a class, and we'll create an instance of the class. And we can, um, initialize a class, and we can have multiple methods. We can now save, uh, like, we can initialize variables also local globally in the class so which we can access it from anywhere. It's like, uh, suppose I'm creating a local storage class where, uh, local storage we'll create the internal method, and, uh, we'll call the local storage, uh, which the like, local storage, 2 brackets and open and close, and, uh, we can directly access the methods, the variables, and everything with inside the singleton class. Yeah.
Okay. Uh, I use we have 2 methods. I usually do it like, uh, uh, we have feature wise folder structure, and, uh, we have logical wise folder structure. It's like, uh, we'll create a data, uh, folder for keeping all the models, uh, and the response models and internal models and everything. And we I'll I'll keep logic, uh, file where I'll keep all the blocks and, uh, helper helper folder which will or or create all the resources and everything and utils to save all strings, colors, and everything. And the, uh, views folder where we'll create the widgets folder and screen folder inside. Widget folder will will contain all the custom widget, which we will use globally inside the entire screens, and screen folder will contains all the screen files or else will create a specific file for a screen folder for this screen, and we'll keep widgets which is used inside the, uh, specific screen also. And to improve a performance and maintainability using the flow of block package, uh, if I'm calling an API and I have to just update a specific part of the UI or the specific widget only, then I'll, uh, build a block builder. And, uh, we just need to update that specific UI instead of updating the entire of the screen, the UI, the scaffold. Just, uh, update that that specific part of the UI so it won't take that much memory.
How do you go about documenting API interactions within a Flutter code base for future reference? Okay. I usually create an API service clause where I'll same, like, I answered this question before. Okay. Uh, for future reference in the meetings. Okay. I'll I'll I'll create an API service clause where we'll have multiple methods for get ports, post, and port, patch, delete, and all these, uh, types of API calls, and, uh, we'll document everything. Like, I'll I'll put comments everywhere. Like, what is this? What's the use of that? And what else you have to pass in which format we have to pass? Like, mostly we'll pass body query, uh, and the params in query, like, the the map string map of string and string, and, uh, we'll pass endpoints in a string. And it will be like that that like that. I will, uh, introduction. Okay. And, uh, if there is any endpoint, like, we'll create endpoint file also where we'll save all the endpoints, base URL, and everything. So there'll there'll be I'll I'll keep group the endpoints by the, uh, type of feature. If it's a blog feature, I'll group the endpoints by blog by coming put it like, adding a comment about this blog endpoint specific blog endpoints. And if there is any users or endpoints, I'll put comments about the all the users and keep it as, uh, like, together like that.
How would you optimize a fraudulent network request when dealing with large payloads? Okay. Most of the random Flutter's, uh, HTTP or, like, the API rest API calls won't have much issue with the large payload. And if there is any, we can, uh, split it and send it later after that also, or else we can keep it in a specific I separate isolate. It's it's very easy, and, uh, we can yeah. That's the best way.
Okay. It's test widgets. Load that event updates. State. I'm not sure about this thing. I want to the test which, like, I I want to run the test, actually.
Okay. So if we have multiple UIs and, like, mobile, a tab, uh, fab, so I usually create different layouts for each. Like, we'll use reuse of components. We'll create the components different in in different, and we'll create the, uh, the main UI layout. Like, uh, if if it's below 360 or 400, it's the width pixel is below 360 or 400, it's mobile. And if it's between, uh, 700, 800, or, uh, if it's between 700 and and 400, it's a tab. And if it's above 700, I'll, like, assume it's a it has a web. So by doing that, we can easily put these, uh, widgets we have already components. We have already created in specific questions. It's it's too easy. And we have, uh, 1 more, uh, 1 thing to add in that, and we have, uh, we can wrap the if there is any something in instead of a row, we can wrap it or, uh, we can change. If if there is a grid view, we can, uh, change the, uh, cross axis count by the width. Like, it's is it a mobile? Is it a tab, or is it a web? By creating a responsive helper class, uh, which will, uh, whenever we call the responsive helper class, we just need to pass the context. It will tell us that is it a mobile or a tab or a web.
Okay. If something is not, uh, like, to minimize the app size and improve the launch time of a local application. Okay. Instead of using PNG and JPG file formats for image, we'll use, uh, SVG files, which will be very less into the like, in memory, and we'll use, uh, like, all the assets, like, even if it's a image, video, or a GIF file. So we'll we'll tell the design team to create it according to the mobile design, which it has to be in the mobile design. So we'll tell them to create according to the mobile design so it won't be much bigger. And another thing is, uh, instead of saving all the images in the, uh, app locally, we can those, uh, screens which user don't use that much will tell to, you know, send it through the URL of the file through the APIs, which we'll get from the back end, and, uh, we'll show it, though. And, uh, launch time of the app. For that, it's better to reduce, um, the functions which I have. We are calling at the beginning in the main file of the app. So it's reducing the functions we are we are calling by putting a weight on this thing. So reducing it will increase the performance of the app while it's loading. Yeah.
Open source Flutter project you admire. Not that much into our own account. I can't remember kind of, like, open source Flutter project. Okay. I have in the beginning of my career, I have gone through many Flutter projects in GitHub to learn all these things. I have, uh, I've then in the beginning, I started with git set state using instead of any state management, then I started with provider. And in next stage, I start you started using KedX, and I used it for almost 1 year. And, uh, then I started with block block. It's too good for the performance of the app. And I have learned many things, like folder structuring and creating specific services service class for, uh, like, a a request and if there is any, uh, something there some some some some variables or some data that we have to use across the application creating into the single instance classes, which we can access it from anywhere. And creating a creating model in a different directory is and, again, it divide the folder structure by response model and request models, which we'll send through the body and and and structuring the entire app through the clean architecture.
Yeah. I have used CICD, uh, using Fastlane to distribute the app through Firebase distribution, and, uh, could we suggest a strategy to enhance? Yep. Streamline code deployment. I'm not sure about streamline code deployment, but I'll tell you, uh, how I deployed through, like, through Fastlane. So I created the, uh, Fastlane folder and insert the app and the CICD folder file and files. And I kept all the rules how to create the bundle ID or the APK by giving the all the filter build APK split by API if I need to if I don't if we need to split the specific version. And And I was using flavors also, so I put the, uh, specific flavor name. And, uh, yeah. And, uh, Firebase was already connected. So we just need to put the project number and these things, and, uh, it was successfully working. And there is 1 more option, GitHub actions, which we can also use for CICD, which I used a couple of times also.