<?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: Darshan Rander</title>
    <description>The latest articles on DEV Community by Darshan Rander (@siruswrites).</description>
    <link>https://dev.to/siruswrites</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%2F513118%2Feaf8f41d-51e3-48c8-bd4d-a942d5837a25.jpeg</url>
      <title>DEV Community: Darshan Rander</title>
      <link>https://dev.to/siruswrites</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/siruswrites"/>
    <language>en</language>
    <item>
      <title>Serverside Dart</title>
      <dc:creator>Darshan Rander</dc:creator>
      <pubDate>Thu, 17 Nov 2022 14:17:37 +0000</pubDate>
      <link>https://dev.to/siruswrites/serverside-dart-5e0k</link>
      <guid>https://dev.to/siruswrites/serverside-dart-5e0k</guid>
      <description>&lt;p&gt;Hey everyone!&lt;/p&gt;

&lt;p&gt;Some of you might be thinking "What is Dart?" - it is a strongly typed, object-oriented programming language developed by Google.&lt;/p&gt;

&lt;p&gt;A lot of you might be confused if you can use Dart for the backend - Yes, you can write a backend server in almost all languages.&lt;/p&gt;

&lt;p&gt;In this blog, I will talk about the benchmarks of &lt;a href="https://flask.palletsprojects.com/en/2.2.x/"&gt;Flask (Python)&lt;/a&gt;, &lt;a href="https://expressjs.com/"&gt;Express (JavaScript)&lt;/a&gt;, &lt;a href="https://pub.dev/packages/shelf"&gt;Shelf (Dart)&lt;/a&gt;, &lt;a href="https://dartfrog.vgv.dev/"&gt;dart_frog (Dart)&lt;/a&gt; and &lt;a href="https://j4qfrost.gitbook.io/conduit/"&gt;Conduit (Dart)&lt;/a&gt;, and my opinions on Dart on the server side.&lt;/p&gt;

&lt;h1&gt;
  
  
  Benchmarks
&lt;/h1&gt;

&lt;p&gt;The code for the benchmarks is at &lt;a href="https://github.com/SirusCodes/backend_benchmark"&gt;SirusCodes/backend_benchmark&lt;/a&gt;. Please &lt;a href="https://github.com/SirusCodes/backend_benchmark/issues/new"&gt;open&lt;/a&gt; an &lt;a href="https://github.com/SirusCodes/backend_benchmark/issues/new"&gt;issue&lt;/a&gt; if you find any issues in the benchmarks.&lt;/p&gt;

&lt;p&gt;I got the below results by running the benchmark and servers on an AWS t3a.small instance running Ubuntu 22.&lt;/p&gt;

&lt;p&gt;The benchmarks are testing backends on 4 bases&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Synchronous request handling&lt;/li&gt;
&lt;li&gt;Asynchronous request handling&lt;/li&gt;
&lt;li&gt;Multi-part requests (File upload)&lt;/li&gt;
&lt;li&gt;JSON parsing&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Lesser means better&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Synchronous request handling
&lt;/h2&gt;

&lt;p&gt;In this, the client sends a request to the server then waits for the response and then sends another.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VZBONXHU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l9k63tz9aouaw7yd02ko.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VZBONXHU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l9k63tz9aouaw7yd02ko.png" alt="Synchronous request handling graph" width="650" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The lowest time taken was by Shelf which is still comparable with other frameworks&lt;/p&gt;

&lt;h2&gt;
  
  
  Asynchronous request handling
&lt;/h2&gt;

&lt;p&gt;In this multiple requests are sent to the server and waits for all the responses back from the server.&lt;/p&gt;

&lt;h3&gt;
  
  
  GET requests
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--43kTTI-I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kbcyokwikiscfdzh1c5p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--43kTTI-I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kbcyokwikiscfdzh1c5p.png" alt="GET Asynchronous request handling graph" width="650" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The fastest one was ExpressJS but again with not a great margin.&lt;/p&gt;

&lt;h3&gt;
  
  
  POST requests
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VrN4wSZ0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p5dne0pdd7ineglyzsn3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VrN4wSZ0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p5dne0pdd7ineglyzsn3.png" alt="POST Asynchronous request handling graph" width="650" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here Flask is the fastest and Dart servers perform a bit slower and conduit is the slowest of all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-part requests (File upload)
&lt;/h2&gt;

&lt;p&gt;The multipart requests are usually made to upload images to a server. In this, I'm sending requests synchronously.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7kB9-DDm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ubvljb7dgj18ltevwq6l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7kB9-DDm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ubvljb7dgj18ltevwq6l.png" alt="Multi-part requests (File upload) graph" width="650" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Dart servers are handling it very slowly. Flask and ExpressJS are killing it.&lt;/p&gt;

&lt;p&gt;dart_frog doesn't support it yet, you can track the progress at &lt;a href="https://github.com/VeryGoodOpenSource/dart_frog/issues/296"&gt;dart_frog#296&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The Shelf also doesn't provide out-of-the-box support for it but I have used &lt;a href="https://pub.dev/packages/shelf_multipart"&gt;shelf_multipart&lt;/a&gt; (a 3rd party package) to handle requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  JSON parsing
&lt;/h2&gt;

&lt;p&gt;In this, I'm stress testing the speed of JSON parsing by frameworks. By sending 1.04MB of JSON data over POST request synchronously.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9e1N1Bdh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xbae0y09k417efvp8szr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9e1N1Bdh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xbae0y09k417efvp8szr.png" alt="JSON parsing graph" width="650" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Again you can see Flask and express are twice as fast as Dart frameworks.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In real world no one will be sending such huge chunks of JSON over the network but these are just for benchmark sake&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;By looking at the benchmarks we can say Dart servers have similar speeds when compared to other frameworks but there is a scope for improvement in multipart requests and in parsing high volumes of JSON data.&lt;/p&gt;

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

