<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aspiiire</title>
    <description>The latest articles on DEV Community by Aspiiire (@aspiiire).</description>
    <link>https://dev.to/aspiiire</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F595509%2Ff371da61-8876-4d8c-a199-d408c4e2d318.png</url>
      <title>DEV Community: Aspiiire</title>
      <link>https://dev.to/aspiiire</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aspiiire"/>
    <language>en</language>
    <item>
      <title>Flutter - Riverpod how to install it</title>
      <dc:creator>Aspiiire</dc:creator>
      <pubDate>Thu, 20 Jan 2022 08:04:20 +0000</pubDate>
      <link>https://dev.to/aspiiire/flutter-riverpod-how-to-install-it-25hi</link>
      <guid>https://dev.to/aspiiire/flutter-riverpod-how-to-install-it-25hi</guid>
      <description>&lt;p&gt;In this simple and brief tutorial we are going to see how to install this fantastic package when using Flutter.&lt;/p&gt;

&lt;h2&gt;
  
  
  So.. How to install Riverpod?
&lt;/h2&gt;

&lt;p&gt;The easiest way to install this package is by simply running "flutter pub add flutter_riverpod" in your terminal; The package will be added automatically in your pubspec.yaml&lt;/p&gt;

&lt;p&gt;Since I don't want to give you the fish but I want to learn to you how to fish, that's why I am going to explain about the entire process!  &lt;/p&gt;

&lt;p&gt;First before installing the package you can retrieve it on &lt;a href="https://pub.dev/packages/flutter_riverpod"&gt;pub.dev&lt;/a&gt; named "riverpod_flutter"; Pay attention and don't confuse it with "riverpod" only, cause this last one is meant to work with only Dart.  &lt;/p&gt;

&lt;p&gt;This is the page: &lt;a href="https://pub.dev/packages/flutter_riverpod"&gt;Pub.dev Riverpod Flutter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you can go under the install tab and copy the line to add it manually, it something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;flutter_riverpod&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;^1.0.0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I showed you the entire process cause, most probably the version will be changed when you are going to see this tutorial. So you shouldn't copy my line but I suggest you to check the last version from the website.  &lt;/p&gt;

&lt;p&gt;After copying this line you should head on to the "pubspec.yaml" and paste it under dependencies&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;dependencies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
 &lt;span class="na"&gt;flutter&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
 &lt;span class="na"&gt;sdk&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;flutter&lt;/span&gt;
 &lt;span class="na"&gt;flutter_riverpod&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;^1.0.0 &amp;lt;--- You can copy it HERE!&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this case will be put under dependencies because we need it in production too!&lt;/p&gt;

&lt;p&gt;There are some packages that should be put under dev_dependecies cause are needed only under development, like debugging helpers, loggers etc.&lt;/p&gt;

&lt;p&gt;Now if you are using Visual Studio Code, by Saving, a command should start automatically and update your packages, if not or you want to do it manually you can type this command on your command line, also known as Terminal or Shell.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter pub get
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the package has been installed and the only thing that you need to do to use it is to import it on the files that is needed.  &lt;/p&gt;

&lt;p&gt;If you prefer the video version here it is&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/HbrtQYEPsoo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>tutorial</category>
      <category>beginners</category>
      <category>dart</category>
    </item>
    <item>
      <title>Flutter - Futures, Async and Await</title>
      <dc:creator>Aspiiire</dc:creator>
      <pubDate>Wed, 08 Sep 2021 14:31:26 +0000</pubDate>
      <link>https://dev.to/aspiiire/flutter-futures-async-and-await-5f2f</link>
      <guid>https://dev.to/aspiiire/flutter-futures-async-and-await-5f2f</guid>
      <description>&lt;p&gt;An important topic that inshAllah(God willing) will allow us to communicate with the external world!  &lt;/p&gt;

&lt;p&gt;If we want to talk about async and await we should first talk a little bit about Futures...  &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/X9ZglZObi-E"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Futures? What?
&lt;/h2&gt;

&lt;p&gt;Futures allow you to work with asynchronous code, let's pause 1 minute here....  &lt;/p&gt;

&lt;p&gt;When you write code you could have Synchronous code and Asynchronous code.  &lt;/p&gt;

&lt;p&gt;With Sync code we mean the normal code that you write, it works in a linear way, an instruction then follows the next one, then the next, you know that the last line it is the last one that will be executed!  &lt;/p&gt;

&lt;p&gt;On the other hand with Async code works in a non linear way. it waits for some code to return in the future, a function that is Async it will run when it has done his job.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I KNOW, I KNOW, IT IS NOT TOTALLY CLEAR... LET ME ELABORATE BETTER&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You define a code asyncronous by using the async keyword before the body; Now that your code will be async you can use inside the body the await keyword (await can be used only if you define a code asyncronous).  &lt;/p&gt;

&lt;p&gt;As example now I'll use same invented name function that late inshAllah I'll use in the code to let you understand how everything works.  &lt;/p&gt;

