Transcript for:
Dart Programming Language Tutorial

Hey there, this Mahmoud Asan and welcome to my  Dart programming language tutorial. Dart is the   main programming language to develop cross  platform mobile application using flutter   framework. In this video tutorial, I will  discuss the fundamental features of Dart   programming language. If you know any other  programming language, then you will find that   is really easy to understand. So no more talking,  let's begin. to minister Dart SDK in your system,   please visit HTTPS and dot dot Dave. And here it  will see that there is a get dirt link, just click   that on that paynow. And here you will see there  is three version Windows, Linux and Mac. So if you   are using Windows, just follow the instructions  to install that SDK in your system. As I use Mac,   so I follow this MAC instruction, and I  already installed Dart in my system. Currently,   there is version 2.3, which I'm also using  for this lesson as well. To write Dart code,   you can use any editor but I personally prefer  Visual Studio code editor. So if you want to use   Visual Studio code editor you can install  from this web base. And there is also Mac,   Windows and Linux version. As I'm using Mac. So  I installed the Mac version. Also, if you do not   want to install the Dart SDK or the Visual Studio  code editor in your system, you just want to check   out Dart by just typing the code in a web editor,  you can just use that Dart bet. So the address is   Dart pad dot dartlang dot o RG. Here, you  will see this interface. And for example,   here is a main function. And suppose here, I write  print HelloWorld. One and I just click Run, and   you do it show, compile the program and show the  output in the right side window. So if you want,   you can also use this dot pet but I personally  prefer to use Visual Studio code editor and run   Dart code in the system. So currently, I opened  my Visual Studio code editor and here you will see   the Visual Studio code editor. And to highlight  the syntax, you should install a dart extension to   install that extension in the Visual Studio code  editor, you have to click View then here you will   see extension, just click on it. And here. If you  search Dart, you will see dot 3.1 point zero there   is an extension which I already installed. So if  you are using Visual Studio code editor, you just   find out this Dart extension and click Install and  it will be installed in your Visual Studio code   editor. And then if you click View Explorer, then  you will see this interface as well. So currently,   I created this playground dot d, a RT. So  Dart code extension is de RT. So I created   this playground dot Dart file in my dekstop  demo directory, where I will write some code   and execute in the terminal. So if you do not see  any terminal window in Visual Studio code editor,   just click terminal, and then click new terminal.  So here, we will get the current directory   location automatically. So if I want to run this  playground dot Dart, so what I have to type da,   RT Dart and then the file name, so playground  dot Dart In my case, and if I click Run, I can   see the output of the program here. So I don't  need to open this terminal window. Separately,   I just you get I just can use this built in  Terminal feature in Visual Studio code editor.   Dark Dart is a static type programming language,  it is also a compiled programming language. So it   static type means if you define a variable as  a string, you cannot assign other values like   integer or double on that distinct type variable.  Though there is an exception like there is a type   called dynamic which you can use to store any  kind of values. I will discuss that on later.   Another thing is that that supports two type of  compilation, one is called A or D or a ahead of   time and other is called j it or just in  time compilation. So when we want to run a   dart program, we have to compile it and then run  but it happens automatically. So when we write a   dart program and we just run it automatically  complex on the fly and this is called just   in time compilation and when we deploy our  final product, then it will be compiled as   a ot or a doc term time compilation with some  optimization. Let's write a dart program. So   every Dart program is starts with a with the  main function. So let's write a main function   void main. So your main is a function. And what  means this function returns nothing. If you want,   we can avoid this void. So it is optional. So that  means if there is no return type that is called   this function does not return anything. So let's  define a variable. So I type for first name, and   here I assign My name Muhammad. And then suppose  I want to define another variable last name. So in   this case, I will type string last name. Awesome.  And now I want to print this so first name, then   last name. So if I are here, I have to put a plus  sign for a string concatenation. And if I want to   run this program, I have to type dot playground or  TRT Harry here you will see the output Muhammad is   paste our son. So what does it happen in here.  So the first line number two, here I define a   variable using the var keyword. So var means a  variable, and the variable name is first name,   where I have assigned Muhammad as the fellow.  So when you define a variable like this way,   Dart compiler automatically guessed that this  is a string type very veloz, because and this   is called type in for inference. And in the second  type, second line, the third line, we define the   variable as a string type and which we mentioned  it in the before. So if you defined variable   like this word that is string last, and you  cannot assign other fields, like if I type two,   it will show an error. But in the fastest if I  type two here, it will not show an error in here,   because in that case, it will understand that  this is a integer value. So you have to remember   this thing in Dart programming language that it  supports both type inference and is statically   typed defined. So when we type Dart playground  or DRT theory, just in time compilation happens.   So this code will compile on the fly, and then  it will run and we can see the output in that   time, you know, if there will be an arrow, we can  see that arrow also in here. Another thing is that   all the built in Dart libraries, like a built in  types collection and other core functionality for   every Dart program basically, is defined in a  package that is called Dart door, colon core   package. So if you want to input you have to  type this import, then single core Dart colon,   then core packages. But the thing is that if I  run this program, again, nothing will be changed,   it will run as usual. But the thing is that this  Dart coloane core pack is automatically imported.   So for this case are normal cases, we do not need  to import this Dart coloane core package, it will   be imported in every Dart program automatically.  So let's write another program in this program,   we want to take input from user so for this input  output operation, we have to import a library   that is called IO libraries. So I have to import  then Dart colon IO. And now let's write a main   function. And here I want to fast show user that  you have to type your name. So I have to write   a code like a standard out dot write line. And  here I will write what is your name and then a   question mark, and then I will take the input from  user so for this reason, I will type a string name   and then a standard in dot rate line sync. And  then I will print that name so my name is dollar   name. So let's run this program first. So, you  see in the screen vision, what is your name if   I type ma mod Asa you will be seeing that it is  showing my name is Mahmoud arson. So basically   this is standard out and a standard in this  library is defined in this dark colon IO packet.   So the first line we are showing you that that by  writing standard out dot write line that means if   this line is shown in the terminal, then in this  line is standard in that red line saying this   when other program found this line, it will wait  for the user to given input, so, when we get the   input from user, we assign that variable which  is a string in this name variable and finally,   we just using the built in print method or paint  function to output the name in that terminal. And   here it will seen within the A string we are using  $1 sign and the variable name. So, this is called   a string interpolation. So, within the string, we  change a variable with the relative Hello, we can   write common in three separate or in dark tip in  a dark program. So, if you want to write a comment   in line then you have to use to forward slash  that is called inline comment. If you want to   write block comment, then you have to use forward  slash star and you have to in the comment using   another a star and forward slash. so here we can  write multiple line of comment. Another comment is   three forward slash that is called documentation.  So that will be used as a document of for your   program. There are two type programming languages  one is called a strongly typed and other is   called dynamic type. So in a strongly typed  programming language like c++ or Java or Swift,   that type of a variable is known at compile  time. And another type programming language   that is called dynamic type like Python, Ruby  or Java escape in these programming languages,   that type of a variable is known at runtime. So  in Dart programming language, there are five basic   type like int, double A string, bool, and dynamic.  These four types are fundamental type and dynamic   is a dynamic type, that means we can change the  valeu at runtime with different time fellows.   So in this example, let's define a variable. So  int for integer amount one is the variable name   where we have sn 100. Then in the second line, we  have defined var amount to 200. So in this case,   the by using the var keyword we define a  variable amount to so as it is 200, that is an   integer value. So the Dart compiler automatically  knows, knows that that this is a integer value,   an integer variable. So Dart compiler make  this amount to an integer. So next time, if we,   as an other video, like double or easting, in this  amount, it will show an error. And in the third   line, we have just been this amount one and among  two, then we define another variable using double   and put a double Hello. And then in the second  cases, we have defined the double variable but   using the var keyword, so the variable value  type will be determined at the compile time,   then you also print that value as well. Then  we define another variable name one, which is   a string type we define in by mentioning a string.  And in that second cases we using we define name   two as a string variable using var keyword, but  here the type inference occurred. Here we define   Is it true one using the bulkier dotnet. This is a  Boolean type variable where we have assigned true,   this is a boolean value and then using the var  keyword, we define another variable is it true   to where we define false value, which is also  a Boolean fellow. So both of these variable are   Boolean type. And finally, we define a variable  width variable. And where we have used the key we   use the keyword dynamic. So this week variable  is a dynamic type variable. So the valeu value   type can be defined at the runtime. So at the  first time, we have sn 100. And the second type,   we have assigned Dart programming, which is a  string and the first time it was a integer. So   let's run this program we see that this program is  run perfectly well. So, here we see that amount,   one 100 amount to 200 this line, this pin line  is printed in here, then we printed the floating   point veloz using this line print. So we are  seeing that this veloz is also printed correctly.   Here we are using this My name is this thing is  also printed in here and we can say this true and   false. This two variable the Boolean type variable  values are also painted in here perfectly well.   And finally this dynamic type week variable which  we have sn 100 it is printed in here. And the next   time we change the value of this week variable as  a string type ways we have seen that this is also   printing correctly that means this week variable  which is dynamic type, we can assign any type of   Hello at any time. So this is the fundamental art  imagery type in Dart programming language and one   thing you have to remember that Dart is an object  oriented programming language and everything is   object in here, even the novel type. So now type  means if we assign here week variable and just   put Now that means there is nothing, and if I  just type brain to week variable in this case,   and let's try to run this program. And you  see it is showing now so even this narrative   is also an object. So everything is object  in Dart programming language, this integer   Veilleux this variable, everything is objective  in this function is also an object, which is a   subtype of the function class. We can define a  string variable using single quotes or double   quotes. So if we start defining a string using  single core, you have to in that listing using   single code as well, the same rule is applied for  double quotes as well. So here is one is define a   string variable using single quote and x two is  defined using double quotes. In the s3 variable,   we using a single quote and we also want that  there is an apostrophe within the each keyword.   So in this case, we have to use a backward slash  to separate this single core within the A string.   But if we are just using this double core to  define a string, we can just replace this special   character by just single code. And finally, if you  want to define a Royston, roistering mean if there   is a special character that is newline character  suppose, it will not be evaluated. So, to define   a raw string, you have to just put a R in front  of the string. So, let's run this program. You   see that single core This is things printed double  quote listing is also printed. And here as you see   that this apostrophe is showing here nicely also  for the h4 variable as well and in the final case,   the roys thing, you see this newline character is  not evaluated because it is defined as roistering   by using the R in front of the A string is the  interpolation means to replace a variables value   actual value within a string. So here we have  defined a variable age where we have assigned   35 an integer Hello, and in the second a string  variable we replace this age of variables valeu   within the string by using this dollar sign so  that means when you want to interpolate in a   string, just use the dollar sign in front of the  variable name within a string. So if we run this   program, we see the output is showing correctly  that my age is 35. We can define multi line string   in Dart programming language using either three  single quotes and ending with three single quotes   or is starting with three double quarter India  with three double quotes if I run this program,   you'll see it issuing the multi line string in  the terminal type conversion isn't very important   topic in any programming language, sometimes  we we need to convert a string to an integer   and sometimes we need to convert an integer to a  string to convert an A string to an integer value   you can use the parse method of int object so here  we are passing and is string one and this method   part will convert this string one to an integer  one and sn that value in this one variable. In   the next line, we are using the built in air  sac function to verify there. So here we are   verifying that if one equal to in desert one,  if it is not true, then it will show an error   in the terminal. Similarly, we want to convert  an instinct to data Well, we can use the parse   method defined in that devil object. So let's run  this program you will see there is no problem no   error issuing that mean this parsing occurred  correctly, but if we want to change the easting   like this is string that is known known in desert  Villa within this scheme then what happened let's   write this program, you see it is showing an arrow  that this person has tried to convert this easting   to and read extent number, but it is it found  that they are these str characters. So that   means it cannot convert this str to N in teaser  Veilleux there. So it will be thrown an E roll   and this exception is called format exception. So  you have to make sure that if you want to convert   an integer or double valeu is string Veilleux  to an integer or double primitive value then   you have that st with that integer or double Hello  Similarly, if we want to convert from integer to   a string we can use that here 1.2 string method.  So, that means, as I said before that everything   in Dart programming language is an object. So that  means here the numeral will one is also an object.   So, we can use this two string method of that  object. So, here we are typing 1.2 string, and we   are converting this integer value to an A string  value and sn this in one as a string variable. And   in later we also using this pie veloz that is a  double Veilleux to add a string, so here we have   to use to string as fixed to so here basically we  want to convert this for floating point number to   two fixed point floating point numbers. So let's  run this program. And you see there is no error.   So that means this one integer is converted  to a string, which we are verifying in here,   by putting single court outside of one that means  it's an E string, and it inserted correctly.   Similarly, here, we converted this double of  Halo two to fix point double his string. So,   and we are verifying here that if this is as a  string with two fixed point on fixed point number,   and we found that yes, it is also inserted  correctly in here. So that means 3.1 point four   now is in a string value. So this is how we can  convert any type to any type in Dart programming   language. When we define a variable, we can  define that variable as a constant type that   means during the runtime, we cannot change the  value of that variable. So to define a variable   as constant in Dart programming language, we have  to use the keyword cost. So here we have defined   a variable a const, num and this is an integer  constant, because there I have put is zero which   an integer so by type in foreign the compiler will  make this variable as integer constant. Similarly,   a const bool is a Boolean constant, and a  consisting is an int is a string constant,   then we are printing these three variables here  and also the next three line we are checking the   runtime type, that means what type the compile  created during the runtime. So let's run this   program, you see where we are seeing zero through  a course a string, and that type is int bool,   and a string. So, this is how we can define  constant type in our programming language. Suppose   we define a variable like int, and now and did not  assign any value within this variable, if we just   use the print function, and try to print the value  of this noun variable. Let's run this program and   see what is shown in that terminology showing  there there is now that means there is no value   assigned in this variable. So you have to keep  in mind that if you define a variable or object,   but did not assign any very values on it, that  means that they're empty. So, it is it contains   the null object, we can also externally use  null in this case, so if I run this program,   again, you will see there is no chance. So that  means if we did not explicitly assign now value   within a variable, it automatically assigned if  there is no real value assigned to this variable.   If you know other programming languages like  JavaScript, c++, swift or Python, all the standard   operators will work in Dart programming language.  So for example, if you want to add to veloz,   you can just use the plus sign for negative minus  you can use minus sign for if you want to see that   if there is any remainder or not you can use the  modulus operator that is also called percentage   operator in some programming language. And if you  want to take relational data like if two values   are equal or not, for example, here using this if  logic we are checking that if num equal to zero or   not, then print zero a for not equal to you can  use not equal to this operator and for greater   than or equal to you can use this greater than an  equal sign and less than an equal sign for less   than or equal to operator. If you want to use any  short term shortcut valeu like for example if for   here, we are using num multiplication equal to  two it means that I want to assign num equal to   num multiply by two. For example, here we are  using the shortcut Veilleux. So, we put this   multiplication vilo in here in front of the equal  sign and and then we are passing to that mean this   is inom equal to num multiply by two similar t  thing you can use using the plus or minus like   that. And a dart programming language also support  unary operator that means you can if you use c++   Java or JavaScript you can use this unary operator  like plus plus num This means that increment now,   hello one by one, you can This is called post  increment pre increment and this is called post   increment, post increment both are unary operator  and you can also use another shortcut virulite   plus equal one similar similar to this unary  operator. And for logical operator you can use   this double ampersand sign so that means this  logical and and for logical or you can use this   double bar sign. So in Python we use this we  use only and and or the physical the English   keyword like and, and and or in Python but in  in Java escape in Dart we can use this logical   and and logical OR operator to make to condition  based in within an if statement. So here we are   writing a code like if num greater than 200 and  num less than 200 t then print 200 to 202. So   the here we can use the logical AND operator n in  this case, both of this part and this part should   be true to make this thing happen. For not equal  to operator, we can just use this sign and then   equal sign. So if I run this program, you will  see everything is showing correctly when the   terminal now our operator is one of the important  operator in Dart programming language. Basically,   this kind of operator is existed in many modern  programming languages like swift kotlin. And in   Dart, there are three variation of this operator.  So let's discuss. So suppose we want to define a   class. So in this class, now, there is a property  we declared that is another num and where we have   assigned 10. And let's define the main function.  So here, I want to create an object of this   class num. So bar n equal to num. So to create  object of a class in Dart programming language,   you just have to use the class name and the  parentheses, then the object will be automatically   created. So an instance of this num class is  created an SN in this variable that is n. So n   is an object of num class. Let's define another  variable. So what we actually want, we want to   assign this value in this number variable. Suppose  this kind of Veilleux comes from another area,   suppose we are using an API from this API, we get  this kind of a JSON object and the JSON object,   maybe there exists a variable and we want to  get that number, so we have to make sure that   this in object is not null. So how we do that,  normally what we write if and not equal to null,   then number equal to n dot num and just print the  number. So normally, it's a common programming   practice that we check that if the object is not  now then exhale the object properties like it   here. So, if I run this program, Dart playground  you see it is working perfectly. Suppose this in   object is not we remove this num, last name and if  I run this program, again, you see it is showing   this number has a null object. So there is nothing  basically, when this inner object is now this   thing will not exist, but if I just remove this if  worked, and if I run this program again, you see,   now there is an error thrown that is no such  method error. So basically, we are excesses in   dot num, but n is now that's why it will throw an  error and the program will terminate in here. So   there is a shortcut in Dart programming language  language using that we can ever this if statement,   so what we have to write we just To write, instead  of n dot num, we have to write in a question mark,   then dot then num. So if I run this program again,  you'll see in this case it is showing nothing   because there is no no object in object is now  that's why this thing is not one and number equals   now that is shown in here. And if there is an  object, suppose we put in the, we create an object   in here, the instance of num plus and if I run  this program, again, you see now it is showing 10.   So the number is 10. So basically, this knowledge  our operator means that if there is an object, so   if n is an object, and if the object property now  is accessible, then just do it. So that means if n   is an object, and if n is an invalid object, then  x is the property named now and assign the value   from num to here. But if n is not an object, if n  is a null object, then just escaped this. There is   another variation of this Nol our operator. So in  case if this is not a valid object, there, there   is nothing happened in here, right, the number  will remain null, as it is defined, but what we   want if the an object is now we want to default  Hello, happy to be SME number. So how we can do   that there are shortcut way to do that is you use  a double question mark and assign a default value   for example, we want to default value zero. So  let's save this program and run again. So now,   you'll see that when we run this program, that  number is printing as zero that means when this   part is now then this part will be executed. But  if we just again, put this number here, and if I   run this program again, then you see that 10 is  printed, so that means na n is a valid object   that has a property of now. So that value is sn  in here, but in case n is a is not a valid object,   then in that case, the default video zero will  be so in number. That third variation of this   nonlinear operator is like this. Suppose we define  a variable number now it is not if I just print   this number, and save this program and run. You  see it issuing now. But what do we want that we   want to make a condition like if the variable  or object is null, we want to assign a default   value. So what we can do that we just use double  question mark, then a equals sign all together and   put a default Hello if I run this program again,  you'll see now issuing 100, if I run this program,   after the first point is statement, you'll see  the number 100 is showing in the second case   as well. So here it is happening is that the when  the number is not a very top date, that means the   number is now then this 100 will be assigned in  this variable and that is permanent, okay. So, you   have to keep in keep mine in this tree variation  of the knowledge or operator because if you do not   check now, sometimes your program may care. So, if  you know this another operator and you can, if you   can use it wisely, then it can save in many cases  in your program. There is another operator called   ternary operator in Java escape c c++, Java. So  that operate is also existed in Dart programming   language. So for example, here we define a program  int x equals 100 and var result equals x remainder   two equal to zero. So, that means if we want to  define this 100 I mean the value of x by two. So,   if there is a reminder and if the remainder is  zero, then pin this event, but if the remainder   is not zero, then paint or so, in the next time  we are printing the result. So, if I run this   program, you see in this case, it is printing even  because x equals 100, which is divided which is   reminded by two and there is no remainder. So  that means this condition met and fast part of   the of this ternary operator is executed but if  I just make it suppose 101 and run this program   again. You see now this condition is not met.  That's Why this odd is printed. There is a type   test operator in Dart programming languages. For  example, let's define a variable integer x equals   100. Or maybe var x equals 100. So we want to  know that if What if x is an integer type, then   just print something. So how we can write that  program. So we have to type if, then x is int,   then print integer. So let's save this program  and run. You'll see, as this condition is true,   that means we want to check that whether the  variable of x is integer type. That's why we   have written that if x is in that means if x is an  integer, then pain InDesign and it is true. But if   we change the value to suppose a double value, and  if I run this program again, then this condition   is not true. That's why we did not see any integer  is printed in that terminal. Sometimes we want   to write a program with some condition that means  if a certain condition is true, then do something   and if certain condition is false, then don't do  something. So in our Dart programming language,   we can write conditional code using if else if and  else operators. So that means, here let's define a   program first we define a variable integer number  equals 100. So then, we are using the remainder   operator we are checking that if this condition is  true, that means if this number is divided by two   with no dividend that means equal to zero, then  print even if not, then if it is divided by three,   then print OT and E. In other cases, that means if  this false condition is not true, second condition   is not true, there are default cases then paled  confused, so let's run this program first. So,   here it is showing even then I am I put here 90  and it is showing even again, so if I put here   91 it is showing one fused. So, in this scenario,  the first condition when made then the second and   third condition that means elsif and his block  will not be executed. But if this block is not   true, then the then the program will check this  block if it is not true, then it will check the   default block. So this is how we can write a feels  if and else condition in Dart program. There is   another way we can write if is a statement in  Dart programming language. And in this case,   we have to use this switch statement. So basically  switch wars similar like if this condition. So   here we are defining a variable number where  we have sn vadose zero, and then in the switch   statement within the parenthesis, we are checking  this number variable. And within the curly braces,   this is the body of this switch statement, we are  checking that if the value of this variable is   zero, then pain this and break, then break from  this switch statement. In case this condition   is not true, then check this condition if case  equals one, then do this thing and break from this   which is admin. If no none of the case is true,  then just a do that default condition. So here,   let's run this program. It is showing even because  this condition met so if I put here one and save   this program and run, you see now it is showing  or because this condition is not met, that's why   this condition met. That's why it is showing here.  But in case if I put different Pedro and run this   program, it is showing confused because zero and  one is not met, this condition is not met. That's   why the default condition is executed. looping  means we want to execute a task for a finit number   of time repeatedly. So there are basically five  kinds of loop in Dart programming language. So   the first loop is the standard for loop is 10 dot  for loop. It's similar like in JavaScript. So for   example, we want to print one to 10. So how we can  do that, let's write F is standard for loop. So   you have to pass die for then within parenthesis.  let's declare a variable var i equals one,   then semi colon. This is the first part that are  initialized part. Then we write the condition I   there's n equals two Yeah, so, as long as i less  than or equals to 10 then run this loop and then   the increment or decrement part. So, here I have  written pre increment plus plus i. So, these are   the increment or decrement parts. So, that means,  the when the this program is run this part will be   executed first then it will check the condition in  here and after and then the body will be executed   then the program goes to here and increment the  value of i and then check the condition again   if the condition is true then it will break from  the loop otherwise it will continue the loop. So,   if I just put print I and run this program you see  it between one to 10 So, this is the standard for   loop there is another for loop that is called for  in loop Suppose, we have an error so far numbers   we define a variable number and using the square  bracket and it is a shortcut that means it's an   error we define some variables within this array  123 and we want to print all of this veloz So,   using foreign loop we can do it easily. So, here  we are writing for the N var in in numbers and   within the body print and so, here it is  meaning that for a bar in in number, so,   the value of n will be first time one second  time two and time three it will be executed as   long as the ad a contains some Pharaohs. So, if  I run this program you see the string 123 So,   this is the standard foreign loop if we want to  use this array using the standard for loop we can   do that also for example for var i equals zero I  less then numbers dot length then plus plus i and   here print numbers Hi. So, if I run this program  you see in this case one two threes again printed   because we are using the standard for loop there  is another loop that is called for each loop. So   basically for each and higher order function. So  for example here like before we have defined an   array with some integer values. So we want to  print the each of these video right so we can   do that using number dot for each and then here  we have to define a function. So for example,   we want to access each of these vedo right. So  we can do that like in and then we can use an   arrow function, what is the arrow function I will  discuss later, we can also use a normal function   here as well, but in this case, it's looks elegant  to use arrow function, and we just write code like   this way if I run this program again you see it  is showing or sorry, here I have the ID Mr. It has   to be it has to be in so if I run this program,  you see 123 is printing. So basically this for   each is an higher order function because it takes  another function as a parameter, this full thing   is actually a function but we have written in  the short from that is called arrow function. I   will discuss this thing in later in the function  part but just keep in mind that there is another   way for looping especially in an array or object  using the for each loop. If you think this arrow   function looks a bit complicated for you, you can  do another thing you can define another function   like board, print num and here is a parameter and  just print this now. And now instead of this arrow   function just to pass this non function print down  function reference and if I run this program again   you'll see the same output 123 basically we are  passing this function as a parameter of this for   each higher order function. There is another  rule or the number four types of loops called   while loop suppose we have defined a variable num  equals five and we want to print the value of num   unless it is zero so we have to write while then  the condition within parenthesis that num get at   the zero so as long as num greater than zero,  execute the body and then we fast printing the   Hello have now and then we decrease the value  of num by one if I run this program you see,   it is doing nothing because I did not save. So,  let's run again then you see that it is showing   54321 there is another variation of this while  loop. So, instead of using the condition before   we have to write do in here and after the body  called the basis you can write the condition the   while condition after this curly braces. So, if I  run this program again you'll see the same output   54321 if within a loop for a certain condition,  we want to terminate the loop we can do that do   this by using break statements. So, here in this  loop, this loop will run 10 times apart here we   have written a condition if i greater than five  then just break otherwise print I if I run this   program, you see zero to five is printed and then  when the value of i become see that is the it is   greater than five then this break is statement  executed and the loop is terminated. So this is   how we can use break current break statement in  any loop to terminate the loop. Suppose we want   to write a program to print the odd numbers or  even number so in our case, we want to print the   odd number. So we have written a loop a standard  for loop this loop will run 110 times and here we   have written a condition if I modulus two equal  to zero that means if the DV after the division   if there is no remainder, that means zero, then  continue here continue his statement mean that   don't go the remaining statement just continue  from the loop from here if I run this program,   you'll see it is showing the odd numbers from the  range zero to 10. So here you will have seen that   13579 so the first time i equals zero and zero  less than 10. So zero remainder two equal to   zero there. So this condition made true so the  container is statement executed and the end the   loop goes to here. So I becomes one. And then the  condition is again checking if s one is less than   10. And within the body if one reminder to equal  to zero, it is not true. That's why this condition   did did not meet for the second time. That's why  we have seen this one is printing in here. So this   is how this container a statement was within a  for loop. There are three built in collection   type in Dart programming language, least sate and  map. So list basically is an ordered collection of   halos. So it is in some programming language is  called array, but in Dart programming language,   it is called least. So suppose we want to define  a list. And we can do that using list class. So   when we define list Li St. And then we define a  variable so that means this names is an object   of least class. And here using the shortcut  way that is means using the square bracket,   we can define some way to like jack, and Jill. So  these two are a string items within this list. So   if we want to access each of these value, we can  do that. So basically in list, the first item is   indexed in zero The second item is one and this  is how it goes. So if I want to access the first   item from this list, we have to write brain names  then square bracket zero if I run this program,   you'll see it is when jack because jack is a state  within the position or index at zero if I print   one and run the program again, in this case it is  showing in jail. If we want to know the number of   elements existed in the list, we can use the  length property of the list object. So here   we are painting name dot length, so let's run the  program. You'll see ad showing two that means this   list object names contents, two items. Instead  of list if I just put var here and If I run this   program, you'll see it was in this case, the  compiler. By type inference will know that this   names list is a string type list item. So if I  put my cursor in here you see it is showing list.   angle bracket is string. That means this next is  a list. And it is known in beider type inference.   If we want to access each of this item, we can do  that by using any for loop. But normally in this   case, you can use the for in loop so far, bar in  in names and print. And so if I run this program,   you'll see jack and Jerry's printed. If I want  to use mixed item, that means some videos will   be staying some yellow, maybe double some bills,  maybe in desert, we can do that as well. So 10   100.1. And if I run this program, you'll see  each of these video is printed. And if I put   my cursor in here, you see nowadays showing list  and within angle bracket object. But if we want   that this list should be a string type, we can do  that by defining the instance, represent this bar   by list and within angle bracket we define is a  string. In that case, if you put any value other   than a string, it will shown and erode. So this  is a statically typed names list. That means you   cannot put other type instead of a string if I run  this program. You'll see it issuing now jack and   do so for a statically typed list, you can just  put a angle bracket after the keyword list and put   that type in here. This list is a mutable type. So  that means if we want to change the value of the   index one we can do that. So names one, instead of  zero, we type like Mark and if I run this program,   you will see now it is showing jack and mark so  the value is replaced with a new video. But if   we want to define each of these various constant  that when we do not want to change it at runtime,   we can do that easily just by just putting the  const keyword before the square bracket. If I   use this program now and run it you see  it is showing an arrow that unsupported   operation because you cannot change a constant  value at runtime. If I remove this part,   clear the skin and run the program again. You see  there is no error in that case. Suppose we want   to copy a list to another list. We can how we can  do that. For example, let's define another list,   or just have our names too. And if I just assign  these names, one, I mean that's nice Bart. And if   we accept this name store and run this program,  you'll see we can still access the video jack   and jill. But basically when you assign a object  like list within another object, it's actually not   copied instead this names to accessing the names  veloz. So suppose if I change the value of names,   after assigning these, suppose I change the value  of names one equal to mark. And if I run this   program again, you see we get that updated Hello,  we are changing that of Hello repel the Veilleux   of GL by Mark in the nails variable. And we are  looping the names to variable but we can still see   this updated video like jack and Martha This is  not a select. This is not actually copying rather,   both names to ns pointing the same list of items.  So instead of doing that, if we want to really   grown the list, what we can do that is using  our spread operator in Dart 2.3 we can do that   easily. So here we just put a square bracket and  then three dot and then the first variable name   so names one. So if I just run this program again.  You'll see in this case when we looping names two,   we are actually getting the old value jack and  jill basically in this case names two and names   does not point to the same list of item. Both  names and names. Two are totally different items.   list items. So this spread operator is similar  like JavaScript, I first saw this three.is spread   operator in JavaScript and this three.or a spread  operator is introduced in Dart 2.3. said in Dart   programming language is an unordered collection  of unique items. And dark support for set is   provided by set literals and the set type. So  suppose we're defining a set by var keyword var,   hello James. And here we have to use the curly  braces. And within curly braces, we want to put   some string vedo. So we can type flu, Rhine, and  then chloride to veloz. So these are basically   unique IDs if I copied this flu right again after  the comma, and if I loop this program, so for var   x in Hello Jas and print x, and if I run this  program, you see it is only showing floros,   fluoride and chlorine. So this foreign if we put  it two times, but it is actually stored one time,   because by definition set is an unique collection  of items. There is another way to define set,   if you want to define an empty set, you cannot  just put like the support, so you want to put   an empty set, just remove this for loop and remove  these curly braces, the IDs of these curly braces,   if I just type print, hello jeans, run time  type. And if I run this program, you'll see   in this cases, we thought that it should be set  a but instead it become a link hashmap type. So   if you want to define a empty set, if you want  to define the empty set, you must have to define   the type name in here like you have to put if I  just put a string here, within angle bracket. Now   you'll see it issuing has set. So just empty curly  braces means hash map, but when you are defining a   type before the callable, then it does it become  a hash set. And another way to define has said   is like this, that set using the set keyword that  means set class is in the same class, then you can   also put this string thing in here, set a string  and then if I put in names and curly braces,   and if I check the names, runtime type, you'll see  it is also has it so either way you can define an   empty, has set in Dart programming language.  in Dart programming language map basically,   is a collection of key value pair of items  in some programming language, like in Python,   it is called dictionary. So let's define a map in  Dart programming language. So here I have defined   a map gift and that key of each of the identity  is staying So here I have defined within single   code fast, which by this key, we are putting  Veilleux Petraeus then say again, Dart loves   and feel the golden rings. If I want to access  each of this item, we can do that easily like   print gifts. And this is also on our data. And  if we want to access any of this video, we have   to use the key. So for example, here I am, I want  to use the key fifth. And if I run this program,   you see it is showing golden rings. So this is how  we can create map in Dart programming language.   Another thing is that you can also use integer  value SK for example 213. And in this case,   we also remove this faith and instead we just put  one and run this program. You see, you see that it   also was without any issue. If you want to define  an empty set, or sorry, if you want to define an   empty map you can do that using the map class.  So here we are defining gift as a and we want to   created an instance of map in here and assigning  that gift. And now we want to add key value pairs   by ourselves. We can do that by easily like gifts.  Then within a square bracket we can put the key   suppose here Fast as a key and the valeu suppose  mango. And if I run this program gifts fast   you see it works. So this is how we can create  map in Dart programming language. Another way   we can do that using curly braces, and they are  we have to put the key and the value together.   For example here fast and within after colon we  have to put like mango love Hello then another   key. So this basically key and this is the video  so this two item becomes a key value pair as a   one item within the map. So in the second key, we  want to put another video like jack foot. And now   we want if we want to access any of these video,  like gifts. Second, and if I run this program,   you see it issuing jackfruit so this is how we can  create map in Dart programming language. in Dart   programming language, each function is an object  of class function where F is the capital letter.   So let's define a function. For example, we want  to defining a function as a square root which we   can use to square any integer or num type any  integer or double Hello. So, for this reason,   we want the return type should be dynamic.  So, when you define a function at the first   first part, you have to define the type which  it will return if there is this if a function   does not return anything you can use void  or you can escape the void which means it   does not return anything. So in this case, we are  putting dynamic then the function name is square,   we also take any of Hello So, this function can  take parameters. So if we want to, if you want   the function take parameter we have to define  that. So here we are defining our norms. So this   function will take a parameter as num, and this  function will return the num into num. So whatever   we pass any valid integer or double Hello in this  square function, it will multiply that by the same   hello and return of Hello. So let's define another  function, for example, void show output. And here,   we take an A, define a variable as parameter  bar message. So this function takes messages   as parameter. And using the built in pin function,  it will pin the messages in the terminal. So now   let's call this function first show output.  And within this function, we want to use this   function square. so here we are typing a square.  While we are putting two. If I run this program,   you'll see it is showing four then we use the  same statement, but in this case, we are putting   2.5 and let's run this program, you see now it is  showing four and 6.25. As we define this function,   this a score function is dynamic. So that means  this function can return any type of non value   like any type of integer or double of Hello. And  another thing if I just type print and square   this function name without parenthesis and runtime  runtime type. And let's run this program. You'll   see this is showing that this function is quite  easy dynamic type. in Dart programming languages,   there is a shortcut way to defining a function  which is a one line if statement. So for example,   here in Dart programming language you have  to use the equal sign and greater than sign   together to make a arrow This is called fat arrow  and sometimes called fat arrow expression. So here   we define a full function right that dynamic  is square one now and within curly braces,   we define a body we can make it we can make it  shorter using arrow functions. So instead of this,   just remove this arrow part and return part  and just put a arrow here. So here what we are   defining that dynamic is square varname,  then arrow expression now multiply Nam,   so when you write an arrow function like this way,  the result of the valeu after the comma petitioner   will automatically return. So if I save this  program and run again, you'll see this program   was as like before, a function that has no name  or In short, you can call nameless function is   called anonymous function in Dart programming  language. In some other programming language,   like in Python, it is called lambda, or in some  programming language, it is called closer. So   here, let's define a list with some string values  of items. And we want to use the for each function   of this list. So let's type list dot for each,  these are higher order function, because for   each function get can take other function  as parameters. So within the body, we will   define a anonymous function. So before defining an  anonymous function in here, let's define a named   function. So suppose I'm defining a function void,  print F, which takes a parameter item, and just   using the print built in function, it just print  the value of the item variable in the screen. And   here, we just want to pass this printf function  as reference. So if I run this program, you'll   see it issuing Apple bananas and orange. But in  this case, or sometimes when you define a forest   function with a shorthand function, then in many  cases, computer programmers do not define a name   function, instead, they prefer to use anonymous  function within that places. So to do that,   let's guard this part and remove the name function  part and here remove this printf and put that   thing in here. So, if I save this program, clear  the screen and run the program again, you see it   works. So that means this function is an anonymous  function, because this function does not have   any name. There are two types of parameters in  function in the programming language like Python   programming language. So one type of parameter  is called positional parameter or positional   argument. And the second type is called named  parameter or named argument. So let's see the   positional argument or positional parameter first.  So here we are defining an arrow function which   takes two parameter. So in this case, we are using  the positional arguments. So here, num one is the   first position nonprint the second for position,  and we're just returning after combining the hell   if I run this program, you will see it works it  is showing for now, here, if you look carefully,   you'll see that when we call this some method, we  just passing the value and we expect that these   two will be assigned in number one and these  two will be as an int num two, because we are   using the positional argument on our positional  parameter, let's convert this function this arrow   function to named parameter. So in that case, we  have to use the curly braces here. So we want that   this two parameter should be as named parameter  and when I put curly braces in here, you see it   is showing red color in here. So if I just remove  this thing, and if I call sum, now you'll see that   it is showing number one and number two, if I put  num, for example, in this case, if I want to put   num too fast, so I have right return num two colon  then suppose four, and then I want to put num one,   suppose two, if I save this program and run this,  again, you see it is showing six. So when you   are using named parameter, you have to use the  name of the parameter when you are calling the   function. And this basically works for not only  arrow function, but also for a general function.   Another interesting thing of named parameter is  that by default named parameter is optional. And   we can also mix positional parameter and named  parameter together. For example, in this case,   we want to change a bit. We want that the num  two is only named parameter but the num one is   positional parameter. And num two may be optional,  right. So in this case, When we want to call these   functions some, then we have to put the value as  the first parameter. Suppose I am putting 10. And   as this name parameter for this name parameter, I  use the name num two. And suppose I put two. And   if I run this program, you see it is showing 12.  But I told before that when you define a variable   sorry, when you define a parameter as named  parameter by default that is optional. That means,   if you do not provide any value for num two, it  should work. Right. But it is crushing why we're   defining this num two parameter as optional  by defining these as a named parameter. But   when there is no video, but we are still accessing  these Veilleux. So, as this num to maybe optional,   what we can do, we can write a conditional not  not our operator like double colon zero. So,   if I, if I change this modification in here, and  if I run this program again, you'll see it is also   showing an error because I think I have to put a  parenthesis to give the priority and now if I run   this program, again, you'll see there is no arrow.  So, in this case, when we do not provide the named   parameter of Hello, and in the function body, we  are checking that whether num two is null or not   if it is now then just pass the default value  as zero otherwise, if there is any value just   use there. So, if I again use this statement print  and sum and here I put another Veilleux then two   and num two. So, you see it is showing 10 and  12. If you want that, if no value is provided,   we can use any default value. So, instead of  using this, we can do a shortcut default value   parameter. So here, after number two, we put a  equal sign and put a default fellow. So if we   change this function here, and if I run this  program again, you'll see there is no error,   because when there is no parameter, no value for  num two parameter it is using the zero in here.   So zero plus 10 that is 10. And when we pass any  value like two then in this case the default value   will not be used and 10 plus two will be 12. So,  this is showing in here I told that by definition   name parameter are optional, right. But if you  are using a positional parameter, and you want   to make any of them as optional that how you can  do that. So for example, here we want to make this   num two as optional, but this is a positional  argument or positional parameter. So to make it   optional, we just have to put a square bracket  outside of the parameter and now this num to   become optional. So, if I run this program, you'll  see it issuing four and to set the first time we   are passing two values and the second time we are  passing one pillow. So in that case that Nam to   become null. And here as we are using knowledge  our operators so that default values zero will   be used in the second case in object oriented  programming class is a very important topic.   Using class we can define our own custom type,  we can encapsulate the related halos and related   methods together. And when you define a class you  can inherit to make some subclass Also, you can   do some other thing like you can use polymorphism  you can reuse your object oriented code for other   purpose. So in Dart programming language, we can  create a custom type using the class keyword. So   let's define a class. So, here we are defining a  class named Parson. So to define a class in dirt   you have to use the keyword class then the class  name and within curly braces, we are defining   the body. So basically class is a blueprint for  an actual object, this is not object This is we   are defining the type that means we are defining a  person class or person type. And later in the main   function, we will use the other of this person  class. So in this person class or blueprint,   we want that a person should have a name, a person  should have a just basic to type, okay. And now,   let's define a method in here. So, when you define  a function within a class that is called method.   So, here we are defining a method point, this  function or this method returns nothing and then   show output the function name, which is called  method them in the context of class. And this   patter does not take any parameter and it just  print the Hello of name and age. And now let's   create an object. so here we can create object  into Well, suppose we want to use this person   name in here, so person class name in here and  then person one and then Parson. So when you use   the parentheses after the class name, basically  it will instantiate an object and sn that object   to this person one object variable, right. So if  I just want to access this show output method,   I can write person one dot show output, basically,  it will print nothing, I mean to now, if we want   to access this variable name and age, we can do  that like person one dot name, suppose my name   Muhammad and person one dot age, my suppose 35.  So if I run this program, again, issuing more   than 35 Now, let's create another person object.  But before that, we want to use a constructor,   which is called default constructor. So what is  that, so let's define a constructor. So basically,   constructor is also a method without any return  type. So and in Dart programming language, you   have to use that class them as constructor name.  So, here we want to defining a constructor and   constructor method is automatically called when  you instantiate an object. So, here in this case,   we want to pass two parameter is string name and  the second parameter is optional int age and by   default, it should be 18. If there is no ages  provided, and as this name, parameter name, and   the class properties name are same, to if you want  to access the objects or instance, our field we in   this case, we have to use that this keyword This  means these objects name or this object age also   we can call this using this we can also call the  method defined within that class. So here we want   to use this dot name equals name, and this dot  age equals A so if any name and age is provided,   when we create the instance of a class will pass  the values and the various will be assigned the   object or instance fields. So now, when we define  the constructor, you see now it is showing an   error because it expect that I have to pass at  least one name. So here, I just past service ma   mode. And after saving the program, if I run this  program, it was a different mama than 18 because   I did not pass any a that's why it is taking  that default value, but if I pass any is like   35 you see now you're showing Mama 35. So this is  called default constructor. Another shortcut oil   to write a constructor basically constructor  is using to assign some values when the class   instance is created. If the parameter name is same  as the properties or feel stem within the class,   we can use the shortcut okay. So, instead of  using this body, we can just use here these   dot name and here these dot A's and a default  value. So if I run this program, again, you see   it works. And in case if I do not want to provide  this 35 and run this program again, you will see   it was again industry Mahmood 18. So if in your  constructor other than initializing the values,   you want to do something else, if there is no  other thing you want to do within the constructor   body, you can escape them curly braces part I  only use this way to shortcut the constructor.   Let's define another object. So, in this case I  am going to using the var keyword and person two   and I give the person I want to name jack and age  is suppose 25. And let's Parson to and call the   show output method. Let's clear the screen and  respond the program. You see in the first case   it is showing Mama 18 and the second case it is  showing jack 25. So basically this person one and   person two is totally different instance of the  same class that is person class. And here as we   are using var keyword, but in the right side  after the equal sign we are using the person   class so using the type inference the compiler,  the compiler will automatically know that this   person to bicycle an object of the person class  other than default constructor, there is another   constructor that is called named constructor. So  when you define a constructor like this, where   like the class name as the constructor, then this  constructor will automatically called that is why   it is called default constructor. But sometimes we  may need to instantiate an object of a class with   some different kinds of hellos right, then how  we can do that. There is another way suppose we   want to define a named constructor. If you define  other constructor besides the default constructor   that is called named constructor to define a name  cost property, you have to use the class name. So   here Parson then you have to put a dot and then  the constructor name. So we want to name the   constructor as guest. And here, we want to sn some  veloz. So here name equal to guest and age equal   to 18. Okay, so let's create another object var  barsana tree, Parson and dot cased in this case,   you see I am not passing any values. That's why it  is not calling that default constructor. Instead   it is I am calling the guest constructor and if I  run this person three dot show output method and   run this program. You see in the top cases it is  showing guest and 18 for the person three object.   So this is how we can create other constructor  beside default constructor. Normally what happens   when we define a variable either explicitly or  within a class, we can change the value at any   time if we want, right. But if we want that, we  will define a field or properties or variable   within a class. And that will be unchangeable  after initializing, then we can do that by using   the final keyword. So here we define a class class  x capital X and within the class in the body, we   are defining a variable named name. So and we are  using the keyword final. And then we are defining   another variable named age where we have assigned  contain. And before defining the variable we   are using the keyword static and cost. So I will  discuss all of these three things final is static   and static const. And then within the class  default constructor, we are just assigning the   Hello passing to the constructor in the named  variable. So let's create an object so var x x   capital F, and then pass the fairyloot check. And  now if I print x dot name, and run this program,   you'll see it issuing check. So suppose I want  to change the value of name if dot name equals   something is like Jill. And I want to print the  x dot name again. Basically, it is showing that   name can be used as a setter because it is final.  So the Dart extension in this Visual Studio code   editor can detect that error. But if I just remove  this final thing and just use var name, and run   this program, you'll see first time it is showing  jet and the second time it is showing g so the   key point here is that if you want to define any  properties, as a constant, you can use the final   keyword and using the default construct or when  you ascend the hill. You cannot change the value   after assigning EDA in the second time. So only  faster you can assign the value using the default   constructor or any named constructor, there is two  ways to define a value when we defining a variable   as constant one is using Final keyword and other  is using const keyword when you are using const   keyword that is a compile time constant, it cannot  be changed any time at all at runtime, but when   you are using Final keyword within a class, you  can change it using the constructor. So this is   possible at runtime. And if you want to use any  cost constant video is in the constructor within   a class you must have to put a static in front of  debt cost hour in front of that cost variable. So,   here we are using a steady cost India's 10 and if  I want to access the value of a we can write brain   x dot age and it will not work because this is a  compile time constant and we are using ad in the   class. And as this is a static variable, we have  to use the class time to access the property and   this is called class property. This name is called  object property because this name is different for   different object but the aesthetic property  is same for all object or all instance, but   there is a backup because it's a class property.  So here you have to put the capital X dot age and   if I run this program, you see dish 110. So,  suppose I want to create another object for x   suppose bar y equal to x and g and y brained brain  print y dot name and you'll see that for x object   and y object the name value is different part  s this property is based on class. So, we have   to access that property using the class name dot  property and this is same for all instance. So the   age 10 is is same for both X object and y object.  If we want to use the cons and final outside of   the class, we can also do this. So let's remove  this class part and remove this thing and suppose   we want to define to constant vadose. So final  har name suppose the name is something Mahmoud.   And in this case, you do not have to use the var  because it is this name will be be a string by   type inference and there's different other below  cost name suppose age equal to 30 let's print name   and print age and if I run this program after  clearing that term, you know you see it worse   and we cannot change any of this name equal to  something else cannot possible also a is equal to   something cannot possible it will be showing any  error because here you see it is showing that name   is a final variable and age is also a constant  variable which cannot be re assigned. And in   this case outside of the class both final and cost  actually worth like same there is no difference.   So, you can use anything a final or cost outside  of that class. When we define a class and later we   want to add some extra feature within the class,  but that extra feature is not required for all   the instance of the origin occur then we can use  the class inheritance and in Dart program using   the extend keyword you can inherit a class. So  here we are defining a class of akel where there   is two property model and here and in the default  constructor when we pass a model and year. In this   default constructor we are assigning that model  Hello using these dot model will be in this model   and these dot here the passing here will be sn  in here. And within the default constructor body   we are just printing the model and here nothing  new and there is another method to output just   it prints the model and yet if we want to use  this here that's also okay. Basically this means   that the instance which it is called now, we are  defining another class class car and that inherit   this vehicle class right by using the extend  keyword. And here we are defining a new property   that is called double price. And in this default  constructor in the car constructor, what we   are doing we are taking three parameter right is  string dot a string model year and these dot Price   here he here there is an interesting thing. So,  the interesting thing is that this price is the   new thing of this car, but these cars as inherit  the vehicle, so, this model and here also existed   within the car class. So, what we are doing we  are when we create an instance of this car class,   we are assigning the price villo directly in this  variable using the d dot price. But for the model   and year, we want to pass that variable halos  using in the vehicle constructor and to do that in   dirt, you have to use a colon operator after the  parenthesis of the sub class default constructor   and you have to use the super keyword and using  super keyword you have to pause the video so   here when we are calling this after column we're  calling this super then within parentheses model   and here this model and here will be passed  to this constructor vehicle right. So, and in   this car class, we are also defining a method show  output and under show output, we want to call this   method that means super cost method and here we  are calling this super keyword we are using this   super keyword then dot then the method name. So,  basically super dot shortcut means we are calling   this method the superclass method and then we are  printing the this curse price. Now here we are   creating an object car one equals car not vehicle  object, we are getting a car one car object,   we are passing accord as a model 2014 as the year  and 150,000 as the price and then we are calling   car one show output. So, if I run this program,  you see it is showing aircore 2014 because when   the instance of this card is created, then we are  calling basically this car constructor and here we   are passing trivial right ecore 2014 and 150,000.  So, to accord will be in here 2014 will be here   positional argument and 150,000 will be here and  as we are using these dot price and there is a   property name price as the same name. So, this  150,000 will be assigned as the price of this   car. And after all on on the default constructor  as we are calling super model here this echoed in   2014 will be passed to this vehicle and will be sn  this model and a year and then when we call this   car one dot show output he will say this method  is called here we are calling the super method,   superclass method show output where it will be  printed model and year. So, you see here model   and here is printed and then this price is printed  in here. So we are seeing this price in here. So   this is how we can inherit or extend a superclass  to mean add to a subclass. Method overriding a   suppose in a class there is a method and in the  subclass it here in y class extend this Ace class,   we want the same method to redefine that is  called method overriding. If you want that other   programmers know that this method is overriding,  you can use an override annotation. So when you   use an override in front of a method signature,  that means the compiler will know that this method   is overriding and in any case, there is no method  of the original name, it will show an arrow that   method does not override an inherited method. This  is basically a safety feature in Dart programming   language. When you overriding a method you will  if you do not use the Add override keyword,   it will not show an error. There is no issue for  this. You will have to use override when you don't   have control of superclass method implementation.  Basically, the intent of the override notation is   to care situation when a superclass renames a  member and independent subclass which used to   override the member code silently continue working  with the superclass implementation. So the good   practice is if you override a superclass method,  you just use the Add override annotation. gators   and setters are a spatial method that provide  read and write access to an object properties.   Normally each instance variable has an implicit  Gator process setter if appropriate. But if you   want you can create additional properties by  implementing getters and setters using that   gate and set keyword. So here we define a class  rectangle where we are using de nom object so   basically now means it's an It's a type and That  that is inherited by the integer and double type.   So, here we are defining num left top width and  height so the value of left of width and height   can be integer or double. And in the default  constructor we are just assigning the veloz   past and sn in the properties. Now we are defining  two gators that is right and bottom and to setter   for each of them. So, to defining a gator, we  are defining a right Gator name right and use   the gate keyword before the name and then we are  providing the return type and here we are using   an arrow function and it will what it will do  if we call this right Gator will get left plus   with these two variables data and we will get this  value and if we want to make a setter we have to   use the set keyword and setter name. So here it is  right and we are passing any Veilleux noun valeu   and we are putting the left value. So, using the  arrow function what we are doing we are assigning   left equals valeu minus with So, we have a we are  passing a value right and what we are doing we are   doing a customization. So we are we are missing  that with Veilleux from the Halo and that sn in   that Veilleux in the left variable within that  class. Similarly, we are doing the same thing as   for bottom and now we are creating an object rect  using the rectangle class name and passing some   veloz and then we're printing the reg dot left of  Hello let's run this program we are seeing that   the left value is three and then we are we are  calling the getter method that is right so reg   dot write equals 12. When we defining a method we  have to use the paranthesis. But when we are using   the getter or setter, we do not need to use any  balances like when we want to access any getter,   we just have to use the dot operator. And when  we want to use a setter, we just call the setter   name and the equal sign and in that case the value  will be assigned as a setter. So here when we are   calling rec dot right equals to L so that 12 comes  in here and of helou minus cervello is 12. And it   minus with a weight is here that is 20. So hello  is 1212 minus 20 equals minus h so that's why when   we are printing reg dot left, we are getting this  minus eight output. So this is how we can define   getter and setter in Dart programming language.  Exception Handling eg a feature in a programming   language by which we can know that if there is  any runtime problem occurred or not. So indirect,   if we want to use exception handling, we can use  the throw try catch finally keyword. So suppose   here we are defining a function must greater  than zero. So this function, if it gets a value   greater than zero, then there is no problem it  will return the value but if it gets a value   equal to zero less than zero, then it will throw  an exception. And to throw an exception you have   to use the throw keyword and the exception class  name. And within the exception class, now you can   provide a message you'll see that the method  definition is swing showing above the cursor.   If a function throws in exception, you have to  catch that otherwise the program will terminate.   So we defining another function late verify the  failover where we can pass any value. And within   the function we are defining a value verification  variable where we'll SNF why send off Hello. So,   as this math function must be greater than zero  can throw an exception. So, we have to define this   function within that try block. So, here in the  try block we are using valeu verification equal   mask greater than zero and we are passing the  value. So, if there is an error occurred, then   we are just printing the error by catching the  error in here cares within the parent services we   can catch any type of exception here and then in  the finally block which is basically an optional   block we are checking something like if this  video verification is now because if In any case,   if this mouse greater than zero function returns  an error then that case this value verification   will be not right by definition it is null and  if it succeeds, then it will this variable will   get the value. So in the finally block we  are checking that if that is now that we are   printing value is not accepted. Otherwise we are  printing Hello verified and we're using the string   interpolation we are passing the Hello So let's  run this problem. You see in first cases it is   showing valeu tin but when we in the second case  when we are passing the halos zero in the first   case it is printing below verified by 10. But in  the second case it is this catch block basically   captured this exception that value must be greater  than zero you see this this message is printing in   here, but after the exception word and then in the  finally block we also captured the value I mean   the message and here it is printed Veilleux is not  accepted. Basically when you use the catch keyword   and within the parenthesis you use any parameter  like he basically handles all kinds of error but   if your program has a specific type of error you  can use the on keyword So, after the try block you   have to use on then the exception name then if  you have another type of arrow then you can use   on and that exception name and sometimes anything  else that is an exception you can use like this on   exception catch e So, this is another pattern  but normally I prefer or in most cases I use   that try catch block or try catch finally block I  normally do not use the on exception thing unless   it is very important for the particular program.  So I hope that this tutorial will help you to   understand that programming language and you  can able to dive deep in flutter framework. If   you liked this video, please give it a thumbs up  and if you have any questions please ask in that   comment section. I also welcome you to visit  my personal YouTube channel where I regularly   publish programming related video tutorials.  So thank you for watching and have a nice day