&lt;p&gt;These Dart frameworks are pretty new and got some traction in recent years. They will grow and will be much better than now but it will take time.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Frameworks&lt;/th&gt;
&lt;th&gt;Release&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Flask&lt;/td&gt;
&lt;td&gt;April 2010&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Express&lt;/td&gt;
&lt;td&gt;November 2010&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shelf&lt;/td&gt;
&lt;td&gt;April 2014&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dart_frog&lt;/td&gt;
&lt;td&gt;May 2022&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;conduit&lt;/td&gt;
&lt;td&gt;April 2021&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;As you can see above these Dart frameworks competing with the grand old daddies of backend frameworks and still performing decent is a win for me.&lt;/p&gt;

&lt;p&gt;Sure currently they are not the best but with time they will surely improve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should you give Dart a try?
&lt;/h2&gt;

&lt;p&gt;Absolutely Yes! Dart is a simple language with a very smooth learning curve.&lt;/p&gt;

&lt;p&gt;If you like challenges then exploring the serverside of Dart will provide you with enough challenges as it's new and you will learn a lot along the way. I would recommend you use &lt;a href="https://pub.dev/packages/shelf"&gt;shelf&lt;/a&gt; as it least abstracted framework of all.&lt;/p&gt;

&lt;p&gt;It can be a good side project for you if you are already using Dart for Flutter then you can easily start building without any other dependencies.&lt;/p&gt;

&lt;p&gt;Also, it can bring your Backend and Frontend (Flutter) in the same language.&lt;/p&gt;

&lt;p&gt;The development in the Dart server space is very active. While developing for benchmarks I found a small &lt;a href="https://github.com/VeryGoodOpenSource/dart_frog/issues/409"&gt;issue&lt;/a&gt; with dart_frog which got &lt;a href="https://github.com/VeryGoodOpenSource/dart_frog/pull/411/"&gt;fixed&lt;/a&gt; in &lt;strong&gt;a day&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  My opinions
&lt;/h1&gt;

&lt;h2&gt;
  
  
  What am I interested in?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="//serverpod.dev"&gt;Serverpod&lt;/a&gt; looks interesting as well. I liked the idea of having a lot of integration out of the box. &lt;em&gt;I tried to build it but it doesn't support windows yet🥲&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://dartfrog.vgv.dev/docs/roadmap"&gt;roadmap&lt;/a&gt; of dart_frog is pretty interesting. I'm looking forward to the client generation which is also supported by Serverpod.&lt;/p&gt;

&lt;h2&gt;
  
  
  Production?
&lt;/h2&gt;

&lt;p&gt;If you are trying to get something up and running quickly then I don't feel Dart is a good option here. As currently there are not easy cloud integrations and not so many resources to help you with any issues you face.&lt;/p&gt;

&lt;p&gt;If it's a small side project with an expected user base of thousands then go ahead with Dart.&lt;/p&gt;

&lt;h1&gt;
  
  
  Final words
&lt;/h1&gt;

&lt;p&gt;Dart backend might not be the best option for production applications now but it’s a to thing keep an eye at.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;All the above charts are made with &lt;a href="https://copyicon.com/"&gt;copyicon.com&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>dart</category>
      <category>backend</category>
      <category>benchmarks</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Stocker - An Inventory Sales management app made using Flutter and Appwrite</title>
      <dc:creator>Darshan Rander</dc:creator>
      <pubDate>Thu, 12 May 2022 20:35:27 +0000</pubDate>
      <link>https://dev.to/siruswrites/stocker-an-inventory-and-crm-app-made-using-flutter-and-appwrite-m65</link>
      <guid>https://dev.to/siruswrites/stocker-an-inventory-and-crm-app-made-using-flutter-and-appwrite-m65</guid>
      <description>&lt;h3&gt;
  
  
  Overview of My Submission
&lt;/h3&gt;

&lt;p&gt;The inspiration for this app comes from my uncle. He owns a store and managing inventory for him was becoming more and more difficult for him. So he asked me to build an app for him but initially I couldn't find motivation to work on it. But this hackathon helped me to give the motivation and work on the project.&lt;/p&gt;

&lt;p&gt;So the major goal of this project is to manage inventory and sales of the products.&lt;br&gt;
All the products are divided into categories for better segregation.&lt;br&gt;
Also the app takes customer info like name, email and number so we can send invoices to them(sending of invoices is not completed at the time of writing the post)&lt;br&gt;&lt;br&gt;
The app is made with the latest Google's Material You themed widgets.&lt;/p&gt;
&lt;h3&gt;
  
  
  Submission Category:
&lt;/h3&gt;