&lt;p&gt;You should use the await keyword for a Future function , in our example we are going to call it "getSomethingFromInternet" ,in this way you are saying that that function it has something that will return in the future (We don't know when and how much it takes), after the Future end his job, will return a Future of the type defined by the future, in our case "String" since we have defined our Future as "Future";  &lt;/p&gt;

&lt;p&gt;"Future" means that we expect a string when the future is completed.  &lt;/p&gt;

&lt;p&gt;Note: On async code, al the code before the await will run syncronously, when it find the first await it will wait for the value to completely return, as completed, with value or error!  &lt;/p&gt;

&lt;p&gt;Now, on our main we use a variable to store our future, calling await under our Future like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;gotSomething&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;await&lt;/span&gt; &lt;span class="n"&gt;getSomethingFromInternet&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We want to store the result of our function inside the "gotSomething" variable, If we don't use the await keyword we will have inside the variable a Future, but since we are using it, at the end we will have a string with the value "Something from the internet".&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="c1"&gt;// We define our function as async&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;async&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
 &lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'This line runs before await'&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
 &lt;span class="c1"&gt;// Until here the code get executed syncronously&lt;/span&gt;
 &lt;span class="c1"&gt;// Here it see the await keyword, it waits to to value to return&lt;/span&gt;
 &lt;span class="c1"&gt;// In our case will return a string with &lt;/span&gt;
 &lt;span class="c1"&gt;// "Something from the internet" after 4 seconds&lt;/span&gt;
 &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;gotSomething&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;await&lt;/span&gt; &lt;span class="n"&gt;getSomethingFromInternet&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
 &lt;span class="c1"&gt;// After 4 seconds continues to execute the remaining code&lt;/span&gt;
 &lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'This line waits for the values from the future'&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
 &lt;span class="c1"&gt;// Now we are ablet to use our variable with value fetched asynchronously&lt;/span&gt;
 &lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gotSomething&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// We define a function that will return something from the future&lt;/span&gt;
&lt;span class="n"&gt;Future&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;getSomethingFromInternet&lt;/span&gt;&lt;span class="o"&gt;(){&lt;/span&gt;
 &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Future&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;delayed&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
 &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;Duration&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;seconds:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
 &lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;'Something from internet'&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; 
 &lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example when we use Futures in this way waiting for 4 seconds we simple are simulating a internet call without going too much specific, in real case scenario you will use usually futures to make calls to a web api for example.&lt;/p&gt;

&lt;p&gt;APIs have endpoints that could return something, as explained on my previous article; When you define for example an endpoint from your Rest API and you want to get the results from Flutter you use Futures cause you don't really know if and when the server would reply;&lt;/p&gt;

&lt;p&gt;The server could reply to you after 10 seconds cause you are in U.S. and my server is in Germany, or to me could reply after 1 second.  &lt;/p&gt;

&lt;p&gt;We don't know how it will reply, if the server at the moment of the call is working fine and it has no problems, or if it down because some black hat hacker just attacked it.  &lt;/p&gt;

&lt;p&gt;To make things simple and unserstandble we use this simple example.  &lt;/p&gt;

&lt;h2&gt;
  
  
  But, since we don't know
&lt;/h2&gt;

&lt;p&gt;But, there is a but, there is always a but!  &lt;/p&gt;

&lt;p&gt;Since we don't really know if the server will reply with a value or with an error, that means that we should take some sort of precautions, am I right?  &lt;/p&gt;

&lt;p&gt;We cannot pretend that it will always return us a value because it doesn't work in this way, if you call a web API endpoint you don't know if at the moment it is working or it has some issues, if you made the wrong query etc.  &lt;/p&gt;

&lt;p&gt;The way to be safe and not break you application is by using the try catch keywords.  &lt;/p&gt;

&lt;p&gt;With those keywords you are basically saying "Please try this code, if there is any error then catch it and execute the catch block"; When there is any error, the execution inside the try block stop and the catch block executed the code inside it with the error received as parameter.  &lt;/p&gt;

&lt;p&gt;Now, we should really do an example to make things more interesting and easy to understand!  &lt;/p&gt;

&lt;p&gt;This is an example that i found on the dart documentation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="c1"&gt;// It is void cause we are only printin the order value&lt;/span&gt;
&lt;span class="n"&gt;Future&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;printOrderMessage&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="n"&gt;async&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
 &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="c1"&gt;// We use the await keyword get the async code&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;await&lt;/span&gt; &lt;span class="n"&gt;fetchUserOrder&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Awaiting user order...'&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// We print our content&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
 &lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Caught error: &lt;/span&gt;&lt;span class="si"&gt;$err&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
 &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our application starts from here, as explained before the code inside the try runs but if we have any error the code stops from there and continues inside the catch block;  &lt;/p&gt;

&lt;p&gt;Now we really want to know what's inside fetchUserOrder so we are able to understand better the flow of the code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Here we return a string if the future completes with value&lt;/span&gt;
&lt;span class="n"&gt;Future&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;fetchUserOrder&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
 &lt;span class="c1"&gt;// Imagine that this function is more complex.&lt;/span&gt;
 &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Future&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;delayed&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
 &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;Duration&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;seconds:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
 &lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="s"&gt;'Cannot locate user order'&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
 &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here if you watch carefully you'll se a throw, that means that the function will throw an error "Cannot locate user order".  &lt;/p&gt;

&lt;p&gt;Well let's take a look again at our printOrderMessage&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="c1"&gt;// THIS IS A COPY OF THE PREV FUNCTION&lt;/span&gt;
&lt;span class="n"&gt;Future&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;printOrderMessage&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="n"&gt;async&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
 &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
 &lt;span class="c1"&gt;// We use the await keyword get the async code&lt;/span&gt;
 &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="n"&gt;order&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;await&lt;/span&gt; &lt;span class="n"&gt;fetchUserOrder&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
 &lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Awaiting user order...'&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
 &lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// We print our content&lt;/span&gt;
 &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
 &lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Caught error: &lt;/span&gt;&lt;span class="si"&gt;$err&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
 &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now that we know that our cool function fetchUserOrder() will throw an error, we know that when it reaches the point where it is called the flow of our code stops from there and moves to the catch block of code;  &lt;/p&gt;

&lt;p&gt;Inside the error parameter we will be able to access our error!  &lt;/p&gt;

&lt;h2&gt;
  
  
  But why we should use try and catch?
&lt;/h2&gt;

&lt;p&gt;That's a good question! It seems that we are complicating our life by adding try and catch, but in reality we are not.  &lt;/p&gt;

&lt;p&gt;When we write code and there is any error that means that the execution of the code is going out of our plan, the plan that we have wrote, you user must follow the main road and not go outside!  &lt;/p&gt;

&lt;p&gt;If we have errors it also means that our application will break and eventually stop.  &lt;/p&gt;

&lt;p&gt;We use them so we can have a plan B ready, in case if...  &lt;/p&gt;

&lt;p&gt;There are some cases where you want to stop the user from going forward, as an example you have the classic user login.  &lt;/p&gt;

&lt;p&gt;In other cases you want your user to still continue his navigation, for example, if the user want to add an article as bookmark but you have some issues in that specific endpoint, you may want to show a simple popup that says something like "We have some troubles now, please retry later" or "We are updating our service, please retry later", you probably come over one of this cases.  &lt;/p&gt;

&lt;p&gt;Another useful thing that you may want to do is to save the errors in a log file to be accessed in the future by you (Developer) to have a better view on why things brake down so you could improve you application.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Yes! We did it
&lt;/h2&gt;

&lt;p&gt;That's the end my friend, inshAllah (God willing) I hope that you found this content easy, enjoyed it and most importantly, you have learned something from it!  &lt;/p&gt;

&lt;p&gt;Please let me know if and how I could improve more my content.  &lt;/p&gt;

&lt;p&gt;If you still have some troubles, please check out the Youtube video related to this article, I have explained 2 example from the dart website piece by piece.  &lt;/p&gt;

</description>
      <category>flutter</category>
      <category>async</category>
      <category>await</category>
      <category>futures</category>
    </item>
    <item>
      <title>Why testing is important?</title>
      <dc:creator>Aspiiire</dc:creator>
      <pubDate>Mon, 02 Aug 2021 12:36:19 +0000</pubDate>
      <link>https://dev.to/aspiiire/why-testing-is-important-2gdb</link>
      <guid>https://dev.to/aspiiire/why-testing-is-important-2gdb</guid>
      <description>&lt;p&gt;Testing is by far one of the most important things to do during programming, but it as well one of the most overlooked things.  &lt;/p&gt;

&lt;p&gt;Testing ensure that you have a well working Website, Application or Software, let me explain.  &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/enRzQAwP8ko"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Testing is important?
&lt;/h2&gt;

&lt;p&gt;We are humans, we forget, we make mistakes, we change things, ideas; This if we work solo, imagine when you are in a team!  &lt;/p&gt;

&lt;p&gt;When we add new features or edit previously made code, to be clear, when we touch stuff, sometimes you can create some issues in the other part of your application;  &lt;/p&gt;

&lt;p&gt;Wouldn't be cool if someone could check for you that is everything fine or you have broken 3 modules of x or y class, function, or whatever?  &lt;/p&gt;

&lt;h2&gt;
  
  
  Nah, it takes time
&lt;/h2&gt;

&lt;p&gt;Yes, it takes time, following for example TDD takes a little bit of time, but, if you count the time that you will not spend looking for bugs after you find that 50% of you application is broken, it is better.   &lt;/p&gt;

&lt;p&gt;I would say that it will takes a little bit of time at the beginning, but at the end will take less time.  &lt;/p&gt;

&lt;p&gt;Instead if you code without testing when you have a full production application and, for example, you add a new feature breaking parts of you Application, I'm pretty confident that you'll have a harder time.  &lt;/p&gt;

&lt;p&gt;The beautiful thing about testing is that you are able to follow the exact point in which your function has problems.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M91abvGZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y0x4ap4tlmroqrjlupk6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M91abvGZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y0x4ap4tlmroqrjlupk6.png" alt="Process of testing illustration"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yes you guessed it, this is the purpose of testing...  &lt;/p&gt;

&lt;p&gt;We are not perfect, testing allows us to check that everything is as it was before nothing has changed and every behavior is exactly how we have coded it before, the function receives the same inputs and gives the same outputs, the overall Application works as intended.  &lt;/p&gt;

&lt;p&gt;If you could catch minor problems before they transform in huge holes in your software in the same moment you create them I think that it's a fantastic news.   &lt;/p&gt;

&lt;p&gt;If you don't, a simple bug after days and days, weeks, months, more people working on the project and you have to solve a huge problem that you could have solved by implementing some tests.&lt;/p&gt;

&lt;h2&gt;
  
  
  More tests, better quality
&lt;/h2&gt;

&lt;p&gt;If you cover a well amount of your Application's modules, you can be pretty confident that you have a well working Software, that means that the quality is better since your double check everything.   &lt;/p&gt;

&lt;p&gt;Another important benefit of testing, is that helps you and other to understand more about x or y function, since you will have a descriptive name that give the reader what are you testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I should start?
&lt;/h2&gt;

&lt;p&gt;I suggest you to follow the Test Driven Development process always abbreviated as TDD;  &lt;/p&gt;

&lt;p&gt;It works like this, first before you write any function that you want to test, you begin by creating the test, yes before even the actual thing that you want to test exist.  &lt;/p&gt;

&lt;p&gt;You write a test for that function with the main goal that you want to achieve in your mind, then you develop the function.  &lt;/p&gt;

&lt;p&gt;Probably you would not expect this point when you follow TDD but it helps you to be more productive!  &lt;/p&gt;

&lt;p&gt;Probably you would not expect this point when you follow TDD but it helps you to be more productive!  &lt;/p&gt;

&lt;h2&gt;
  
  
  More?
&lt;/h2&gt;

&lt;p&gt;There are many types of testing, the one that I've described is defined as Unit Test, there are many types of testing.  &lt;/p&gt;

&lt;p&gt;Unit Testing focuses only on a single unit, as the name suggests, and it doesn't care about the connection of your function with other parts, in which you should follow another type of testing, for example, Integration Testing.  &lt;/p&gt;

&lt;h2&gt;
  
  
  This is it!
&lt;/h2&gt;

&lt;p&gt;I've learned about testing in many sources that I cannot recall now, but one book that I remember for sure is Clean Code...&lt;/p&gt;

&lt;p&gt;I link a referral here, if you prefer the digital version, I suggest you to get a bundle by the author of Clean Code and Clean Coder at a lower price.&lt;/p&gt;

&lt;p&gt;---- US ----&lt;br&gt;
&lt;a href="https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship-dp-0132350882/dp/0132350882?_encoding=UTF8&amp;amp;me=&amp;amp;qid=&amp;amp;linkCode=li3&amp;amp;tag=903509-20&amp;amp;linkId=b91bff47378c47b9085089009e746245&amp;amp;language=en_US&amp;amp;ref_=as_li_ss_il"&gt;&lt;img src="//ws-na.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=0132350882&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=903509-20&amp;amp;language=en_US"&gt;&lt;/a&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vi1-cj5D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ir-na.amazon-adsystem.com/e/ir%3Ft%3D903509-20%26language%3Den_US%26l%3Dli3%26o%3D1%26a%3D0132350882" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vi1-cj5D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ir-na.amazon-adsystem.com/e/ir%3Ft%3D903509-20%26language%3Den_US%26l%3Dli3%26o%3D1%26a%3D0132350882" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.amazon.com/gp/product/B00666M59G?&amp;amp;linkCode=li3&amp;amp;tag=903509-20&amp;amp;linkId=74f8a7c5e57b2adf3fd822bcd8e1ef21&amp;amp;language=en_US&amp;amp;ref_=as_li_ss_il"&gt;&lt;img src="//ws-na.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B00666M59G&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=903509-20&amp;amp;language=en_US"&gt;&lt;/a&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--njXEUoi6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ir-na.amazon-adsystem.com/e/ir%3Ft%3D903509-20%26language%3Den_US%26l%3Dli3%26o%3D1%26a%3DB00666M59G" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--njXEUoi6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ir-na.amazon-adsystem.com/e/ir%3Ft%3D903509-20%26language%3Den_US%26l%3Dli3%26o%3D1%26a%3DB00666M59G" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;---- IT ----&lt;br&gt;
&lt;a href="https://amzn.to/3j2kHd4"&gt;&lt;img src="//ws-na.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=0132350882&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=903509-20&amp;amp;language=en_US"&gt;&lt;/a&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vi1-cj5D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ir-na.amazon-adsystem.com/e/ir%3Ft%3D903509-20%26language%3Den_US%26l%3Dli3%26o%3D1%26a%3D0132350882" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vi1-cj5D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ir-na.amazon-adsystem.com/e/ir%3Ft%3D903509-20%26language%3Den_US%26l%3Dli3%26o%3D1%26a%3D0132350882" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://amzn.to/3ycw3Sl"&gt;&lt;img src="//ws-na.amazon-adsystem.com/widgets/q?_encoding=UTF8&amp;amp;ASIN=B00666M59G&amp;amp;Format=_SL250_&amp;amp;ID=AsinImage&amp;amp;MarketPlace=US&amp;amp;ServiceVersion=20070822&amp;amp;WS=1&amp;amp;tag=903509-20&amp;amp;language=en_US"&gt;&lt;/a&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--njXEUoi6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ir-na.amazon-adsystem.com/e/ir%3Ft%3D903509-20%26language%3Den_US%26l%3Dli3%26o%3D1%26a%3DB00666M59G" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--njXEUoi6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ir-na.amazon-adsystem.com/e/ir%3Ft%3D903509-20%26language%3Den_US%26l%3Dli3%26o%3D1%26a%3DB00666M59G" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Thank you for reading 😀👋
&lt;/h2&gt;

&lt;p&gt;I hope that you enjoyed the content and it was nice to read, inshAllah in the future I want to release a more specific example about testing, with Flutter and Javascript.&lt;/p&gt;

&lt;p&gt;If you want to follow me on other socials here I'have some links...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/channel/UC9FtVivCn-y_YFIxffP-qXQ"&gt;Youtube&lt;/a&gt; &lt;br&gt;
&lt;a href="https://twitter.com/Aspiiire1"&gt;Twitter&lt;/a&gt;&lt;/p&gt;

</description>
      <category>testing</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>flutter</category>
    </item>
    <item>
      <title>Flutter Web SEO problem workaround</title>
      <dc:creator>Aspiiire</dc:creator>
      <pubDate>Tue, 22 Jun 2021 09:34:52 +0000</pubDate>
      <link>https://dev.to/aspiiire/flutter-web-seo-problem-workaround-3a7c</link>
      <guid>https://dev.to/aspiiire/flutter-web-seo-problem-workaround-3a7c</guid>
      <description>&lt;p&gt;Flutter Web has a big problem, you like Flutter but then you get to know that Flutter it is not well optimized and has some problems with &lt;a href="https://priiimo.com/en/computer-science/topics/search-engine-optimization-seo/60c736d4c942f86410e9c4f9"&gt;SEO&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;Check this out! I'll give a few trick to use until, they, if, fix this problem.  &lt;/p&gt;

&lt;h2&gt;
  
  
  So what's the problem?
&lt;/h2&gt;

&lt;p&gt;For Web Flutter use the canvas tag! For those who don't know, the canvas is a tag used for drawing;   &lt;/p&gt;

&lt;p&gt;It is a really powerfull tag, it let you achieve goals that otherwise are not possible, like complex animations, new ways of interacting with data etc...  &lt;/p&gt;

&lt;p&gt;Ways that are not possible with the standard HTML, CSS, JS at all.  &lt;/p&gt;

&lt;p&gt;So what's the problem? seems good right? No bro! The problem is that the Search Engine has not way to understand how your content is made, since it only understands textual content.  &lt;/p&gt;

&lt;h2&gt;
  
  
  No Flutter?
&lt;/h2&gt;

&lt;p&gt;Flutter is a great SDK it saves you a ton of time, so I don't se why you should use it anymore, I mean yes it has this problem, but we can find some workarounds.  &lt;/p&gt;

&lt;p&gt;Before they solve this problem it may take a lot of time, let me tell you how to.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to!
&lt;/h2&gt;

&lt;p&gt;I would say that when you want to develop for the Web you should one take in consideration the project that you want to create!  &lt;/p&gt;

&lt;p&gt;If you want to create an article based Website like &lt;a href="https://priiimo.com/en/"&gt;Priiimo.com&lt;/a&gt; or &lt;a href="https://dev.to/"&gt;This one Dev.to&lt;/a&gt; then you can split your website in 2 parts, the part that will show the articles to serve it with node, php or other ways and the hidden part that needs authorization to do it with Flutter; So all the complex part that, for example, contains the management of users, analytics etc...  &lt;/p&gt;

&lt;p&gt;What do you think? I'll give you another Idea, for example, you can as before use Flutter to create a sort of CMS that will generate HTML pages.  &lt;/p&gt;

&lt;p&gt;In this way your contente will be visible by search engines without problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't do this!!!
&lt;/h2&gt;

&lt;p&gt;You have to be careful when serving content to search engines, one solution that probably you had in your mind was to show a clone content of what's visible on your App in a way or another, BUT....  &lt;/p&gt;

&lt;p&gt;This MAY be a violation of the of Google's guidelines if you are targeting this one; It is called Cloaking.  &lt;/p&gt;

&lt;p&gt;Here you have a &lt;a href="https://developers.google.com/search/docs/advanced/guidelines/cloaking"&gt;link&lt;/a&gt; that explains more about this thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Video?
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/S5O_a-FirgM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>seo</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Javascript Closures the easy way</title>
      <dc:creator>Aspiiire</dc:creator>
      <pubDate>Tue, 15 Jun 2021 16:18:28 +0000</pubDate>
      <link>https://dev.to/aspiiire/javascript-closures-the-easy-way-4hmm</link>
      <guid>https://dev.to/aspiiire/javascript-closures-the-easy-way-4hmm</guid>
      <description>&lt;p&gt;Closures in javascript seems a hard topic as it is portrayed by the majority of people, in this simple explanation i will break it down and show you that in reality it is not.  &lt;/p&gt;

&lt;p&gt;Let's start with a simple well known example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;createCounter&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createCounter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example i firstly have defined a function createCounter that contains a var definition i initialized to 0 then i return an anonymous function.  &lt;/p&gt;

&lt;p&gt;Inside this function i simply increment the value of i.  &lt;/p&gt;

&lt;p&gt;At the end i have defined the variable x that once executed it will contain the returned anonymous function, to clarify it will contain something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I said "something like this" because it will not only contain the function seen before but &lt;strong&gt;it will enclose the i variable&lt;/strong&gt;, what i mean is that this function will have a reference to the outer scope's previously defined i variable.  &lt;/p&gt;

&lt;p&gt;Now... What happens when we execute the x variable? It prints out the value 0, 1, 2, 3.... but the strange thing is that it remembers the state of the i variable and it increments it, well, this feature it's the so called closure.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You have access from your function to the outer scope to a reference of i&lt;/strong&gt;, if you see the definition given in the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures"&gt;Javascript MDN&lt;/a&gt; you will see that fits in perfectly:  &lt;/p&gt;

&lt;h2&gt;
  
  
  Another example
&lt;/h2&gt;

&lt;p&gt;Let's do another example, this time i will add a new little little difference:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;createCounter&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createCounter&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we execute this example you will see that inside the x variable enclosed in you have only the i variable and you can't see the m variable; That means that you have only enclosed the used variables.  &lt;/p&gt;

&lt;p&gt;To try this type &lt;strong&gt;console.dir(x)&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;I hope that in this breaf explanation i have clarified a lot of misconceptions about closures.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/6-Ayw5PHgck"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Design your App or Website now for FREE</title>
      <dc:creator>Aspiiire</dc:creator>
      <pubDate>Mon, 07 Jun 2021 06:39:54 +0000</pubDate>
      <link>https://dev.to/aspiiire/design-your-app-or-website-now-for-free-1i0j</link>
      <guid>https://dev.to/aspiiire/design-your-app-or-website-now-for-free-1i0j</guid>
      <description>&lt;p&gt;You must design your Website or App instead of rushing to programming, this if you value your time and you don't want to waste it!  &lt;/p&gt;

&lt;p&gt;Those apps are really easy and fast to learn, so it will take only a few minutes.  &lt;/p&gt;

&lt;p&gt;Not only you can design you can even prototype and see how it will look line in various devices, you can even try it on a physical device.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff247h6ap4ily105hb38y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff247h6ap4ily105hb38y.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I suggest 2 applications, the ones in the image above:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.figma.com" rel="noopener noreferrer"&gt;Figma&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.adobe.com/products/xd.html" rel="noopener noreferrer"&gt;Adobe Xd&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;BUT, You should take into consideration that... Figma is used in your browser and can be used anywhere, even if you are using Linux, Adobe Xd can be used only by Mac and Windows users.  &lt;/p&gt;

&lt;p&gt;The cool thing about Figma is that now you can open it in any place you want you just need a connection, and a browser, not installations required;  &lt;/p&gt;

&lt;p&gt;If you have an iPad you can open it with an App called figurative, sadly Adobe XD it is not accessible, since the Application present on the IOS store is only used to test the result of your prototype&lt;/p&gt;

&lt;p&gt;Using Adobe XD you must have it installed with the Creative Cloud sync (Place where you have stored all your adobe files) you can get your document from the network.  &lt;/p&gt;

&lt;p&gt;Both offer a Free version, which is perfect to get started.  &lt;/p&gt;

&lt;p&gt;inshAllah we are going to see how to use Figma, don't worry about Adobe XD you can find the same written tutorial at the end!&lt;/p&gt;

&lt;h1&gt;
  
  
  Video or Article?
&lt;/h1&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/9VFh0w_K_Us"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  How to use Figma (Fast easy tutorial)
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7ah332ixcytj3umh1cb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7ah332ixcytj3umh1cb.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After you login, you will see a screen like this one, if you press the upper right part ( Were the arrow is pointing) you can create a new document.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqclaxuukztbyv1srno48.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqclaxuukztbyv1srno48.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now click on "Design File" to create your document.  &lt;/p&gt;

&lt;p&gt;You have just created a new document, you will see this upper menu with all the tools that you need to design your super cool stuff 😁&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzbzeipo12eyxmdkskl9c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzbzeipo12eyxmdkskl9c.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The tools in order are:   &lt;/p&gt;

&lt;p&gt;   -  Selection tool to select objects&lt;br&gt;
   -  Frame tool to create frames&lt;br&gt;
   -  Create shapes or place images&lt;br&gt;
   -  The pen tool to create paths&lt;br&gt;
   -  To create text&lt;br&gt;
   -  To move around, you can click the middle mouse to move around &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy25odi6g3xii46mfjuf1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy25odi6g3xii46mfjuf1.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that you are ready to jump in, let's select the rectangle, so we can draw some stuff.  &lt;/p&gt;

&lt;p&gt;If you click the arrow near the square icon a popup will appear with all the shapes that you can insert, not only this but even images.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyd45i6a6s416ri8sicbi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyd45i6a6s416ri8sicbi.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's create a simple shape, you have to click on the blank space, move your mouse until you create you rectangle then release the mouse click.  &lt;/p&gt;

&lt;p&gt;You can always adjust it at your liking, for more precise misurations you can use the right panel to change the Width near "W" or Height near "H".  &lt;/p&gt;

&lt;p&gt;In the same panel you can change colors by clicking the cyan rectangle.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnv1slifswqgnn0de038g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnv1slifswqgnn0de038g.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now from the panel use the move tool. we want to change our borders radius.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fepw2zrrvtc004exxwavx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fepw2zrrvtc004exxwavx.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Simply drag from the inner dot to start changing the corners. You can do this operation from the right panel too; Near the corner symbol under "H" present in the image, where you can see the value 26.  &lt;/p&gt;

&lt;p&gt;By applying this steps you can play as you wish and easily you can come up with really cool stuff just like the one that you see here, basically now we are ready and done with the first screen.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F94k46pbepych7a6qxuin.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F94k46pbepych7a6qxuin.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's select the rectangle by clicking on the rectangle tool, NOT the arrow since in this way it will open a menu with all shapes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foiuv43ufty41ji1c379n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foiuv43ufty41ji1c379n.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a new simple square; I suggest you to press shift and then create show it will lock the width and height and you'll get a prefect square instead of rectangle.  &lt;/p&gt;

&lt;p&gt;After doing so if you move one of those inner circles you are able to change the box radious, you can do this from the right properties panel too.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk987wnozeu3y1k2q9y9w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk987wnozeu3y1k2q9y9w.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's add a light shadow; From the right panel, near effects, click the plus button e choose dorp shadow as effect, then click the sun icon near the drop down input and tweak your shodow as you wish.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flh7ak7hev6u72hblhevz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flh7ak7hev6u72hblhevz.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It should look like this one, it's barely visible.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk94tohfvvsqky97f0z6u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk94tohfvvsqky97f0z6u.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now press ctrl then drag to the right our circle to clone it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu9vqva865uytepya8kyp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu9vqva865uytepya8kyp.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We want o add some icons to add inside our created boxes. Basically to do so we should first press the right arrow near the shape, you will see a "Place images..." click it and you are ready to go.  &lt;/p&gt;

&lt;p&gt;You can even upload multiple images if you, want or need.  &lt;/p&gt;

&lt;p&gt;In my case I'll upload 2 images.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2v336srd4ar6cd94667.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2v336srd4ar6cd94667.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is how it should look like after moving the images inside our circles!  &lt;/p&gt;

&lt;p&gt;Now let's add a new text box below and.....&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi7rus4pqtjnm3pp2osjh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi7rus4pqtjnm3pp2osjh.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Prototyping
&lt;/h1&gt;

&lt;p&gt;Now we are ready to create our first prototype.   &lt;/p&gt;

&lt;p&gt;Prototypes are used to test your design and to get a feel on how it will look like when ended.  &lt;/p&gt;

&lt;p&gt;You have some basic actions like tap and scroll and you can create multiple connections between pages.  &lt;/p&gt;

&lt;p&gt;You have different preset resolutions, like iPhone X, Samsung Edge etc.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy55jrc5huaa98de488j5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy55jrc5huaa98de488j5.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you should select everything and then frame it so we can use it for the prototyping phase. &lt;/p&gt;

&lt;p&gt;Basically when you frame them you are creating a wrapper for those layers, you can also directly create a frame at the beginning by using the frame tool;   &lt;/p&gt;

&lt;p&gt;I did it now cause I wanted to make thing easy and let you understand things phase by phase, but next time you could start by creating a frame directly.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8n337plttigdhgb6fo63.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8n337plttigdhgb6fo63.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you should see a frame like the one in the image. If you expand it you are able to see all the layers that we have created before.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8h3o16xfcnprflr2pjna.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8h3o16xfcnprflr2pjna.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you have to duplicate your frame so we will have 2 similar screens;  &lt;/p&gt;

&lt;p&gt;Tweak the second frame so that may represent a second phase, a page to transition to, in my example the first image represent a sort of list of images and the second screen the details page.  &lt;/p&gt;

&lt;p&gt;Under the second page we have the previous page button so we can go back if needed.  &lt;/p&gt;

&lt;p&gt;We can make the transitions in the prototype page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9bhoclvzq2eet45frzh2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9bhoclvzq2eet45frzh2.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you are able to prototype, you should go into the prototype tab in the right panel to start.  &lt;/p&gt;

&lt;p&gt;From there you will see bunch of options to help you tweak the settings of your proto.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5g7du8ozuh2782kzi0i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa5g7du8ozuh2782kzi0i.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;If you want you can choose a resolution in witch will be seen the result, or you can set it to default value 'none'.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the resolution doesn't match your screens you can change your frames resolution by clicking on them and tweaking the right panel width and height.  &lt;/p&gt;

&lt;p&gt;When you are ready press the play button at point 2 and you are ready to preview your work   &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8bqa0v4cjarz52zx0p98.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8bqa0v4cjarz52zx0p98.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we can start to create our first connection. Hover over the white wrapper element and you will see a little '+' icon with a circle border.  &lt;/p&gt;

&lt;p&gt;Press is and drag until the next frame of page2 that we have cloned earlier.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flx42e5e9iuwucg8cai68.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flx42e5e9iuwucg8cai68.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will see a new popup that will appear attached to the right panel, you will find all the settings about this specific interaction.  &lt;/p&gt;

&lt;p&gt;The first option is used to choose the type of option that you want to do, for example in our case we want perform the transition action when we "tap", just to clarify more, that means, that when you tap into the box that we have connected previously you will go into the second frame as specified on the other tabs, "Navigate to", "Frame 2".  &lt;/p&gt;

&lt;p&gt;We can change our animation from the default from "instant" to slide in.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuos0r6ra2ludyh0evpo0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuos0r6ra2ludyh0evpo0.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we want to create another interaction that can help us go back to the previous page; Just follow the previous process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F62m61xkv1y9ik4wcglji.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F62m61xkv1y9ik4wcglji.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now by clicking outside you will see all your connections and if you click on one of your connections you will see the previous popup near the right panel for tweaking the Interaction.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F94k6cbqh9q3jo755hl6s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F94k6cbqh9q3jo755hl6s.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's our result if you try it by clicking the play button a new popup will open up and you'll be able to try your prototype, now if you try to click on your first item you will get to the second page.  &lt;/p&gt;

&lt;p&gt;After you are on the second frame, if you click previous page, you'll get back to the first page.  &lt;/p&gt;

&lt;p&gt;That's it, as you have assisted is not difficult and it's really to use.  &lt;/p&gt;

&lt;p&gt;Now we are going to see how to do the same process with Adobe Xd.&lt;/p&gt;

&lt;h1&gt;
  
  
  How to use Adobe Xd (Fast easy tutorial)
&lt;/h1&gt;

&lt;p&gt;Adobe Xd must be installed and can be installed on Windows or Macintosh, documents can be saved with the creative cloud to be retrieved from other places.  &lt;/p&gt;

&lt;p&gt;I prefer Xd over Figma but this is only my opinion; Sadly I have to switch from Linux to Windows every time to work with it.  &lt;/p&gt;

&lt;p&gt;One thing that offers Adobe Xd that is not present on Figma is plugins.  &lt;/p&gt;

&lt;p&gt;Now we are ready, let's begin &lt;br&gt;
😁&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmndt858nz5b2acfpfhcz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmndt858nz5b2acfpfhcz.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the first screen select you preferred size, I would go for the iPhone one but it doesn't matter to me since I want only to show you how to use Adobe Xd.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ma9ymodwc7q2hszrzbl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ma9ymodwc7q2hszrzbl.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the right you will see all the tools that you can use, you have the various Shapes that you can insert, you can use the to create complex results and group them.  &lt;/p&gt;

&lt;p&gt;The line to insert lines, the pen tool to create paths, text tool form text insertion, and at the end the artboards;   &lt;/p&gt;

&lt;p&gt;You should see the artboard as a page, for example for every screen that you have in your app you should create another page.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Friudw7ehwodih6qmpo2k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Friudw7ehwodih6qmpo2k.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We are going to change the resolution, just to adapt it to our liking, you can do the same if you want.  &lt;/p&gt;

&lt;p&gt;For websites you may want a much higher height size.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftw5zrjwttmxt4w6k6kur.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftw5zrjwttmxt4w6k6kur.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The blue dotted bar indicates how much of the viewport will be visible during the preview.  &lt;/p&gt;

&lt;p&gt;If you have for example an article page, you should drag the height of the artboard to make it let's say for example 1000px and the viewport should be the height of the device that you want to take into consideration.  &lt;/p&gt;

&lt;p&gt;During the preview, you can scroll down and up automatically, don't worry about that.  &lt;/p&gt;

&lt;p&gt;Now create a new box inside our artboard by choosing the shape rectangle from the menu.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ficf4ayxbfjwlqtjwpr2c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ficf4ayxbfjwlqtjwpr2c.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the right, you have the tab in which you can change the settings of any object when you click on it.  &lt;/p&gt;

&lt;p&gt;We want to change our background color. To do so, at the bottom of this panel, click the fill box, a new popup will appear.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fosbws6x9glo886tlhua6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fosbws6x9glo886tlhua6.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here you are able to select any color you like. Choose one and let's move to the next step. 😄&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbocow3d8mbm1ozx9md2y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbocow3d8mbm1ozx9md2y.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can change the radius in 2 ways; Hover over the shapes that we have created earlier and you'll see an inner dot near the border, click on it and move it up and down to change the radius.  &lt;/p&gt;

&lt;p&gt;The second way to change the radius is from the right panel.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fae2fqgalofyc19lhv5to.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fae2fqgalofyc19lhv5to.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the tools select the text tool, it's time to create a new text for the title.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1tgih1mj1k8j9rp87fis.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1tgih1mj1k8j9rp87fis.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a simple text and change his fill color to white, we need a little bit of contrast.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F193bor8br3k32l6bhidh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F193bor8br3k32l6bhidh.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's create a new shape for the items, let's create a box, change the radius and fill the color to white.  &lt;/p&gt;

&lt;p&gt;Try to practice without going back and to remember what we have done.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ito78s51fuxhs4kyndu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ito78s51fuxhs4kyndu.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the right panel, we want to add some light shadow.  &lt;/p&gt;

&lt;p&gt;You can change the X and Y axis to change how the shadow will be projected, Blur if you want to change the blur.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnkg7ii1e8ouoex8xogq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnkg7ii1e8ouoex8xogq.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's clone the box that we have just created by pressing the D button and dragging it in the right direction.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg5hzzajc5wkepos4frwt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg5hzzajc5wkepos4frwt.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's add 2 images, or icons to our project by drog-n-drop, you can use this feature from result images too.  &lt;/p&gt;

&lt;p&gt;We want to put this images inside our boxes.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F751tka38i9q8qd4q3p4c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F751tka38i9q8qd4q3p4c.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's use the radius to make the square circle since I think that it'll look better in this way and let's adjust our images to be inside.  &lt;/p&gt;

&lt;p&gt;Select the image with the box behind and click the right mouse button and select 'group' to group them; Do the same thing with the other image.  &lt;/p&gt;

&lt;p&gt;Now you have a group of images if you want to edit it just double click it and you able to change the individual parts.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqrmdf16cbx6ccyave96t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqrmdf16cbx6ccyave96t.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add some text at the bottom.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5mquhsef9dl9u726gkhg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5mquhsef9dl9u726gkhg.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We want to duplicate our artwork so we can create a second page to use when prototyping, to do so you have to press ctrl and drag to the right or any position that you want your screen to be on.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbbp94tzwcru52yd4fu8b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbbp94tzwcru52yd4fu8b.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now tweak it a little bit and you should have a new screen, add a previous page under the title so we later we can create an action to return back to our first screen if needed.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsrj47j4ng1r60a2mj5bb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsrj47j4ng1r60a2mj5bb.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Time for prototyping 😍  &lt;/p&gt;

&lt;p&gt;In the upper left part click the "Prototype" tab to start prototyping.  &lt;/p&gt;

&lt;p&gt;On this page you the elements will respond differently when hovering over them, you are not able to edit them, to do that you should go back to the "Design" tab.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiykuolhr60sumt0nyn56.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiykuolhr60sumt0nyn56.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see when you hover over the "previous page" text you will notice that a little button with an arrow will appear to the right center part, click it and drag until you reach the first screen(Like the next image) to create a connection to the first page.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr4fyvxdpipod45v75ia6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr4fyvxdpipod45v75ia6.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg1f2kk5x8tophjlyib0u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg1f2kk5x8tophjlyib0u.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the right tab, you can change the options about your animation, n our case we want to transition to the home page with a "Slide right" animation.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4io5opblq0ht5nr0pm5c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4io5opblq0ht5nr0pm5c.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do the same operation by creating a new connection from the first element to the second page.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiwvmcbg5e6ongzjkdapz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiwvmcbg5e6ongzjkdapz.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can change the settings for your animation just like before.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2yos9mdp3bmaae059zhz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2yos9mdp3bmaae059zhz.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you are ready and you want to try your application just head to the upper right part and press the play button.  &lt;/p&gt;

&lt;p&gt;You'll see a new window with the screen result.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw7tk2310qjcirlvjguzi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw7tk2310qjcirlvjguzi.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is our final result, if you try to tap on the first screen you'll go to the next page, after clicking previous you'll go back to the first screen  &lt;/p&gt;

&lt;h1&gt;
  
  
  That's it 😊
&lt;/h1&gt;

&lt;p&gt;If you want to see more stuff be sure to check the Youtube video, I've made a the connection of the second page in both tutorials, the one about Figma and Adobe Xd.  &lt;/p&gt;

&lt;p&gt;We can say that the applications are similar, with this examples you are able to choose the one that suits you.&lt;/p&gt;

</description>
      <category>design</category>
      <category>figma</category>
      <category>adobe</category>
    </item>
    <item>
      <title>Error 410, save your Website</title>
      <dc:creator>Aspiiire</dc:creator>
      <pubDate>Wed, 03 Mar 2021 16:07:48 +0000</pubDate>
      <link>https://dev.to/aspiiire/error-410-save-your-website-1klm</link>
      <guid>https://dev.to/aspiiire/error-410-save-your-website-1klm</guid>
      <description>&lt;p&gt;One thing that is really scary about SEO is if Google penalizes our website for some sort of mistake that you do since You don’t want your website to go down and “POOF” vanish. So, I think that you should check this out!&lt;/p&gt;

&lt;h2&gt;
  
  
  Why you should care?
&lt;/h2&gt;

&lt;p&gt;If Google serves a resource to x clients and you suddenly delete this resource that means that google now serves a broken resource; I don’t think that if you had a shop you would ever serve to your client a broken thing!&lt;/p&gt;

&lt;p&gt;That is the main reason why you should care to serve an appropriate code status, since if you leave the status to 404 you telling Google that you have a problem with this page but it will be solved soon.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is 410 Status code Error?
&lt;/h2&gt;

&lt;p&gt;The 410 Gone status code error, indicate that the resource is no more available as stated on the Mozilla resource&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;410 Gone client error response code indicates that access to the target resource is no longer available at the origin server and that this condition is likely to be permanent.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  When to use the 410 Error?
&lt;/h2&gt;

&lt;p&gt;It’s important that if you delete a resource, more importantly, if you have websites that let people insert, edit or delete articles just like  &lt;a href="//dev.to"&gt;dev.to&lt;/a&gt;  or  &lt;a href="//hashnode.com"&gt;hashnode.com&lt;/a&gt;  to send the 410 Error status code.&lt;/p&gt;

&lt;p&gt;Don’t let the page float with the 404 error, it’s more appropriate if you return a 410 error.&lt;/p&gt;

&lt;p&gt;This status must be returned only when you are sure that the resource will not be available anymore.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to not use it?
&lt;/h2&gt;

&lt;p&gt;If the resource is no more available for a limited time then you should use a 404 status&lt;/p&gt;

&lt;p&gt;Thanks for reading 😀👋&lt;/p&gt;

</description>
      <category>webdev</category>
    </item>
    <item>
      <title>Should you learn Flutter in 2021?</title>
      <dc:creator>Aspiiire</dc:creator>
      <pubDate>Fri, 19 Feb 2021 16:35:55 +0000</pubDate>
      <link>https://dev.to/aspiiire/learn-flutter-in-2021-32b8</link>
      <guid>https://dev.to/aspiiire/learn-flutter-in-2021-32b8</guid>
      <description>&lt;p&gt;👋 HEY, so my goal in this article is to reply to some important questions that usually beginners have with Flutter… Should you learn Flutter? should you use it or not? When you should not use it?&lt;/p&gt;

&lt;p&gt;I’m a web developer with 5 or more years of experience, I learned Flutter so I can develop applications for multiple platforms at the same time, BUT… I still make websites with Javascript, Node, HTML, etc…&lt;/p&gt;

&lt;p&gt;In this article, I’ll give you some information about that 😀&lt;/p&gt;

&lt;h1&gt;
  
  
  Prefer the video? 🔥
&lt;/h1&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/MU9dMtxtM58"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Let’s talk about Flutter since it’s a technology that is getting more popular every day.&lt;/p&gt;

&lt;p&gt;The main questions are&lt;/p&gt;

&lt;p&gt;You should learn Flutter? When and Why?&lt;/p&gt;

&lt;h1&gt;
  
  
  Multiple platforms
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq1tf7pa0ozu08xrnj7u5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq1tf7pa0ozu08xrnj7u5.png" alt="Flutter developing for multiple platforms with the same codebase"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to learn a technology that allows you to develop on multiple platforms at the same time then this is for you.&lt;/p&gt;

&lt;p&gt;Flutter allows you to develop with the same codebase on multiple platforms &lt;strong&gt;EVEN THE WEB!!!!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can develop your applications for &lt;strong&gt;Android, IOS, TVs, Web, Windows, Linux. Upcoming FUCSIA!!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As you can see it works with all known technologies of today, using it will allow you to write with the same code and ship it for multiple platforms, this is a HUGE benefit in my opinion!&lt;/p&gt;

&lt;h1&gt;
  
  
  Waste less time!!!
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5smkif6tv5orca995fgo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5smkif6tv5orca995fgo.png" alt="Talking about the hot-reload feature"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to make any change you will not lose time having to build your application but you can see it changed in the same second you save with the &lt;strong&gt;hot reload feature&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The most beautiful thing is that you will not even lose the state; So if you are working on the styling of a button after a popup opens you don’t have to reload every time to see the changes!!&lt;/p&gt;

&lt;p&gt;I have also to add that since you develop for multiple platforms you will have more time free so you can chill out more… Just kidding programmers never chill out, maybe you’ll have more time learning new technologies 😉&lt;/p&gt;

&lt;h1&gt;
  
  
  Flutter is FAST
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fumzlskikwk7eya9nlqs9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fumzlskikwk7eya9nlqs9.png" alt="Fast development with Flutter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m not only referring to the fact that &lt;strong&gt;Flutter runs really fast and smoothly even in older devices!!!!&lt;/strong&gt; (I have tried it and I was impressed how it works soo good 🤯)&lt;/p&gt;

&lt;p&gt;I’m also referring to the fact that with it the development process is really fast compared to all my previous experiences!&lt;/p&gt;

&lt;h1&gt;
  
  
  How feels?
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2bekkdkb8wy0wj0kbad8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2bekkdkb8wy0wj0kbad8.png" alt="Love Flutter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sooo… Working with it is really enjoyable I have always worked with web technologies like Js, Node, Sass and all this cool stuff… but… Flutter was so cool to work with… probably for his different approach with all those widgets.&lt;/p&gt;

&lt;p&gt;I’m not the only one that says that! As I red it’s a known thing, so it isn’t only my personal opinion.&lt;/p&gt;

&lt;h1&gt;
  
  
  But… Here is when you shouldn’t
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv8k7m8q5vkhj684h63xt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv8k7m8q5vkhj684h63xt.png" alt="Don’t use Flutter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is just advice! in my opinion, you shouldn’t use Flutter if you want to create something that requires a deep dive into the device stuff. If you need to do that is better if you go with the native language, you have more open access to the device; Or you can create your own packages that do your wanted feature!&lt;/p&gt;

&lt;p&gt;Since Flutter works with packages that means that you have to use a package that someone wrote in the native language, or you can write it yourself!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But these are only rare cases!!! cause for the majority of people you can work with it absolutely without any problem.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For example, for websites, I still use Node, JS, HTML, CSS etc cause I’m obsessed with SEO, so if you like me want a perfect performing SEO website and you want to stay in control at the minimum level you should think about that, but as I said before usually you can go fine with Flutter!!&lt;/p&gt;

&lt;h1&gt;
  
  
  Flutter is backed and used by Google
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7dmbrms3xel5ykwqc9q7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7dmbrms3xel5ykwqc9q7.png" alt="Flutter is backed by Google"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since Flutter is used by Google that means that they rely on it! and it will not be a lost project, and even the community responded in a positive way.&lt;/p&gt;

&lt;p&gt;It is used even in the Fuchsia project, which means also that Google will always push it and try to improve it!!&lt;/p&gt;

&lt;h1&gt;
  
  
  Yes
&lt;/h1&gt;

&lt;p&gt;That’s it! thanks for reading, let me know what I should improve about my writing or share your opinion about what I have said! In this way we can learn together 👋🔥🔥🔥&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>mobile</category>
      <category>webdev</category>
      <category>news</category>
    </item>
    <item>
      <title>TRICK to level up your HTML?</title>
      <dc:creator>Aspiiire</dc:creator>
      <pubDate>Sat, 16 Jan 2021 15:24:32 +0000</pubDate>
      <link>https://dev.to/aspiiire/wanna-know-the-trick-to-level-up-your-html-1bh5</link>
      <guid>https://dev.to/aspiiire/wanna-know-the-trick-to-level-up-your-html-1bh5</guid>
      <description>&lt;p&gt;If you are lazy or curious you can watch the video version, please consider to subscribe, help me to reach 100 subs :D&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Csb1GaeSnPI"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  Why you should care?
&lt;/h1&gt;

&lt;p&gt;The first times writing HTML it's cool and nice but when you learn it and get used to it starts to be a lot annoying to write every time open tag, close tag and all those brackets!!&lt;/p&gt;

&lt;p&gt;Now I would show you a way that let you &lt;strong&gt;get the same result&lt;/strong&gt; (output) &lt;strong&gt;with less code&lt;/strong&gt;, so you will not have to write the redundant part of HTML but only the essential!&lt;/p&gt;

&lt;h4&gt;
  
  
  THAT'S FANTASTIC (YOU WILL SAVE SO MUCH TIME!)
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1aqdqx8ld25git14w5oz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1aqdqx8ld25git14w5oz.jpg" alt="HTML compared to PUG"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  COME ON!! give us the trick!
&lt;/h1&gt;

&lt;p&gt;I'm talking about PUG, a well known template engine! But now you may ask why i should use it why loosing time... first of all you really don't have to learn something new, let's see the main benefits.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2zrevoqit9fphhug2zwk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F2zrevoqit9fphhug2zwk.jpg" alt="2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Cleaner code
&lt;/h2&gt;

&lt;p&gt;As you can see on the first hand written image the code at the bottom it's a loooooooot cleaner and easy to understand; This applies so much when you have tons and tons of code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Faster Development Time
&lt;/h2&gt;

&lt;p&gt;Insted of loosing time opening and closing brakets repeating tag names you will go a looooot faster (I know snippet exists) but it always better to write .my_class instead of a snippet IMHO :D&lt;/p&gt;

&lt;h2&gt;
  
  
  More Power
&lt;/h2&gt;

&lt;p&gt;Things doesn't end here, with pug you could use all the power of javascript, you could use conditions, loops, mixins, import other pug files, extend layouts and more...&lt;/p&gt;

&lt;h1&gt;
  
  
  Let's try it out
&lt;/h1&gt;

&lt;p&gt;If you want to jump right into it &lt;strong&gt;without wasting even a second you could use &lt;a href="https://codepen.io/" rel="noopener noreferrer"&gt;codepen.io&lt;/a&gt;&lt;/strong&gt;, open the website and you are ready to go!&lt;/p&gt;

&lt;p&gt;On the homepage &lt;em&gt;press the "Start Coding" button&lt;/em&gt; then from the &lt;strong&gt;left cog near HTML click it and on the settings under "HTML Preprocessor" select "Pug"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you want to use SASS like me (since in my opinion they are amazing together) go into the left "CSS" voice on the Pen Settings or click the cog near "CSS" and choose "SASS" as Preprocessor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's test it out :D
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.simple__block
  .simple__title
    h1 This is a title
  .simple__desc
    p This is a description
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Super fast and super easy as you can see ;)&lt;/p&gt;

&lt;p&gt;Time for some SASS code, I absolutely love that to write my sass code &lt;strong&gt;I have only to copy the PUG code and put it inside SASS!!&lt;/strong&gt; 😍️&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sass"&gt;&lt;code&gt;&lt;span class="nc"&gt;.simple__block&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;
  &lt;span class="nc"&gt;.simple__title&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;cyan&lt;/span&gt;
    &lt;span class="nt"&gt;h1&lt;/span&gt;
  &lt;span class="nc"&gt;.simple__desc&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;purple&lt;/span&gt;
    &lt;span class="nt"&gt;p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the codepen version:&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/aspiiire/embed/RwGqbjP?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h1&gt;
  
  
  Time to try it locally
&lt;/h1&gt;

&lt;p&gt;For those who are convinced and want to try it directly into their PC now we are ready to do it. Prepare you terminal.&lt;/p&gt;

&lt;p&gt;To install it &lt;strong&gt;I will use node with express to create a local server&lt;/strong&gt;, but! but... &lt;strong&gt;there are other ways to install it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let's &lt;strong&gt;start by creating a new folder&lt;/strong&gt; that I'll call install-pug, enter it and type &lt;strong&gt;"npm init"&lt;/strong&gt;... follow with the instructions bla bla bla&lt;/p&gt;

&lt;p&gt;We are &lt;strong&gt;ready to install some packages&lt;/strong&gt;... you have many ways for the &lt;strong&gt;instructions to install PUG&lt;/strong&gt; for example &lt;a href="https://www.npmjs.com/package/pug" rel="noopener noreferrer"&gt;nmpJs&lt;/a&gt; or their website &lt;a href="https://pugjs.org/api/getting-started.html" rel="noopener noreferrer"&gt;pugJs&lt;/a&gt; or even &lt;a href="https://github.com/pugjs/pug/tree/master/packages/pug" rel="noopener noreferrer"&gt;github&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;let's copy the install command &lt;strong&gt;"npm i pug --save"&lt;/strong&gt; and throw it inside our terminal press enter and wait.......&lt;/p&gt;

&lt;p&gt;Time to &lt;strong&gt;go inside the &lt;a href="https://expressjs.com/" rel="noopener noreferrer"&gt;ExpressJs&lt;/a&gt; website&lt;/strong&gt; and as before copy up the install command under &lt;strong&gt;"Getting started &amp;gt; Installing"&lt;/strong&gt; copy &lt;strong&gt;"npm i express --save"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As before put it inside your terminal and press "ENTER"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia3.giphy.com%2Fmedia%2F139lMwJ9ow7bKE%2Fgiphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia3.giphy.com%2Fmedia%2F139lMwJ9ow7bKE%2Fgiphy.gif" alt="Gif pressing button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Time to CODE!!!!
&lt;/h1&gt;

&lt;p&gt;To go fast(since this article is not about ExpressJs or node) &lt;strong&gt;Let's copy up this code that i got from the ExpressJS website&lt;/strong&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;view engine&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pug&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello World!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Example app listening at http://localhost:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;port&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;I have added to it a line of code "app.set('view engine', 'pug')"&lt;/strong&gt; that let express know that you want to read PUG files instead of HTML!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open up your project with your editor&lt;/strong&gt;, I'll go with Visual Studio Code!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a new file called "index.js" and paste inside it the code that you have just copied...&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now &lt;strong&gt;run you server by pressing "F5"&lt;/strong&gt; and let's see if everything is running our terminal should log a message with &lt;strong&gt;"Example app listening at &lt;a href="http://localhost:5000" rel="noopener noreferrer"&gt;http://localhost:5000&lt;/a&gt;"&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Open the browser and go into this address &lt;strong&gt;you should see a Hello Word! String&lt;/strong&gt; :D&lt;/p&gt;

&lt;h1&gt;
  
  
  Yeah ready to write pug code
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Create a new file under /views/home.pug&lt;/strong&gt; and write inside it some pug code for example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.simple__block
    .simple__title
        h1= someStuff
    .simple__desc
        p This is a desc       
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Go back into your index.js file and change the 10th line&lt;/strong&gt; from  &lt;strong&gt;"res.send('Hello World')&lt;/strong&gt; into &lt;strong&gt;res.render('home')&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Restart your server&lt;/strong&gt; and you will see that everything works great :D&lt;/p&gt;

&lt;h1&gt;
  
  
  Bonus
&lt;/h1&gt;

&lt;p&gt;You could pass data before you render your PUG file to do that you have to pass an object as second parameter let's see how&lt;/p&gt;

&lt;p&gt;instead of this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;res.render('home')
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;write this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;res.render('home', {
    someStuff: 'Wow thats cool'
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now if you go into your home.pug file and change your p tag&lt;/p&gt;

&lt;p&gt;from this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;p This is a desc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;p= someStuff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart and you will see the magic (This is not a feature of PUG though)&lt;/p&gt;

&lt;h1&gt;
  
  
  Super Mega Bonus
&lt;/h1&gt;

&lt;p&gt;It was long journey man, for me that I had to write all this stuff and for your that you had to read all this!!! (people that jump back and forth are not included 😅️)&lt;/p&gt;

&lt;p&gt;Now let's see a simple example of iteration &lt;/p&gt;

&lt;p&gt;change your last class from this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.simple__desc
    p= someStuff
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.simple__desc
    - 
        const anotherVariable = 'some stuff';
        let i = 0;
    while i &amp;lt; 10
        p This is a desc
        - i++;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Ooook now?
&lt;/h2&gt;

&lt;p&gt;Now with this trick you have saved soooo much time, in the time that you have left maybe you could subscribe on my &lt;a href="https://www.youtube.com/channel/UC9FtVivCn-y_YFIxffP-qXQ" rel="noopener noreferrer"&gt;Youtube channel&lt;/a&gt; since i'm new and looking for subs or maybe not 😅️&lt;/p&gt;

&lt;p&gt;Jokes aside, if you want more tutorials like this let me know so maybe I can write some... or maybe not 🤣️&lt;/p&gt;

</description>
      <category>html</category>
      <category>pug</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Easy way to write FORMS in Flutter</title>
      <dc:creator>Aspiiire</dc:creator>
      <pubDate>Mon, 16 Nov 2020 10:37:02 +0000</pubDate>
      <link>https://dev.to/aspiiire/easy-way-to-write-forms-in-flutter-37ni</link>
      <guid>https://dev.to/aspiiire/easy-way-to-write-forms-in-flutter-37ni</guid>
      <description>&lt;p&gt;Hey guys, today I'll try to explain to you in the most easy way possible how to create forms with Flutter.&lt;/p&gt;

&lt;p&gt;Before we start we need to know....&lt;/p&gt;

&lt;h2&gt;
  
  
  Why we should use forms
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Forms help us in automating the manipulation of our inputs&lt;/strong&gt; For example with only on trick we could validate all our inputs without extracting every single one!&lt;/p&gt;

&lt;h2&gt;
  
  
  But... how forms work?
&lt;/h2&gt;

&lt;p&gt;I will use two important features about the forms, the validate and save methods.&lt;/p&gt;

&lt;p&gt;As I said before about automating, the validate method once called it will validate all our inputs by calling the &lt;strong&gt;validator&lt;/strong&gt; inside each Input.&lt;/p&gt;

&lt;p&gt;The same thing applies for the save method, it will call all the &lt;strong&gt;onSaved&lt;/strong&gt; functions inside each Input.&lt;/p&gt;

&lt;p&gt;It seems obvious but every input must be inside the form Widget.&lt;/p&gt;

&lt;p&gt;I simple summary about what I have just said :D&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4cpi4hu79umkeo3jbmoh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4cpi4hu79umkeo3jbmoh.png" alt="Inputs connected with validate and save"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Time to show something
&lt;/h2&gt;

&lt;p&gt;We start by using our form widget and put inside it all our inputs.&lt;/p&gt;

&lt;p&gt;Forms needs a GlobalKey so we can identify it when needed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:flutter/material.dart'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;runApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;MaterialApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;home:&lt;/span&gt; &lt;span class="n"&gt;Scaffold&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;body:&lt;/span&gt; &lt;span class="n"&gt;MyForm&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
      &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyForm&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StatefulWidget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;_MyFormState&lt;/span&gt; &lt;span class="n"&gt;createState&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_MyFormState&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;_MyFormState&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;State&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;MyForm&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;_keyForm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GlobalKey&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;FormState&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Our created key&lt;/span&gt;

  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BuildContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="c1"&gt;// The form widget&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;key:&lt;/span&gt; &lt;span class="n"&gt;_keyForm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's time to create the fields that we want to add to our cool form!&lt;/p&gt;

&lt;p&gt;Let's suppose that we want 3 fields...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;name&lt;/li&gt;
&lt;li&gt;password&lt;/li&gt;
&lt;li&gt;email&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To add these field we will use a simple widgets that will provide us with the basic graphics of the material design, this widget is called TextFormField.&lt;/p&gt;

&lt;p&gt;The field that will contain our password will have an extra property "obscureText" to show the black dotted chars instead of the actual visible password. 😉️&lt;/p&gt;

&lt;p&gt;Only for style purpose we add a hint text so the user knows what to insert in that field 😁️&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;_MyFormState&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;State&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;MyForm&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;_keyForm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GlobalKey&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;FormState&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TextEditingController&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;_password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TextEditingController&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;_email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TextEditingController&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BuildContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;key:&lt;/span&gt; &lt;span class="n"&gt;_keyForm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Padding&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;padding:&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;EdgeInsets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;ListView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="n"&gt;Container&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
              &lt;span class="nl"&gt;padding:&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;EdgeInsets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;symmetric&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;vertical:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
              &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Some inputs...'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="p"&gt;),&lt;/span&gt;            
            &lt;span class="n"&gt;TextFormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
              &lt;span class="nl"&gt;controller:&lt;/span&gt; &lt;span class="n"&gt;_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="nl"&gt;decoration:&lt;/span&gt; &lt;span class="n"&gt;InputDecoration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;hintText:&lt;/span&gt; &lt;span class="s"&gt;'Insert your name.'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;TextFormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
              &lt;span class="nl"&gt;controller:&lt;/span&gt; &lt;span class="n"&gt;_password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="nl"&gt;obscureText:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="nl"&gt;decoration:&lt;/span&gt; &lt;span class="n"&gt;InputDecoration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;hintText:&lt;/span&gt; &lt;span class="s"&gt;'The password to log in.'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;TextFormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
              &lt;span class="nl"&gt;controller:&lt;/span&gt; &lt;span class="n"&gt;_email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="nl"&gt;decoration:&lt;/span&gt; &lt;span class="n"&gt;InputDecoration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;hintText:&lt;/span&gt; &lt;span class="s"&gt;'E-mail to use for log in.'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="p"&gt;),&lt;/span&gt;
          &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Wait.. User class?
&lt;/h2&gt;

&lt;p&gt;We will create a simple user class only for the purpose to show how we can save our user his properties are not final... 😵️&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="n"&gt;User&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;email&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Now it's time to validate and save
&lt;/h2&gt;

&lt;p&gt;Now it's time to add the famous &lt;strong&gt;validator&lt;/strong&gt; and &lt;strong&gt;onSaved&lt;/strong&gt; explained at the beginning&lt;/p&gt;

&lt;p&gt;Now it'll look like this..... 👇🏻️&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nl"&gt;key:&lt;/span&gt; &lt;span class="n"&gt;_keyForm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Padding&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nl"&gt;padding:&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;EdgeInsets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;ListView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="n"&gt;Container&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="nl"&gt;padding:&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;EdgeInsets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;symmetric&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;vertical:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
          &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Some inputs...'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;TextFormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="nl"&gt;controller:&lt;/span&gt; &lt;span class="n"&gt;_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nl"&gt;decoration:&lt;/span&gt; &lt;span class="n"&gt;InputDecoration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;hintText:&lt;/span&gt; &lt;span class="s"&gt;'Insert your name.'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
          &lt;span class="nl"&gt;validator:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;isEmpty&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;'You have to insert a name'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="p"&gt;},&lt;/span&gt;
          &lt;span class="nl"&gt;onSaved:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;newValue&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_newUser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;TextFormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="nl"&gt;controller:&lt;/span&gt; &lt;span class="n"&gt;_password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nl"&gt;obscureText:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nl"&gt;decoration:&lt;/span&gt; &lt;span class="n"&gt;InputDecoration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;hintText:&lt;/span&gt; &lt;span class="s"&gt;'The password to log in.'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
          &lt;span class="nl"&gt;validator:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
              &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;'Password must have at least 6 chars.'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="p"&gt;},&lt;/span&gt;
          &lt;span class="nl"&gt;onSaved:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;newValue&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_newUser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="n"&gt;TextFormField&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="nl"&gt;controller:&lt;/span&gt; &lt;span class="n"&gt;_email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nl"&gt;decoration:&lt;/span&gt;
              &lt;span class="n"&gt;InputDecoration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;hintText:&lt;/span&gt; &lt;span class="s"&gt;'E-mail to use for log in.'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
          &lt;span class="nl"&gt;validator:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;contains&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'@gmail.com'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
              &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;'Only gmail emails allowed.'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
          &lt;span class="p"&gt;},&lt;/span&gt;
          &lt;span class="nl"&gt;onSaved:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;newValue&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_newUser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;newValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you saw in the first image now when i will call the .validate() method it will call all the validators inside all our inputs and when i will call the .onSaved() method it'll do the same thing for the onSaved functions.&lt;/p&gt;

