🔒📱 FULL Flutter Auth Course • Login / Logout / Register / Google Sign In

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
yo what up welcome back to another quick flutter tutorial I'm gonna start a new small series on authentication so signing users in with email Google and Apple sign in so for this video we're going to focus on coding the UI for the login screen and then let's use this in the following videos to implement the various authentication sign-in methods [Music] so I've opened up a brand new flanner project and just to keep everyone on the same page in my main function I am running my app which brings us to this login page and I've got that in a separate folder called pages to keep our code nice and clean so in this login page it will just be a blank scaffold so you should just have a white blank app like this now the first thing to do is to prepare any images we might need so for this login UI we basically only need two images which is the Apple logo and the Google logo so we're going to use this later on for the Authentication and these images you can honestly get them anywhere on the internet but I'll have this in my code below so you can access these assets as well so in your project go to the library and I'm just going to drag my images into this Library folder and make sure to come back to the code and we have to tell it that we're going to import some assets so just come to your pubspec.yaml and comment this out and Library slash images and make sure to save that file cool and in our login page scaffold let's start decorating this so for the background color I like to have a slightly light gray as opposed to just having a completely white background and in the body let's have a big column and let's just have a bit of a plan as to what we're going to fill out okay so let's just comment this at the very top I want a sort of logo and then let's have some text saying welcome back and then we want some text Fields so the username and the password text field a text saying forgot password we also need a sign in button and then we want to give the user an option to continue with another alternative sign-in method say Google or Apple sign in and at the very bottom if they're not a member let's give them an option to register now cool so this is the overall plan and let's just start filling this out so for this logo obviously that depends on your business and what your logo is for this I'm just going to put in any icon let's just put in a lock icon now you can see when you save it I don't know if you can see that in that corner but it's all scrunched in the corner right so let's just give it a big size and one useful widget in flutter is to wrap your column in a widget called save area and essentially what that does is it just makes the UI avoid the notch area so that's pretty high that's pretty handy and let's just Center this column and by the way in terms of like spacing the UI out uh it's a good idea to use sized boxes which is basically just empty space so I'm going to use a lot of size boxes to sort of space it out the way I want by the way flutter really likes you to put these const tags so let's just do that now this is going to be our first text widget let's just say kind of like a greeting message so welcome back you've been missed and let's just style this up so let's make it a bit gray and for the font size you can see the default there is 14. maybe I'll make it 16 just a little bigger and let's just do another sized box make it 25 this time and let's start to fill out the text field so on a very basic level right if I just say text field and you just save it then you should be able to click on this little Gap here and start typing in which is good but let's just make this look a little more modern make it a little bit more elegant so for the decoration there's actually a couple uh borders that we have to specify so one of them is the enabled border and so I'm going to make the Border White but then there's actually another border called the focused border okay so I'll show you what the point of each of these are I'm gonna make the focus border just gray as opposed to White if I just save this and rerun it you can see I've got a border now that's white and if I click on it then it'll become the focus border and we'll make that border gray so this is just a good way kind of like a good ux pattern to help the user know that they're in this text field right now now I think this text field could use a little padding to get off the sides there we go and personally I'm going to actually fill in the color and I'm going to make it gray with a shade of 200. so I kind of like this look where you've got almost white inside the fill color but then the Border itself is completely white so I think this looks pretty nice sweet now if we want to create another password text field looks like we're gonna have to just copy and paste this right now this is making our code very hairy and verbose so let's just put this in a separate file and for these I like to make the folder called components just to have the different UI components and so let's call it my text field and just paste what we created earlier here okay so we can come back and go to the login page and now we can just say my text field and so that cleans up the code so much right now if we need to make any specific adjustments we can just do it in the my text field dot dot file so this is a good kind of common practice that you should be doing to keep your code nice and clean what do I need next now if you think about what differs between the two text fields that we have we're going to need to um give it the controller and also the hint text as well as the Obscure text so I'll explain these three things I'm bringing in so starting with the controller controller is basically uh what we can use to access what the user typed in to the text field so if you look under the text field it always require requires us to fill out a controller and so if the user type something in there we can use the controller to access this information and for the hint text hint text is uh what it sounds like it's just a string just to kind of hint to the user what should be typed in this text field and the one last difference between the two text field is the Obscure text now obscure text is a Boolean meaning it's true or false and this is just to hide the characters when you're typing a password in right you don't want the password to just be displayed so just to show you what I'm talking about if you look at the login page my text field is now got a red squiggle because we have to fill out those three things that we just specified right so let's just come to the top and I'm just going to create the controllers for the text let's call it username controller and let's call it password controller okay so we can just give these controllers to each text field and the hint text so what do we want the user to type in here let's just say username and down here we want the password cool and obscure text remember this is a Boolean so for the username I want it to be false but for the password I want it to be true so if you actually start typing in the username we can just display the characters but in the password it'll be obscured so that's what that was talking about now the username and the password the hint text seems a little bit too dark for my liking I want to make it more more lighter so you can specify this hint Style and yeah I think a lighter gray makes it look better cool so let's add another smaller sized box and now let's just have a text widget saying forgot password now this I actually want it kind of on the right side as opposed to the middle but this column from the beginning we set it to be centered right so kind of a nice trick to do is to wrap your text widget in a row which if you save it it'll automatically come to the beginning then we can set the main access alignment to be at the end so this is a nice little trick I like to use and then just use some padding for the row cool so that's where I want it now let's just get another size box and for this one 25 and now we're going to use a sign in button so similar to how we created our own text field just to make our code nice and clean I'm going to do the same thing for the sign in button so let's go to our components folder and let's create a button called my button so for now just in the middle let's just create a text widget saying sign in and we can now come back to the login page and just say my button there it is and let's decorate the out of this okay for this I want to make it black which means my text should be white so that we can see it and let's just add some padding and you guys know I hate sharp Corners so let's go to the decoration and make the Border radius a little curved maybe eight that feels better and let's just finalize the sign in text I want to make it more bold more bigger and cool I think that's looking pretty good and by the way we want this button to actually be a button right instead of just a you know container so let's wrap it in a gesture detector so we're going to need to create this on tap method now if you hover over the on top you can see it requires this like function so I'm just going to copy this whatever it wants and require it when we need to create this button in our login page okay so come back to the login page my button now has a red squiggle because we have to fill out the on Tab okay so we haven't created this method obviously so I'm just going to call it sign user in and for now it's going to execute nothing but we'll set it up nicely so that in the following videos we can just fill out those methods when necessary so for this one as I said we're just doing the UI cool so let's add another size box and this is a pot that's kind of fun so I'm going to use a couple um dividers now if you don't know what a divider is it's essentially just a line so if I show you divide it and you save it it's kind of very faint so I don't know if you can see that right now so you can control this thickness so you can see that little line there right so this is kind of just helpful when you're creating uis so I'm actually going to create a row and have two dividers and in the middle I'm just going to have a text widget saying continue with sweet I think that's looking pretty good so far and finally we are going to have the buttons for the Google and the Apple sign-in we're going to need to put it in a row since we have two objects side by side and just to show you real quick like if I use an image asset and I give it the path of where my picture is right that's the path here if I save it there it is but it's huge so we can actually control the height of this image and so this is going to be a point in time where we go to our components and let's create one more thing and let's call it like a Square Tile and again if you think about what differs between the two tiles like having an apple button and a Google button is the image itself right so I need to know the string of the image path when I create the Square Tile so that then I can give it to this image.asset right so if I come back to my home page Square Tile and I have to give it my image path which is the library slash images Google PNG and for the Apple let's just change it to Apple cool and remember it was so big right so let's make the height smaller sweet and let's align this to be in the middle of the row okay let's just space this out accordingly sweet now coming back to the Square Tile let's finish decorating this up so I want to have a white border as you can see there and of course we're going to have to make the Border radius curved and similar to the text field I want the the field color to be Gray 200. so that it's got that white border around it and I think that's looking pretty good sweet and the very last thing is just to finish off with some tech switches at the bottom we want to say are you not a member then register now and just for the register now I just want to separate the text widget so that we can make it blue for the register now just to make it seem like a more clickable bit of text sweet now the UI is essentially done now the very last thing that I always do is to go to the column the overall column and make the main access alignment to be at the center and so for our particular design on this iPhone 14 nothing really changed that much but I like to make this aligned to the middle because it makes it easier when we are dealing with different screen sizes so yep that's just a handy trick I like to do but that's essentially it we have a nice modern looking UI yo what up welcome back to the flutter authentication tutorial in the last one we created the UI for this modern login screen so in this tutorial let's hook it up to Firebase and allow users to sign in with their email and password [Music] now the very first thing we need to do is to go to your Firebase console and make sure to sign in with your email so that we can now create a new project and for this one I'm just going to call that auth tutorial and let's hit continue and let's just disable this Google analytics just for Simplicity and let's create the project cool now once that's done we now need to add Firebase to our app and by the way I'm going to link this Firebase documentation below because this is essentially what I'm going to explain to you in this tutorial I'll link it below so you can take a closer look at it so it says here before you begin if you haven't already follow the steps in the get started guide so let's just open that in a new tab and even for this we have another prerequisite which is to connect your app to Firebase so we're going to need to install and initialize the Firebase SDK for flutter and then if you go to this one most of this you hopefully should have already done like you have an editor like vs code and you've installed flutter and just then you should have signed into Firebase using your Gmail and the most important thing to do here is the Firebase CLI so the command line tools if you haven't already installed the Firebase CLI and so just depending on your platform right so what machine are you using let's say I'm using a Mac and there's three different ways to install it which if you actually read this recommended for if you're a new developer just use this first method just to make it easy but if you do have familiarity with node.js then you can use this npm as well so just copy this and put it in your command line and make sure to install this Firebase CLI cool so once you've done that let's just close this and we've installed the Firebase CLI now let's just make sure everything's all good we have to log in using the Firebase login so let's copy this and let's go to our code now so this is the modern login UI that we created in the last video so I'll link that below as well so make sure to check that out first because we're going to build on from this UI and so in this project in your terminal let's put in Firebase login so we're going to make sure we're logged into our Gmail as it says like that and then what's the next step then we can copy this and looks like we have a slight warning and I think this is a Mac only warning so it says you can fix by adding this bit of code let's just put that in and then if everything has been done correctly we should be able to do this Florida fire configure and there we go so it's going to fetch the Firebase projects and you can see these are the projects that I have in that Gmail so you can see the auth tutorial is the one we just created which platform should your configuration support it says use arrow keys and space to select and if you hit enter I think it will just do all of them so I just hit enter so it'll set up the Android the iOS the web this you actually have to do it manually before but thanks to the flutterfire CLI we can do this All seamlessly and it's all automated cool so it wants to update the build.gradle so just say yes and we're good so let's go back to our Firebase project and remember we had to connect our app to Firebase right so if I just refresh this real quick you can see there's three apps so the iOS the Android and the web it just got added automatically so that's good so now the rest of the work is going to require us to do some actual code so let's just copy this and let's add the package Firebase core cool that's done and by the way what we just did is if you go to your Pub spec.yaml this is where we sort out the packages right so that terminal command automatically added the Firebase core it looks like it says here the Florida fire configure is step two which we have already done so yeah this is just going to do the same thing so we already did this and you can see step three says in your main.dot file we're going to import these packages at the top and so the Firebase options it should be a auto generated file which helps us just to deal with which platform we're on so if you go to your main function we're going to add this snippet of code so the flutter binding and also the Firebase initialize app and so for the options you can see here we can just select the current platform cool and if everything has been done good if we hit flutter run hopefully there's no issues if you do have issues then that means there's something wrong with the setting up okay sweet so now we can actually do some code so if you go to our login page remember these two text editing controllers we have the username and the password text field controllers and we also had this method which we didn't fill out which is the sign in method right so if you scroll down where's my button this one so if I tap on this then we're going to execute this sign in method which currently is blank and so this is what this tutorial is going to focus on filling out this method the first thing I'm going to do is I'm going to create a new page called auth page and so this is just going to be a stateless widget and we're going to use this to check if the user is signed in or not because if the user isn't signed in then we have to display the login page and if they are signed in then we're going to display a home page so we're going to use this auth page to decipher between the two okay so in the scaffold in the body we're going to use something called a stream Builder and we're going to check for some users and this stream that we're going to be listening to is the Firebase auth which whoops I just remembered I didn't I forgot to import the Firebase auth package so let's just do that flutter Pub add Firebase auth cool and again just to show you what we just did if you go to your PostNet yaml it should have added this package automatically of course and now that's done we should be able to import that Library and we can start dealing with Firebase auth so you can see this stream is going to constantly be listening to the auth state changes in other words if the user is logged in or not so then we can build something and with the help of this snapshot we can say is the user logged in is the user not logged in so if the snapshot has data then we have some user so let's return our home page else let's return the login page and this homepage we obviously haven't created so let's just do that real quick and let's just keep this simple in the middle let's just say logged in cool and if you come back to the main.dot file my main function executes my app which at the very beginning goes to the login page but let's change this to the auth page okay so we're going to fire up the auth page at the beginning and then it's going to check by listening to the stream if the user is logged in or not cool if you come back to our documentation we can close this now and come to the actual Main documentation we want to use for this video so we've got everything set up and if you just scroll down signing in a user with an email and password is what I'm going to show you today cool so if you come back to our Firebase console let's hit authentication and get started and if you go to the email method just make sure to enable this and save it cool and in the users let's create a user manually so I'm just going to call it test gmail.com and the password can be test123 cool so we have our first user okay so let's come back to the login page and let's finally fill out this sign user in method so we're going to await Firebase off and if you look in the method you should be able to see a sign in with email and password and this is going to require us to provide an email and password which we have these controllers from before and just to keep it nice and consistent instead of username let's rename this to email and give the controller and the password to these fields and let's see what happens so let's fill out the email which is test gmail.com and my password was test123 and if I sign in then sweet we're signed in so it works and so now when the user is logged in then they'll see this home page which let's add an app bar and actually have a button instead of the Visa can log out right so let's create this sign user out method and this one is also very easy you just need to say Firebase auth and sign out cool now since we made that off page they should sort out the logging in and logging out so let's give this a go of course if I hit the button we just log out and come back to the login page and so that's what this auth page dot dot is doing just to have some more information about the user let's create a user and just get the current user and let's say logged in as the user's email and let's just display the user's email like that and maybe let's make a bit bigger so you guys can see cool all right so the basic functionality is done now for the rest of the tutorial I'm going to sort of have some good practices uh when it comes to like ux the user experience so for example like if we're signing a user in it's going to take a little bit of time so let's show a loading Circle and to do that we're going to show a little dialogue and by the way to show a dialog it's actually going to be easier to use a stateful widget but I actually made this login page as a stateless widget and I was thinking surely there's a way we could just convert a stateless widget to a stateful widget easily and I looked it up and there actually is so you can hover over the stateless widget and you can hit these commands so I'm using vs code and on a Mac so it looks like it's command Dot and we can convert to stateful widget oh sick sweet so now that we can show a dialog we can have the context and we can show this loading Circle finally so in the center let's just return a circular progress indicator and let's see how this looks hey there it is but it's not going away so at the very bottom let's just pop the circle and let's try it again cool so you have the loading Circle and then once you've signed in let's pop the circle okay looking good now some other errors to take care of is what if the username is wrong like they enter a wrong email then looks like we're just stuck on this loading Circle right so with this sign in method I'm just going to copy this and we're going to try signing in and if there's an error let's catch the error and let's just see what the error is so if the error code is user not found then for now let's just print it to our console just to see what's going on and if it's the wrong password then let's also print that to our console Okay so I'm just going to show you in my terminal console right here let's put in a wrong email and you can see we can see what the error is no user found for that email and similarly if we have a wrong password so we've got the email correct but the wrong password then we can see that error so let's display this information to the user so that they know what the problem is okay and just to keep the code clean I'm just going to separate out these methods so if it's a wrong email let's just share a small alert dialog and same thing for the password and it looks like our learning circle is still persisting and that's because once we signed in we should pop it and get rid of it at the end and if we do have an error then let's pop the circle and then display the appropriate Arrow sweet so you can see that little alert dialog to display the error and the user can just click anywhere to exit out of it sweet so again just coming back with the documentation you can see this is the code that we actually implemented so this is how you sign a user in with an email address and password yo what up welcome back to the flutter authentication tutorial in the last one we coded this login screen and can now sign users in now the next step is to click on this register Now button and be able to create a new account for the user [Music] cool so just to keep everyone on the same page in the last video we created this login page and filled out this sign user in method so now we can input an email and just sign in now just before we sort out the register page let's just do a little cleanup on some code and what I mean is if you look at the software keyboard if I just toggle this then on your phone you'll have this bit of a overflow problem so to sort this out if you go to your scaffold just wrap your column with a widget called a single child scroll View and so that should just sort out that little error with the Overflow and the other thing I wanted to clean up is this wrong email message pop-up so if the user gets the email or the password wrong we created these two separate methods but I think we could probably combine this to be just one method so I just want to delete the second one and let's just say kind of more generically this is just a error message to the user so I'm just going to rename this method called show error message and let's require a string as the parameter okay so what did we just do well if we try to sign in and we get some exception then we could check what the error is first before displaying the image but just to make it simple I'm just going to say share error message and just put the error code in there cool so that just makes our code nice and simple and now it's time for the register page cool so I want to make that blue register now a text to be clickable so let's go down and find this text widget and let's wrap it with a gesture detector and so we're going to need to create this function at the top and require the constructors cool now if you come back to the auth page right now we're just checking if the user is logged in or not and if the user is logged in then we'll just return the home page but if the user is not logged in then right now we're just displaying the login page but for this I'm going to create one more page called login or register let's have a Boolean to show the login page at the very beginning and also let's create a method so that we can toggle between the login and the register page so to do that if this method gets triggered then let's just do a quick set State and make this show login page just the opposite of what it was cool so when we build this if the show login page is true then return the login page otherwise just show the register page cool and you can see there's a red squiggle under the login page because remember we have to specify this on tap method so if we tap then let's just do the toggle pages and the register page we are about to create now and for this this is going to be very similar to the login page so I'm just going to copy the entire login page Ctrl a or command a and let's just copy this into the register page and so I'm just going to change login page to say register page cool and for the most part it'll be the same but let's just change the sub and say sign user up as opposed to sign user in and the other big thing I want in here is I want one more text field for the confirm password and at the very bottom we should now say something like already have an account then log in now cool so if I come back to this login or register page we have an on tap to fill out and this should work so let's give this a go so right now I'm on the login page and if I hit the register at the bottom then we go to this new page cool now it looks like we're gonna have to sort out some of this UI because it's getting pushed to the bottom so just a quick fix is to just reduce the sizes of the stuff at the top cool and now we can just toggle between the two pages and I actually also realized for the register page we should change up this message say like let's create an account for you cool and one last thing is the sign in button we should say sign up but if you go to the button so remember how we created this button let's go into that component so right now it looks like we just say sign in as a fixed string so I'm just going to create another variable just called text when you create this button let's fill out the text so sign in for the first one and in the register I want to say sign up cool there we go sweet so in terms of the UI everything is looking pretty good now for the actual snippet of code to create the user if you go to your method we did a sign in with email and password so to start typing create user with email and password and this method will create a new user now I want to do just one quick check to see if the confirm password and the password is the same so the password controller should be the same as the confirm password controller which looks like I forgot to create so let's just create that real quick and we should give this controller to the text field at the bottom cool so if the password controller and the confirm password controller are not the same then let's show the error message cool and let's just scroll down and make sure that we give the right controller and let's just do a quick check now so I'm just going to say Mitch gmail.com and just give some password and sweet we're logged in with this new email now if I go to my console you should be able to see you should be able to see that the new user is created so that test gmail.com that one we just created manually right from this console and in this video we can now create a new user directly from our app now one last thing I just realized is on a register page you're not going to need this forgot password where are you Yep this guy we can just get rid of cool much better so that's essentially it for this video we can now create a new user and with that account we can now log in to our app so the next thing I want to work on in the next video is Google sign in so hopefully that goes well is where we can now log in and also register a new account now it's time for us to implement the Google sign in [Music] so just to keep everyone on the same page in the last couple of videos we made it so that we can now log in users and also register a new user so now we need to do the Google sign in now for this one we need to look at this package which I'll definitely link below so the Google sign in now just copy this and let's come back to our code go to your pop speak yamu and let's add this package in so save it and let's close the file once that's done now just going back to the Google sign in package there's a lot of instructions here for the integration between Android and iOS but some of this is a little bit outdated so I'll show you what you need to do now the very first thing we have to do is to register our Firebase app which we actually already have done in the last tutorial so if you go to your console we can now go to the authentication and if you go to the sign in method we enabled the email so now let's add a new provider and enable the Google and for the public facing project name you can just call it whatever you want I'll call it flutter Google off tutorial or just shoot and just select a project support email such as your own email and it says here to set up Google sign-in for Android apps you need to add this sha1 fingerprint so I'll show you how to do this a bit later on now just coming back to the Google sign in package if you read these instructions for the integration just starting with the iOS one like I said a lot of this like Steps two to six is already done for us we already did that and we just need to do this step seven so copy this and then you can see where we need a paste it in the iOS Runner and the info.plist file so let's go to iOS Runner info plist and just add it here and then if you look carefully you can see here it says copied from the Google service info.p list so we have to give it the correct ID so just go to this file that's just right above it and you can see so get this little number here after the Google user content dot apps and just replace that one cool so this is a very important step so save it and let's close this so coming back to our code let's go to the library and let's create a new folder called services and in this folder let's create a new file called auth service and let's put all the Google sign in in this file so in this class auth service the method let's call it sign in with Google and just to have a bit of an outline on what we're trying to implement here the first thing is to begin the interactive sign process so bringing up that page to click your email and then we have to obtain auth details from the request and then create a new credential for the user and finally we can use the credential to sign in so I'll explain what each of these steps are requiring so at the beginning the sign in process let's get the Google sign-in account and let's just call it g user and let's try to sign in so this should open up a page that allows you to select an email or you can import your own email and then let's try to authenticate Google sign-in authentication I'm just going to call this G auth and let's wait for if the authentication request has been has been all good and then once that's done let's create a credential so if you look in this credential we have to specify two things the access token and the ID token so let's give it that and then finally once we have the credential we just need to use the Firebase method to just sign in cool so in terms of the code that's actually really it for signing in with Google now if you come back to the login page we want this button of the Google to be clickable right now if you scroll down it's this Square Tile that we created earlier now we could just wrap this and adjust the detector right here but since we have the Google as well as the Apple to do let's go to our Square Tile component and let's add the gesture detector here so on the on Tab let's create an untap method and require the Constructor so what we just did is we should have some red squiggles because we have to specify the untap method so if I tap on this Google Square then let's go to our auth service class that we just created and the method is the sign in with Google so we're going to need to remove this cons tag now and same thing for the apple one this one we'll do in the next video so I'm just going to execute nothing and I want the user to be able to see these Google and Apple sign in on both the login page and the register page so let's just do it for the register page as well gotta run this on my ifriends simulator and we should get some error Yep this thing so it says the Coco pods it's out of date so to update it just run pod Repro update and then if you copy this and try to run it again we still have some issues and so I did a bit of Google search to to see how to sort this issue and I can link this stack Overflow post below if you like but I can show you what to do if you just scroll down just do exactly what I do so it says yeah go to the iOS folder in your project and we're going to delete this pod file.lock so in the iOS folder let's just delete this guy and then let's run this pod re repo remove trunk command and then from here this one becomes sort of machine dependent so for Intel chip users you can just do that but I'm actually using an M1 Mac so I'm going to follow these instructions here I'm going to copy this and then just put your password in and then we can run this Reaper update and as it says here we should do this in the iOS folder so let's change the directory to iOS and in this folder I just run that command and hopefully we see some some green sick so that's looking pretty good and the rest of this don't worry about now let's hit flutter run finally let's just make sure everything is working smoothly cool so I'm going to hit Google and sweet we get this little window and it opens it up and there's my email I'm just going to click it and we're signed in so that's how easy it is to implement Google sign in cool so it's working on iPhone so we just need to do one little thing for Android which is if you go to the project settings and you scroll down for the Android app you can see this sha certificate fingerprints so if you click on this question mark you can see this page and we just have to do a little something so for the debug certificate so I'm on Mac I'm gonna use this one so make sure if you're on Windows do the windows I just copy this and put it in your terminal and it wants a key Store password so if you go back the default password is just Android or lowercase so just type in Android and then you can see the certificate fingerprints so the sha1 and the sha256 so let's copy this and let's go back to the console and let's add the fingerprint do the same thing for the sha256 cool and that should be done so it should work on Android as well cool and that's essentially it so for the authentication we can now sign in using Google and in the next video let's try to focus on the Apple sign in and that should be all of the authentication for us to do so I'll make sure to link the code below so you guys can take a closer look at it play around with it and let me know if you have any issues I'll come around and try to help you out but other than that thanks for watching and I'll catch you guys in the next one peace [Music] thank you
Info
Channel: Mitch Koko
Views: 17,374
Rating: undefined out of 5
Keywords: flutter, mobile app development, mobile app, flutter ui, dart programming, ios, android, authentication
Id: 4fucdtPwTWI
Channel Id: undefined
Length: 48min 59sec (2939 seconds)
Published: Wed Sep 20 2023
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.