&lt;p&gt;Mobile Moguls&lt;/p&gt;
&lt;h3&gt;
  
  
  Link to Code
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/SirusCodes"&gt;
        SirusCodes
      &lt;/a&gt; / &lt;a href="https://github.com/SirusCodes/stocker"&gt;
        stocker
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
Stocker&lt;/h1&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SirusCodes/stocker/mockups/stocker%20thumb.webp"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---klkVIY2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/SirusCodes/stocker/mockups/stocker%2520thumb.webp" alt="Stocker banner"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It is an inventory and sales management app made using &lt;a href="https://github.com/SirusCodes/stockerflutter.dev"&gt;Flutter&lt;/a&gt; and &lt;a href="https://github.com/SirusCodes/stockerappwrite.io"&gt;Appwrite&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This project is made for &lt;a href="https://dev.to/devteam/announcing-the-appwrite-hackathon-on-dev-1oc0" rel="nofollow"&gt;#appwritehack&lt;/a&gt; submitted at &lt;a href="https://dev.to/siruswrites/stocker-an-inventory-and-crm-app-made-using-flutter-and-appwrite-m65" rel="nofollow"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
Video&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=PQvL0BjCfLA" rel="nofollow"&gt;&lt;img src="https://camo.githubusercontent.com/7d7235fcd312e141a7ec805641c5b9ca77b5a78c42c30355632d3e6d7ffcbcf6/68747470733a2f2f696d672e796f75747562652e636f6d2f76692f5051764c30426a43664c412f302e6a7067" alt="Stocker - An Inventory and CRM app made using Flutter and Appwrite"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
Screenshots&lt;/h2&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SirusCodes/stocker/mockups/home.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EKf5zrER--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/SirusCodes/stocker/mockups/home.png" alt="Home page"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SirusCodes/stocker/mockups/home-light.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vLTyBQ0u--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/SirusCodes/stocker/mockups/home-light.png" alt="Home page (light mode)"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SirusCodes/stocker/mockups/overall-search.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dp3O0BAx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/SirusCodes/stocker/mockups/overall-search.png" alt="Overall search"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Home page which lists categories&lt;/td&gt;
&lt;td&gt;Home page in light theme&lt;/td&gt;
&lt;td&gt;Search page where you can search for products irrespective of categories&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SirusCodes/stocker/mockups/stats.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Z9dTCiKP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/SirusCodes/stocker/mockups/stats.png" alt="Stats section"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SirusCodes/stocker/mockups/more-section.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ygRlrTyk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/SirusCodes/stocker/mockups/more-section.png" alt="More section"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SirusCodes/stocker/mockups/profile.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xx3hlCWk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/SirusCodes/stocker/mockups/profile.png" alt="Profile page"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shows stats about your sales and profits&lt;/td&gt;
&lt;td&gt;More options for app&lt;/td&gt;
&lt;td&gt;User profile to change password&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SirusCodes/stocker/mockups/transaction-history.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8EItP1I8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/SirusCodes/stocker/mockups/transaction-history.png" alt="Transaction history"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SirusCodes/stocker/mockups/add-category.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---yWGYlra--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/SirusCodes/stocker/mockups/add-category.png" alt="Add category"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SirusCodes/stocker/mockups/category-color-picker.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--m6qiiTlc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/SirusCodes/stocker/mockups/category-color-picker.png" alt="Color picker in category"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transaction history with option to filter by all, buy or sell&lt;/td&gt;
&lt;td&gt;Page to add new categories&lt;/td&gt;
&lt;td&gt;Color picker to pick a color for category&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SirusCodes/stocker/mockups/add-product.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_Qyyqt9d--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/SirusCodes/stocker/mockups/add-product.png" alt="Add product"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SirusCodes/stocker/mockups/products-sort.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_Ur8gndS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/SirusCodes/stocker/mockups/products-sort.png" alt="Sort in product"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SirusCodes/stocker/mockups/add-to-cart.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fGfCU_C9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/SirusCodes/stocker/mockups/add-to-cart.png" alt="Adding product in cart"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Page to add new products&lt;/td&gt;
&lt;td&gt;Product and categories can be sorted alphabetically&lt;/td&gt;
&lt;td&gt;Add product in cart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SirusCodes/stocker/mockups/cart-icon.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F4-lLoPl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/SirusCodes/stocker/mockups/cart-icon.png" alt="Cart Icon"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SirusCodes/stocker/mockups/cart-customer-data.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cFCqDYma--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/SirusCodes/stocker/mockups/cart-customer-data.png" alt="Checkout page"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SirusCodes/stocker/mockups/customer-autofill.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2z8b-mZ---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/SirusCodes/stocker/mockups/customer-autofill.png" alt="Auto-filled information"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Once a product is created a floating action will be present on all screens to move for checkout&lt;/td&gt;
&lt;td&gt;Checkout page&lt;/td&gt;
&lt;td&gt;Other details will be auto-filled as soon as you selects a phone number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/SirusCodes/stocker/mockups/discount.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tEVXS7Hd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/SirusCodes/stocker/mockups/discount.png" alt="Discount"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;

&lt;td&gt;You can either add discount by percentage or a specific amount by clicking&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/SirusCodes/stocker"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Additional Resources / Info
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Video
&lt;/h4&gt;

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

&lt;h4&gt;
  
  
  Screenshots
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BEuckFb9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lti6ayj8ukotfq1be0ko.png" alt="Home page" width="880" height="1629"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1mmvyiAq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fw4q623mqeprtpn5v3yk.png" alt="Home page (light mode)" width="880" height="1629"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oKGEmJcz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vpnznp38l6vswy6jr3m8.png" alt="Overall search" width="880" height="1629"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Home page which lists categories&lt;/td&gt;
&lt;td&gt;Home page in light theme&lt;/td&gt;
&lt;td&gt;Search page where you can search for products irrespective of categories&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--35nNUWQf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ec1d4wbjwiv3k978accj.png" alt="Stats section" width="880" height="1629"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2IXB2tZX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l0n5h9tf3s4iq0s24qrd.png" alt="More section" width="880" height="1629"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OytK2Zas--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c5ab89cfriaqml3ejayx.png" alt="Profile page" width="880" height="1629"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shows stats about your sales and profits&lt;/td&gt;
&lt;td&gt;More options for app&lt;/td&gt;
&lt;td&gt;User profile to change password&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HTAU5CZl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fo1l4xp4u2h1km9hpdsm.png" alt="Transaction history" width="880" height="1629"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iXFlxj-0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pzy7j0hhyjceqm92lg7j.png" alt="Add category" width="880" height="1629"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l4firG3Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9nlmhylohc148see9dl3.png" alt="Color picker in category" width="880" height="1629"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transaction history with option to filter by all, buy or sell&lt;/td&gt;
&lt;td&gt;Page to add new categories&lt;/td&gt;
&lt;td&gt;Color picker to pick a color for category&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--42b5ev6L--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yduo9vmh38k8h8v86e2z.png" alt="Add product" width="880" height="1629"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7jXO5_n0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jcvzw1eeqe40j5qkxwqq.png" alt="Sort in product" width="880" height="1629"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n5TjYika--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wrkcgtc92xl9by7wjeyv.png" alt="Adding product in cart" width="880" height="1629"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Page to add new products&lt;/td&gt;
&lt;td&gt;Product and categories can be sorted alphabetically&lt;/td&gt;
&lt;td&gt;Add product in cart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mIWWhKBo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eocyrdyl17gubzfpl41q.png" alt="Cart Icon" width="880" height="1629"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PZLuFFBa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pto73wvsoazkdr46fnk4.png" alt="Checkout page" width="880" height="1629"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LtZ9YP3X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lhz2dgvfjfl31tr4ry4p.png" alt="Auto-filled information" width="880" height="1629"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Once a product is created a floating action will be present on all screens to move for checkout&lt;/td&gt;
&lt;td&gt;Checkout page&lt;/td&gt;
&lt;td&gt;Other details will be auto-filled as soon as you selects a phone number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YRxwuO_D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/marxq0f14obffzyj0dbe.png" alt="Discount" width="880" height="1629"&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;You can either add discount by percentage or a specific amount by clicking on icon&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>appwritehack</category>
      <category>flutter</category>
      <category>hackathon</category>
      <category>appdev</category>
    </item>
    <item>
      <title>Part 1 - TODO app UI building using Flutter</title>
      <dc:creator>Darshan Rander</dc:creator>
      <pubDate>Fri, 25 Dec 2020 12:36:20 +0000</pubDate>
      <link>https://dev.to/siruswrites/part-1-todo-app-ui-building-using-flutter-3bfl</link>
      <guid>https://dev.to/siruswrites/part-1-todo-app-ui-building-using-flutter-3bfl</guid>
      <description>&lt;h2&gt;
  
  
  👋 Everyone!