&lt;p&gt;Now the last step is to add a button 'SAVE' that will call our function so we can execute those methods.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;_saveForm&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_keyForm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;currentState&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;()){&lt;/span&gt;

      &lt;span class="n"&gt;_keyForm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;currentState&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;save&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

      &lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_newUser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BuildContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;key:&lt;/span&gt; &lt;span class="n"&gt;_keyForm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Padding&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;padding:&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;EdgeInsets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;ListView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="n"&gt;Container&lt;/span&gt;&lt;span class="p"&gt;(...),&lt;/span&gt;
            &lt;span class="n"&gt;TextFormField&lt;/span&gt;&lt;span class="p"&gt;(...),&lt;/span&gt;
            &lt;span class="n"&gt;TextFormField&lt;/span&gt;&lt;span class="p"&gt;(...),&lt;/span&gt;
            &lt;span class="n"&gt;TextFormField&lt;/span&gt;&lt;span class="p"&gt;(...),&lt;/span&gt;
            &lt;span class="n"&gt;RaisedButton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
              &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'SAVE'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
              &lt;span class="nl"&gt;onPressed:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;_saveForm&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
              &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
          &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Time to test 😃️
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fu4tsqwwjapzaax8jkoqs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fu4tsqwwjapzaax8jkoqs.png" alt="running _keyForm.currentState.validate() with wrong values."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The only thing that we have to do now is to click into the "SAVE" button.&lt;/p&gt;

&lt;p&gt;The save button will call the _saveForm() function where...&lt;/p&gt;

&lt;p&gt;We will check if _keyForm.currentState.validate() gives back true. In this case it's not since one or more of them are wrong.&lt;/p&gt;

&lt;p&gt;As you can see it's working well, it shows the related errors if we are not in line with the validator.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fswi9zxmu9391krz0ddmm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fswi9zxmu9391krz0ddmm.png" alt="Running _keyForm.currentState.save()"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But... if the validate check gives us true we will enter the if statement and run currentState.save() that will run the save function inside all our inputs.&lt;/p&gt;

&lt;p&gt;After that when we will print _newUser.name we will get the updated Instance.&lt;/p&gt;

&lt;p&gt;As you can see in the image in the right it's all working fine!&lt;/p&gt;

&lt;h2&gt;
  
  
  time to say goodbye
&lt;/h2&gt;

&lt;p&gt;I hope that you enjoyed this article :D&lt;/p&gt;

&lt;p&gt;If you think that I have to made other articles like this one let me know in the comment section.&lt;/p&gt;

&lt;p&gt;If you think that I have said some wrong stuff let me know so i can improve my skills.&lt;/p&gt;

&lt;p&gt;Thank you so much for you time, and keep learning stay positive with your attitudes.&lt;/p&gt;

&lt;p&gt;If you are interest we make youtube video and articles consider to subscribe for more things like that, se you next time!&lt;/p&gt;

&lt;p&gt;Bye 👋️&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>dart</category>
    </item>
    <item>
      <title>STOP writing CSS, 10 reasons why</title>
      <dc:creator>Aspiiire</dc:creator>
      <pubDate>Mon, 26 Oct 2020 15:10:58 +0000</pubDate>
      <link>https://dev.to/aspiiire/10-reasons-why-you-should-stop-writing-css-203c</link>
      <guid>https://dev.to/aspiiire/10-reasons-why-you-should-stop-writing-css-203c</guid>
      <description>&lt;h2&gt;
  
  
  Prefer video?
&lt;/h2&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/rlLI_ndLbRo"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;In this brief article a want to give you some reasons why you should stop writing CSS and start writing SASS.&lt;/p&gt;

&lt;p&gt;At the end the output is the same a cool and well minified .css file.&lt;/p&gt;

&lt;p&gt;The order of the list isn't important!&lt;/p&gt;

&lt;h2&gt;
  
  
  10 ~ Syntax
&lt;/h2&gt;

&lt;p&gt;When you write SASS code you will see the difference instantly when you see that the code is a lot cleaner without brackets and semicolons, that matters here are tabs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9jt680548133x4i5n1sr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9jt680548133x4i5n1sr.jpg" alt="Syntax of css compared with sass"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you write nested selectors you will have an easier time watch this 😁️&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9vfp1tz7ah0c32i4egsk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9vfp1tz7ah0c32i4egsk.jpg" alt="Clean parent to selector sass compared to css"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  9 ~ Variables
&lt;/h2&gt;

&lt;p&gt;That thing was really needed in CSS... the use of variables that will help you a lot to manage your code and even for future refactoring.&lt;/p&gt;

&lt;p&gt;For example you can create a palette.sass file and store all your colors and then call that variable inside your buttons or divs...&lt;/p&gt;

&lt;p&gt;The most beautiful thing in my opinion is that just changing one line of code (where you have defined the color variable) you can change the color of your entire application.&lt;/p&gt;

&lt;p&gt;Take a look here 👇&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fr4450j2efcmk4hzqse79.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fr4450j2efcmk4hzqse79.jpg" alt="Variables in sass compared to css"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  8 ~ Mixins
&lt;/h2&gt;

&lt;p&gt;Really cool stuff, mixins help you to define reusable portions of code, you can think of them like functions, you can pass a parameter and get back you block dynamically written&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fn86lwihom0mldx94y7zy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fn86lwihom0mldx94y7zy.jpg" alt="Mixins in sass"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  7 ~ Functions
&lt;/h2&gt;

&lt;p&gt;mmm.. yes mixins and functions are really similar... but, but with functions you can return something with mixins you have only a predefined block of code&lt;/p&gt;

&lt;h2&gt;
  
  
  6 ~ Imports
&lt;/h2&gt;

&lt;p&gt;Instead of having a super big main.css file with 200000 lines of code split by strange ### signs with titles or worst stuff you could import and export you sass files.&lt;/p&gt;

&lt;p&gt;It is not the same thing as the link rel thing cause when you do that you are making an HTTP request :D&lt;/p&gt;

&lt;p&gt;You will have a beautiful structure of your code for example with&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;header.sass&lt;/li&gt;
&lt;li&gt;menu.sass

&lt;ul&gt;
&lt;li&gt;profile_image.sass&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;footer.sass&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;You can even import CSS files!!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fnjre0nc5x7p66msvgpfv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fnjre0nc5x7p66msvgpfv.jpg" alt="The use of imports in sass"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5 ~ Maths
&lt;/h2&gt;

&lt;p&gt;With sass you can do pretty any operation you want, that was a big limitation with only css, now no more!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fydr64asmqgk53gnfzxud.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fydr64asmqgk53gnfzxud.jpg" alt="Math operations with css"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4 ~ Logic
&lt;/h2&gt;

&lt;p&gt;Another thing missing in CSS is the logic, with SASS you have the possibility to use if statements, for while.&lt;/p&gt;

&lt;p&gt;That will help you to write less code with more ease.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fncfskn3h6nvu8evbbem5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fncfskn3h6nvu8evbbem5.jpg" alt="Example of is statement with sass"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3 ~ Clean and easy to read code
&lt;/h2&gt;

&lt;p&gt;Maybe i have said it a lot of times but really, with SASS you will see a beautiful code.&lt;/p&gt;

&lt;p&gt;Using the combination of mixins imports variables no way that is like css, you code will be really clear to understand.&lt;/p&gt;

&lt;p&gt;The only fact that you have different files that contains different parts of you code it will help you when you want to change something in the future.&lt;/p&gt;

&lt;p&gt;For example image that you want to change the main color with css... or the font family&lt;/p&gt;

&lt;h2&gt;
  
  
  2 ~ Faster development
&lt;/h2&gt;

&lt;p&gt;Clean code means fast development, one of the things that IMHO slowed me a lot was semicolons, and another thing... semicolons, i really hated semicolons...&lt;/p&gt;

&lt;p&gt;You can use mixins without having to repeat over and over parts of code respecting the dry principle.&lt;/p&gt;

&lt;h2&gt;
  
  
  1 ~ Production ready
&lt;/h2&gt;

&lt;p&gt;You will get as output a clean css file the way that you want, if you want multiple css files is up to you.&lt;/p&gt;

&lt;p&gt;You CSS will be minimized and ready to be imported...&lt;/p&gt;

&lt;h2&gt;
  
  
  That's it
&lt;/h2&gt;

&lt;p&gt;I hope that you enjoyed this article, it is my first article, i hope that that stuff my help someone and thanks for reading... &lt;/p&gt;

&lt;p&gt;Let me know if you want to know how to install SASS with a youtube video or things like that...&lt;/p&gt;

&lt;p&gt;If you enjoyed my style check out my new &lt;a href="https://www.youtube.com/channel/UC9FtVivCn-y_YFIxffP-qXQ" rel="noopener noreferrer"&gt;Youtube Channel&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Thank you for your time, have a good day 👋😁&lt;/p&gt;

</description>
      <category>css</category>
      <category>webdev</category>
      <category>design</category>
      <category>html</category>
    </item>
  </channel>
</rss>