&lt;/h2&gt;

&lt;p&gt;Welcome to the 1st part of the Flutter TODO app-building series. In this article, we are going to build the main screen on which all the TODOs from a user are shown.&lt;/p&gt;

&lt;p&gt;To know more about the project you can go to &lt;a href="https://dev.to/siruswrites/flutter-todo-app-series-introduction-kdp"&gt;Introduction article&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This article is complementary to the video series on YouTube, so if you are more of a video person then you can go and watch the video 👇👇&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/0_3jWthag98"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Breaking The UI Into Parts.
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;How a user will look at it&lt;/th&gt;
&lt;th&gt;How a DEV should look at it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&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%2F5lq7eml9xwzdujwws13r.jpg" alt="Normal View"&gt;&lt;/td&gt;
&lt;td&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%2Fvyjw0o4qief4prxijzun.jpg" alt="DEV View"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each part is marked with a number and I have explained what they are and which widget I have used in Flutter.&lt;/p&gt;

&lt;p&gt;So as you can see that we have  &lt;a href="https://api.flutter.dev/flutter/material/Scaffold-class.html" rel="noopener noreferrer"&gt;&lt;code&gt;Scaffold&lt;/code&gt;&lt;/a&gt;  as the parent and then we have &lt;code&gt;appBar&lt;/code&gt;, &lt;code&gt;body&lt;/code&gt;, and &lt;code&gt;floatingActionButton&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We have an &lt;code&gt;AppBar&lt;/code&gt; in which we have a &lt;code&gt;title&lt;/code&gt; property which is a type of &lt;code&gt;Widget&lt;/code&gt; so we use a &lt;code&gt;Text&lt;/code&gt; widget.&lt;/li&gt;
&lt;li&gt;On the trailing(actions) side of the &lt;code&gt;AppBar&lt;/code&gt; we have an &lt;code&gt;IconButton&lt;/code&gt; which on clicking will log the user out of the app.&lt;/li&gt;
&lt;li&gt;Moving to &lt;code&gt;body&lt;/code&gt; we can see that the date button and our TODO list are vertically aligned, so which widget we can use for this? Yes, you have guessed it right we are going to use a &lt;code&gt;Column&lt;/code&gt; so the first child is a simple &lt;code&gt;TextButton&lt;/code&gt; (Added in Flutter 1.22).&lt;/li&gt;
&lt;li&gt;Next child in our &lt;code&gt;Column&lt;/code&gt; will be &lt;code&gt;ListView&lt;/code&gt; to be specific as we are going to add data dynamically so we need to use a &lt;code&gt;ListView.builder&lt;/code&gt; (This works like a &lt;code&gt;RecyclerView&lt;/code&gt; in Android).&lt;/li&gt;
&lt;li&gt;Inside our &lt;code&gt;ListView.builder&lt;/code&gt; each child is a &lt;code&gt;Dismissible&lt;/code&gt; so that the user can dismiss them to delete. &lt;code&gt;Card&lt;/code&gt; is the child of it which gives it an aesthetic look and child is a &lt;code&gt;ListTile&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Getting to &lt;code&gt;ListTile&lt;/code&gt; we have &lt;code&gt;title&lt;/code&gt; which also takes the type of &lt;code&gt;Widget&lt;/code&gt; so again we are using a &lt;code&gt;Text&lt;/code&gt; widget.&lt;/li&gt;
&lt;li&gt;Just below the title we have a description and date of creation. &lt;code&gt;ListTile&lt;/code&gt; also has a property for this which is &lt;code&gt;subtitle&lt;/code&gt; again you have guessed it we need a &lt;code&gt;Widget&lt;/code&gt; but this time we are going to pass a &lt;code&gt;Column&lt;/code&gt; not a &lt;code&gt;Text&lt;/code&gt; widget because we need to have them vertically aligned. Next in &lt;code&gt;Column&lt;/code&gt;, we have 2 &lt;code&gt;Text&lt;/code&gt; widget that is for description and date of creation.&lt;/li&gt;
&lt;li&gt;To the left end we have an Icon, to get this we add &lt;code&gt;leading&lt;/code&gt; in &lt;code&gt;ListTile&lt;/code&gt; that is an &lt;code&gt;IconButton&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;To the right end we have again an icon but this time it is a simple &lt;code&gt;Icon&lt;/code&gt; which is in the &lt;code&gt;trailing&lt;/code&gt; of &lt;code&gt;ListTile&lt;/code&gt; position. &lt;/li&gt;
&lt;li&gt;Finally we have a &lt;code&gt;FloatingActionButton&lt;/code&gt; with an &lt;code&gt;Icon&lt;/code&gt; as a child.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Oof, this was so looonnng!!, now that you can read the UI we can start building it!! 🎉&lt;/p&gt;

&lt;h3&gt;
  
  
  It's CODE TIME!!!
&lt;/h3&gt;

&lt;p&gt;First of all, we are going to start by making a &lt;code&gt;StatefulWidget&lt;/code&gt;.&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;TODOScreen&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="n"&gt;TODOScreen&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="n"&gt;Key&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;super&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;key&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;_TODOScreenState&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;_TODOScreenState&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;_TODOScreenState&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;TODOScreen&lt;/span&gt;&lt;span class="p"&gt;&amp;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="c1"&gt;// We are going to start building here&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;Then we can work on &lt;code&gt;Scaffold&lt;/code&gt;&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;Scaffold&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;appBar:&lt;/span&gt;    &lt;span class="c1"&gt;// This is where we are going to add our `AppBar`, &lt;/span&gt;
      &lt;span class="nl"&gt;body:&lt;/span&gt;    &lt;span class="c1"&gt;// This is where most of the code will go,&lt;/span&gt;
      &lt;span class="nl"&gt;floatingActionButton:&lt;/span&gt;   &lt;span class="c1"&gt;// This is where we will add `FloatingActionButton`,&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For the &lt;code&gt;AppBar&lt;/code&gt; we will have a title property and also in &lt;code&gt;action&lt;/code&gt; we will have &lt;code&gt;IconButton&lt;/code&gt; for logout&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="nl"&gt;appBar:&lt;/span&gt; &lt;span class="n"&gt;AppBar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nl"&gt;title:&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;"My TODO app"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nl"&gt;actions:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="n"&gt;IconButton&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="nl"&gt;icon:&lt;/span&gt; &lt;span class="n"&gt;Icon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Icons&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;exit_to_app&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;In the &lt;code&gt;body&lt;/code&gt;, we have &lt;code&gt;Column&lt;/code&gt; which contains &lt;code&gt;TextButton&lt;/code&gt; and &lt;code&gt;ListView.builder&lt;/code&gt;.&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="nl"&gt;body:&lt;/span&gt; &lt;span class="n"&gt;Column&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;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Widget&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;[&lt;/span&gt;
    &lt;span class="c1"&gt;// Here we will have `TextButton` and `ListView.builder`&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;For time being we can just make a simple button with a Placeholder text, then we can work on logic and show the actual date.&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="n"&gt;TextButton&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="c1"&gt;// Here we will call `DatePicker`&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;"Date"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;    &lt;span class="c1"&gt;// In place of "Date" we will add the date which is selected&lt;/span&gt;
&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Below the button, we have our &lt;code&gt;ListView.builder&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We need to make &lt;code&gt;shrinkWrap&lt;/code&gt; as &lt;code&gt;true&lt;/code&gt; in &lt;code&gt;ListView.builder&lt;/code&gt; since it is inside a &lt;code&gt;Column&lt;/code&gt; otherwise this will shower you with errors (I hope you don't like them😉) and will make &lt;code&gt;itemCount&lt;/code&gt; as 3.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;ListView&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;shrinkWrap:&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;itemCount:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;itemBuilder:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// Here we have to return our list item&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;To make our Tasks(items in &lt;code&gt;ListView.builder&lt;/code&gt;) have swipe to delete we need to start by wrapping it with a &lt;code&gt;Dismissible&lt;/code&gt; which will give us properties such as &lt;code&gt;direction&lt;/code&gt; to select the direction of dismissing, &lt;code&gt;background&lt;/code&gt; which is stacked behind the &lt;code&gt;child&lt;/code&gt; of &lt;code&gt;Dismissible&lt;/code&gt; and only show up when the child is swiped.&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="n"&gt;Dismissible&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="c1"&gt;// This should be unique for each item hence we are using index&lt;/span&gt;
  &lt;span class="nl"&gt;key:&lt;/span&gt; &lt;span class="n"&gt;ValueKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;  
  &lt;span class="c1"&gt;// As written above this will be stacked behind the `child`&lt;/span&gt;
  &lt;span class="nl"&gt;background:&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;alignment:&lt;/span&gt; &lt;span class="n"&gt;Alignment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;centerLeft&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nl"&gt;color:&lt;/span&gt; &lt;span class="n"&gt;Colors&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;red&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="mf"&gt;8.0&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;Icon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Icons&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;delete&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="nl"&gt;direction:&lt;/span&gt; &lt;span class="n"&gt;DismissDirection&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;startToEnd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// Only allow to swipe in reading direction&lt;/span&gt;
  &lt;span class="nl"&gt;child:&lt;/span&gt;   &lt;span class="c1"&gt;// Widget which is actually shown on screen&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For the &lt;code&gt;child&lt;/code&gt; we are going to have a &lt;code&gt;Card&lt;/code&gt; -&amp;gt; &lt;code&gt;ListTile&lt;/code&gt; then we can add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;title&lt;/code&gt; which will show task title&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;subtitle&lt;/code&gt; which will be a &lt;code&gt;Column&lt;/code&gt; and have task description and created date&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;leading&lt;/code&gt; which will be an &lt;code&gt;IconButton&lt;/code&gt; to show which task is completed and mark a task as completed&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;trailing&lt;/code&gt; which will be an &lt;code&gt;Icon&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;Card&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;ListTile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nl"&gt;leading:&lt;/span&gt; &lt;span class="n"&gt;IconButton&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="nl"&gt;icon:&lt;/span&gt; &lt;span class="n"&gt;Icon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Icons&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;check_circle_outline_outlined&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nl"&gt;trailing:&lt;/span&gt; &lt;span class="n"&gt;Icon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Icons&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;arrow_forward_ios&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nl"&gt;title:&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;"Title"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nl"&gt;subtitle:&lt;/span&gt; &lt;span class="n"&gt;Column&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;crossAxisAlignment:&lt;/span&gt; &lt;span class="n"&gt;CrossAxisAlignment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;start&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;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Widget&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;[&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;"Desc"&lt;/span&gt;&lt;span class="p"&gt;),&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;"Date"&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;&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%2Fsg861rh2u3j3jzeduzl3.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%2Fsg861rh2u3j3jzeduzl3.png" alt="The issue"&gt;&lt;/a&gt;&lt;br&gt;
What you can see on your screen?... Yes, this looks kinda weird, Let's fix it.&lt;br&gt;
To fix it first we need to remove the default margin from &lt;code&gt;Card&lt;/code&gt;.&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="n"&gt;Card&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nl"&gt;margin:&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="mf"&gt;0.0&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;&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%2Fjlxti9nyegrsqnoaihrf.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%2Fjlxti9nyegrsqnoaihrf.png" alt="Now card are sticking to each other"&gt;&lt;/a&gt;&lt;br&gt;
Now cards are sticking to each other. This could be easily solved by wrapping &lt;code&gt;Padding&lt;/code&gt; around &lt;code&gt;Dismissible&lt;/code&gt;.&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;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="mf"&gt;8.0&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;Dismissible&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;&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%2Fkzwmu7apop61kfk2d24m.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%2Fkzwmu7apop61kfk2d24m.png" alt="Completed"&gt;&lt;/a&gt;&lt;br&gt;
Yes, this looks much better😍&lt;/p&gt;

&lt;p&gt;Finally, we can work on our &lt;code&gt;FloatingActionButton&lt;/code&gt;!  It has a single child which is an &lt;code&gt;Icon&lt;/code&gt;.&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="nl"&gt;floatingActionButton:&lt;/span&gt; &lt;span class="n"&gt;FloatingActionButton&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="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Icon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Icons&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&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;Congratulations you have completed your UI building!! 🎉🥳&lt;/p&gt;

&lt;h3&gt;
  
  
  Adding Some Logic
&lt;/h3&gt;

&lt;p&gt;Now we can add some logic to change the date which was in the &lt;code&gt;TextButton&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Remember I told you that in place of "Date" we can put the actual date? Now we are going to work on that.&lt;/p&gt;

&lt;p&gt;Let's start by making an instance variable in our &lt;code&gt;State&lt;/code&gt; class and initializing it with &lt;code&gt;DateTime.now()&lt;/code&gt; which will assign it today's date.&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="n"&gt;DateTime&lt;/span&gt; &lt;span class="n"&gt;_date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we need to format our &lt;code&gt;_date&lt;/code&gt; variable and show it to users. For this, we are going to use a package from &lt;a href="https://pub.dev/" rel="noopener noreferrer"&gt;pub.dev&lt;/a&gt; named &lt;a href="https://pub.dev/packages/intl" rel="noopener noreferrer"&gt;intl&lt;/a&gt; into &lt;code&gt;pubspec.yaml&lt;/code&gt;.&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="c1"&gt;# Other dependencies&lt;/span&gt;
  &lt;span class="na"&gt;intl&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;^0.16.1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;intl&lt;/code&gt; gives us a lot of formatting options you can look at them by yourselves over &lt;a href="https://pub.dev/packages/intl" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For formatting date, we are going to pass &lt;code&gt;_date&lt;/code&gt; to &lt;code&gt;format&lt;/code&gt; method from &lt;code&gt;DateFormat&lt;/code&gt; class which will format it.&lt;br&gt;
We can now replace the "Date" with it so the user will get a clear idea of which tasks are for user on which date.&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="n"&gt;TextButton&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="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="n"&gt;DateFormat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"dd/MM/yyyy"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toString&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;Now as the user can see the date they also might want to change, so we are going to implement a date picker in it. As &lt;code&gt;material&lt;/code&gt; library already gives a date picker we are going to use that. For that, we will make another method in our &lt;code&gt;class&lt;/code&gt;.&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="n"&gt;_showDatePicker&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="kd"&gt;async&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// To make a variable with today's date as we are going to use it a lot of time&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;today&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;now&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; 
  &lt;span class="c1"&gt;// This will return a `Future&amp;lt;DateTime&amp;gt;` hence we are awaiting it.&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;selectedDate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;showDatePicker&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;  
    &lt;span class="nl"&gt;context:&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// We get it from the `State` class&lt;/span&gt;
    &lt;span class="nl"&gt;initialDate:&lt;/span&gt; &lt;span class="n"&gt;_date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// This is the date which is selected in the date picker&lt;/span&gt;
    &lt;span class="nl"&gt;firstDate:&lt;/span&gt; &lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2020&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;  &lt;span class="c1"&gt;// This is the start range in date picker which is selectable&lt;/span&gt;
    &lt;span class="nl"&gt;lastDate:&lt;/span&gt; &lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;year&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;month&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;today&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;day&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;  &lt;span class="c1"&gt;// This is the end range in date picker which is selectable&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// if user have selected any date and selected date and current date&lt;/span&gt;
  &lt;span class="c1"&gt;// is not same then update the date and update the UI&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;selectedDate&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;selectedDate&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;_date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;_date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;selectedDate&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 we have written the method &lt;code&gt;_showDatePicker()&lt;/code&gt; we can call it when the user clicks on the Button.&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="n"&gt;TextButton&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;_showDatePicker&lt;/span&gt;&lt;span class="p"&gt;();&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="n"&gt;DateFormat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"dd/MM/yyyy"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_date&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;toString&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;Woah you have completed your first screen!! 🎉&lt;/p&gt;

&lt;p&gt;You can go over &lt;a href="https://github.com/CodeVengersTeam/Flutter-TODO-Tutorial/tree/UI-building-part-1" rel="noopener noreferrer"&gt;here&lt;/a&gt; to see the whole code.&lt;/p&gt;

&lt;p&gt;Thanks for reading, if you wish you can also join our community on &lt;a href="https://discord.gg/tzk695K3" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;See you soon! 👋 Happy Fluttering.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>tutorial</category>
      <category>dart</category>
      <category>ui</category>
    </item>
    <item>
      <title>My Journey Of #100DaysOfCode</title>
      <dc:creator>Darshan Rander</dc:creator>
      <pubDate>Sun, 06 Dec 2020 19:31:16 +0000</pubDate>
      <link>https://dev.to/siruswrites/my-journey-of-100daysofcode-5b0</link>
      <guid>https://dev.to/siruswrites/my-journey-of-100daysofcode-5b0</guid>
      <description>&lt;h1&gt;
  
  
  👋 Everyone
&lt;/h1&gt;

&lt;p&gt;I completed my #100DaysOfCode challenge on the 15th of November, 2020.&lt;br&gt;
Here is my experience with the 100DaysOfCode challenge. &lt;/p&gt;
&lt;h1&gt;
  
  
  TL;DR
&lt;/h1&gt;

&lt;p&gt;It was an amazing experience, you should also try it.&lt;/p&gt;
&lt;h1&gt;
  
  
  Index
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;How I started&lt;/li&gt;
&lt;li&gt;How you can start?&lt;/li&gt;
&lt;li&gt;What I got from 100DaysOfCode&lt;/li&gt;
&lt;li&gt;
Problems that I faced

&lt;ul&gt;
&lt;li&gt;I can't work daily😩&lt;/li&gt;
&lt;li&gt;Can't find proper resources🤦‍♂️&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;What I did in 100 days?&lt;/li&gt;
&lt;li&gt;Final Thoughts&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  How I started
&lt;/h2&gt;

&lt;p&gt;It all started with a reply on 👇&lt;br&gt;
&lt;/p&gt;
&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--PuSs2y0g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1291813072173072384/gtzGQ3GK_normal.jpg" alt="Shreyasi profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Shreyasi
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @error404_sp
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Great initiative! Anyone else up for this challenge? &lt;a href="https://t.co/IruxubJKDk"&gt;twitter.com/DevCommunityIN…&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      12:21 PM - 08 Aug 2020
    &lt;/div&gt;

      &lt;div class="ltag__twitter-tweet__quote"&gt;
        &lt;div class="ltag__twitter-tweet__quote__header"&gt;
          &lt;span class="ltag__twitter-tweet__quote__header__name"&gt;
            Dev Community INDIA
          &lt;/span&gt;
          @DevCommunityIN
        &lt;/div&gt;
        Hello Devs,
We believe consistency and practice plays a important role in success.
Hence We bring to you "The Weekly Steak Challenge"✨
So who all are excited for this challenge? https://t.co/zetH9skTFE
      &lt;/div&gt;

    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1292073551877480448" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1292073551877480448" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1292073551877480448" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;
&lt;br&gt;
&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--kvXKd2oG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1169650955127623680/o3UEvNKJ_normal.jpg" alt="SirusTweets💙 profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        SirusTweets💙
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @sirustweets
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      &lt;a href="https://twitter.com/error404_sp"&gt;@error404_sp&lt;/a&gt; Let's try this🤔🤔
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      12:50 PM - 08 Aug 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1292080701903220736" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1292080701903220736" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1292080701903220736" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  How you can start? &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.100daysofcode.com/rules/"&gt;Rules&lt;/a&gt; are pretty simple.&lt;/p&gt;

&lt;p&gt;Just start with what you want to learn or explore. I started it because I wanted to be consistent with my DEV work and explore new technologies.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I got from 100DaysOfCode
&lt;/h2&gt;

&lt;p&gt;I have done a lot in these 100 days.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learned a bit of Django and DRF(Django Rest Framework)&lt;/li&gt;
&lt;li&gt;Made some cool animation in Flutter&lt;/li&gt;
&lt;li&gt;Connected with a lot of cool people on Twitter&lt;/li&gt;
&lt;li&gt;Pushed my boundaries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It was such an amazing experience!&lt;/p&gt;

&lt;h2&gt;
  
  
  Problems that I faced
&lt;/h2&gt;

&lt;h3&gt;
  
  
  I can't work daily😩 &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The main problem which we all might face is we may get bored/tired and drop out of the challenge. In my opinion, just try and push yourself for a week or two then eventually you will develop a habit to work daily. &lt;br&gt;
TBH, I was very greedy, but this greed helped me a lot. It helped to work even when I was feeling very sleepy - &lt;em&gt;I would not recommend this to anyone, good sleep is necessary&lt;/em&gt;&lt;br&gt;
I needed to push myself to work for an hour daily, eventually, it became a habit and now it is hard to break. Either I'm coding or I'm learning new concepts through articles, YouTube, or GitHub issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can't find proper resources🤦‍♂️ &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Many may say it's just an excuse, but sometimes it is really hard to find something you were looking for. I had some difficulty in finding resources for DRF but this &lt;a href="https://www.youtube.com/playlist?list=PLx-q4INfd95EsUuON1TIcjnFZSqUfMf7s"&gt;playlist&lt;/a&gt; from &lt;a href="https://www.youtube.com/channel/UCQM4dR3UREnGIHz93zRw_0Q"&gt;Semy Colon&lt;/a&gt; helped me a lot.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I did in 100 days? &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Days&lt;/th&gt;
&lt;th&gt;What I did&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0 to 19&lt;/td&gt;
&lt;td&gt;Learned Django and DRF at the surface level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20 to 22&lt;/td&gt;
&lt;td&gt;Practiced some questions from HackerRank(I'm not really good at it)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23 to 25&lt;/td&gt;
&lt;td&gt;Published a package on a flutter package named &lt;a href="https://pub.dev/packages/mobile_web_view"&gt;mobile_web_view&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;Made this &lt;a href="https://codepen.io/siruscodes/pen/XWdzoKa"&gt;CodePen&lt;/a&gt; on flutter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27 to 28&lt;/td&gt;
&lt;td&gt;Worked on a website for college event using flutter web&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;29 to 43&lt;/td&gt;
&lt;td&gt;Took a Flutter workshop on YouTube, Worked on my portfolio site(still incomplete😉), helped others.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;44 to 55&lt;/td&gt;
&lt;td&gt;Added animation in &lt;a href="https://github.com/aagarwal1012/Animated-Text-Kit/"&gt;animated_text_kit(Flutter package)&lt;/a&gt; more about &lt;a href="https://github.com/aagarwal1012/Animated-Text-Kit/issues/106"&gt;issue&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;56 to 62&lt;/td&gt;
&lt;td&gt;HacktoberFest, &lt;a href="https://codepen.io/siruscodes/pen/rNLavzw"&gt;CodePen&lt;/a&gt;, JavaFX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;63 to 64&lt;/td&gt;
&lt;td&gt;Published another package on &lt;a href="https://pub.dev/"&gt;pub.dev&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;65 to 73&lt;/td&gt;
&lt;td&gt;College project(JavaFX), tried riverpod(&lt;a href="https://riverpod.dev/"&gt;https://riverpod.dev/&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;74 to 82&lt;/td&gt;
&lt;td&gt;Again worked on my portfolio site😅 and planned for a hackathon project.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;83 to 85&lt;/td&gt;
&lt;td&gt;Worked on the hackathon project😩&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;86 to 100&lt;/td&gt;
&lt;td&gt;College project, &lt;a href="https://www.youtube.com/playlist?list=PLJudAb0qOR1v5fS2E1xCs9jbx1Qk8zAft"&gt;YouTube videos&lt;/a&gt; on flutter&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you want to see all of my tweets you can go on this &lt;a href="https://twitter.com/search?q=(from%3A%40SirusTweets)%20(%23100DaysOfCode)%20(%22Day%22)&amp;amp;src=typed_query&amp;amp;f=live"&gt;search query&lt;/a&gt;&lt;br&gt;
PS: It was very nostalgic for me to see my old tweets and write this🥺💙&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;100DaysOfCode challenge could be a really good start to learn, explore, and if you are trying to be consistent. But don't just stop after 100 days. After you have achieved one goal, set another one for yourself. Just keep on trying out new things, just don't limit yourself.&lt;/p&gt;

</description>
      <category>100daysofcode</category>
      <category>flutter</category>
      <category>django</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Flutter TODO app series! Introduction</title>
      <dc:creator>Darshan Rander</dc:creator>
      <pubDate>Fri, 13 Nov 2020 11:37:37 +0000</pubDate>
      <link>https://dev.to/siruswrites/flutter-todo-app-series-introduction-kdp</link>
      <guid>https://dev.to/siruswrites/flutter-todo-app-series-introduction-kdp</guid>
      <description>&lt;h2&gt;
  
  
  👋 Everyone
&lt;/h2&gt;

&lt;p&gt;Welcome to the series! I'm Darshan from &lt;a href="https://linktr.ee/realcodevengers" rel="noopener noreferrer"&gt;CodeVengers&lt;/a&gt; and in this series, we are going to make a TODO app using &lt;a href="https://flutter.dev/" rel="noopener noreferrer"&gt;Flutter&lt;/a&gt;, &lt;a href="https://firebase.google.com/" rel="noopener noreferrer"&gt;Firebase&lt;/a&gt; and &lt;a href="https://riverpod.dev/" rel="noopener noreferrer"&gt;Riverpod&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  About The Project
&lt;/h3&gt;

&lt;p&gt;Let me give you a brief overview of the project. In the project, we are going to make a 3 screen app. For each screen, I will cover how to look at the design and later we are going to build it. Then we will proceed to work on the backend with &lt;a href="https://firebase.google.com/docs/firestore" rel="noopener noreferrer"&gt;Cloud Firestore&lt;/a&gt; and &lt;a href="https://firebase.google.com/docs/auth" rel="noopener noreferrer"&gt;Firebase Auth&lt;/a&gt; using &lt;a href="https://riverpod.dev/" rel="noopener noreferrer"&gt;Riverpod&lt;/a&gt; for state management.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Login&lt;/th&gt;
&lt;th&gt;TODO Screen&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&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%2Fl1dgqzojhz520coa7fir.png" alt="Login Page"&gt;&lt;/td&gt;
&lt;td&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%2Fz3r28xetthvf6ac8n3fv.png" alt="TODO Screen"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;In this screen, we have login with google or skip login which will register the user as &lt;a href="https://firebase.flutter.dev/docs/auth/usage#anonymous-sign-in" rel="noopener noreferrer"&gt;anonymous&lt;/a&gt;.&lt;/td&gt;
&lt;td&gt;The user's tasks are listed over here. The user can see their tasks by specifying the date.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Add/Update Task&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&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%2Faebsnpd9bopum0ppnq87.png" alt="Update remove"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;In this screen, the user will add or update their Tasks.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Learning Something New Is Good!
&lt;/h3&gt;

&lt;p&gt;For those who don't know what Riverpod is, it is a state management option that has a lot of similarities with Provider (our good old friend) as both are developed by the same person that is Remi Rousselet, so learning it would be a breeze if you already know Provider. You can go through the amazing &lt;a href="https://riverpod.dev/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; and Robert Brunhage has made an awesome &lt;a href="https://youtu.be/GVspNESSess" rel="noopener noreferrer"&gt;video&lt;/a&gt; to explain all the different providers in Riverpod.&lt;/p&gt;

&lt;h3&gt;
  
  
  Yes, You Can Watch Videos!
&lt;/h3&gt;

&lt;p&gt;These articles are complementary to our YouTube series so if you like to see the videos then you can consider &lt;a href="https://www.youtube.com/channel/UCqO_zNx829e6soWLzinFkcA" rel="noopener noreferrer"&gt;subscribing&lt;/a&gt; to our channel as we are planning to not only bring Flutter but also tutorials on other technologies.&lt;/p&gt;

&lt;p&gt;Thanks for reading, if you wish you can also join our community on &lt;a href="https://discord.com/invite/UtTPuzpV" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;See you soon! 👋 Happy Fluttering.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>tutorial</category>
      <category>dart</category>
    </item>
  </channel>
</rss>
