<?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: Idris Idris</title>
    <description>The latest articles on DEV Community by Idris Idris (@idrisadeyemi01).</description>
    <link>https://dev.to/idrisadeyemi01</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%2F548503%2F482d67f5-6425-4020-b9ad-7bbb78991225.jpeg</url>
      <title>DEV Community: Idris Idris</title>
      <link>https://dev.to/idrisadeyemi01</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/idrisadeyemi01"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Idris Idris</dc:creator>
      <pubDate>Wed, 14 May 2025 22:23:19 +0000</pubDate>
      <link>https://dev.to/idrisadeyemi01/-6kn</link>
      <guid>https://dev.to/idrisadeyemi01/-6kn</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/destinyed/doctextextractor-a-flutter-package-to-extract-text-from-word-pdf-google-docs-and-markdown-5gj4" class="crayons-story__hidden-navigation-link"&gt;DocTextExtractor: A Flutter Package to Extract Text from Word, PDF, Google Docs, and Markdown&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/destinyed" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1059724%2F01e4ffcf-428c-49cb-8f7f-24bd323b29e9.jpeg" alt="destinyed profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/destinyed" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Destiny Ed
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Destiny Ed
                
              
              &lt;div id="story-author-preview-content-2488334" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/destinyed" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1059724%2F01e4ffcf-428c-49cb-8f7f-24bd323b29e9.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Destiny Ed&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/destinyed/doctextextractor-a-flutter-package-to-extract-text-from-word-pdf-google-docs-and-markdown-5gj4" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 14 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/destinyed/doctextextractor-a-flutter-package-to-extract-text-from-word-pdf-google-docs-and-markdown-5gj4" id="article-link-2488334"&gt;
          DocTextExtractor: A Flutter Package to Extract Text from Word, PDF, Google Docs, and Markdown
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/flutter"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;flutter&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/dart"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;dart&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/google"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;google&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/destinyed/doctextextractor-a-flutter-package-to-extract-text-from-word-pdf-google-docs-and-markdown-5gj4#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              6&lt;span class="hidden s:inline"&gt; comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>programming</category>
      <category>flutter</category>
      <category>dart</category>
      <category>google</category>
    </item>
    <item>
      <title>Step-by-Step Guide to Fixing NDK source.properties File Missing Error in Flutter</title>
      <dc:creator>Idris Idris</dc:creator>
      <pubDate>Thu, 03 Apr 2025 12:26:40 +0000</pubDate>
      <link>https://dev.to/idrisadeyemi01/step-by-step-guide-to-fixing-ndk-sourceproperties-file-missing-error-in-flutter-3l2</link>
      <guid>https://dev.to/idrisadeyemi01/step-by-step-guide-to-fixing-ndk-sourceproperties-file-missing-error-in-flutter-3l2</guid>
      <description>&lt;p&gt;Imagine you’re working on an exciting project, and everything seems to work fine. Then you had a reason to update your Flutter environment and then you hit this annoying build error. You check your console or terminal and see something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2F3l0isgrfpjodiw9rdjlu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2F3l0isgrfpjodiw9rdjlu.png" alt="Error Image" width="800" height="143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Frustrating, right? Don’t worry. In this article, I’ll explain the main reason this happens and walk you through, step-by-step, ways to fix it. By the end, you’ll have your Flutter project running smoothly like nothing happened.&lt;/p&gt;

&lt;p&gt;Now that you know why we’re here, let us begin:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Futtift43lhpn630itxim.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Futtift43lhpn630itxim.gif" alt="Let us begin" width="500" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What could have caused this issue?
&lt;/h3&gt;

&lt;p&gt;This issue might not have been apparent in Flutter versions below 3.29.0 but, it is more revealed from 3.29.0. I had the same issue when I updated Flutter to 3.29. Initially, I was convinced it was an issue from the Flutter team due to the change made from &lt;code&gt;.gradle&lt;/code&gt; to &lt;code&gt;.gradle.kts&lt;/code&gt;. I thought a new update would be made to resolve the issue, but, I was mistaken.&lt;/p&gt;

&lt;p&gt;This error occurs because the Android NDK (Native Development Kit) installation is either incomplete, corrupted, or missing an essential file like source.properties. This can happen when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;there is an interrupted or failed NDK installation&lt;/li&gt;
&lt;li&gt;you manually deleted or modified the NDK directory by mistake&lt;/li&gt;
&lt;li&gt;you use an incompatible or unsupported DK version with your project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To confirm, go into the ndk directory as shown in the error. When you open the ndk version folder, e.g the 26.3.11579264 folder, you’ll see that there’s no &lt;code&gt;source.properties&lt;/code&gt; file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Now, how would you resolve this?
&lt;/h3&gt;

&lt;p&gt;1.⁠ ⁠Delete that folder (i.e. 26.3.xyz)&lt;/p&gt;

&lt;p&gt;2.⁠ ⁠⁠Open the project on Android Studio&lt;/p&gt;

&lt;p&gt;3.⁠ ⁠⁠In Android Studio, open the Settings from the top left corner&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fhc93uz59af119k8zl5ti.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fhc93uz59af119k8zl5ti.png" alt="Step 3" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.⁠ ⁠⁠Search for “sdk” in the search box and click on Android SDK (under Languages &amp;amp; Frameworks)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fi2pv3cp558chmp25ydmz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fi2pv3cp558chmp25ydmz.png" alt="Step 4" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.⁠ ⁠⁠Now, under SDK Tools, you’ll see NDK - or NDK (Side by side) - with a list of available NDKs, search for the NDK causing issues, if it’s valid and it’s there, select the checkbox, and click on the download icon. Leave the rest for Android Studio to complete for you. When this is all complete, click on “OK” and “Apply” to complete the configuration process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fz4icdwi12nzqm1ocepam.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fz4icdwi12nzqm1ocepam.png" alt="Step 5" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.⁠ ⁠⁠If the NDK is not available, download anyone close or just download the latest. (NB: You can download more than one)&lt;/p&gt;

&lt;p&gt;7.⁠ ⁠⁠If the case was 6. above, then you have to go into your project’s android/app/build.gradle.kts and in the android section, add something like - ⁠ ndkVersion = "26.x.yz” ⁠ where 26.x.yz is the version that you were able to download in Android studio.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.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%2Fe4twyutj8pyi35m9812f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.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%2Fe4twyutj8pyi35m9812f.png" alt="Last step" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Finishing Steps
&lt;/h3&gt;

&lt;p&gt;For the final step, you just have to clean and rebuild your project and voila! your project should be up and running again. You can run this in your project’s terminal or just simply click on the play in to debug from console.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;flutter clean
flutter pub get 
cd android &amp;amp;&amp;amp; ./gradlew clean &amp;amp;&amp;amp; cd .. 
flutter run
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And that’s all.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;In this article, you have learnt, in a step-by-step format, how to easily resolve the common ndk &lt;code&gt;source.properties&lt;/code&gt; file missing error. I hope you found this helpful.&lt;/p&gt;

&lt;p&gt;See you in my next blog post. 👋&lt;/p&gt;

&lt;p&gt;You can connect with me on &lt;a href="https://twitter.com/IdrisAdeyemiId1" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/idris-idris/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>dart</category>
      <category>mobile</category>
      <category>android</category>
    </item>
    <item>
      <title>Deep Dive Into Null and Null Safety in Dart</title>
      <dc:creator>Idris Idris</dc:creator>
      <pubDate>Thu, 25 Aug 2022 10:11:00 +0000</pubDate>
      <link>https://dev.to/idrisadeyemi01/deep-dive-into-null-safety-in-dart-k95</link>
      <guid>https://dev.to/idrisadeyemi01/deep-dive-into-null-safety-in-dart-k95</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;You are in a class and a teacher walks in, asks for a student to assign a task but the student is absent. The teacher can either call another student for the task or ask someone to relay the task's message to the student whenever he/she gets back. This is a model for handling a request with absent recipient.&lt;/p&gt;

&lt;p&gt;This analogy can also be modelled in our codes where a variable could either be absent at a point of call or assigned to a value at that point. The ability to handle such case effectively is paramount for every developer.&lt;/p&gt;

&lt;p&gt;In this article, we'll be looking at &lt;em&gt;Null&lt;/em&gt; and &lt;em&gt;Null safety&lt;/em&gt; in Dart.&lt;/p&gt;

&lt;p&gt;We will specifically cover the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduction to Null and Null safety in Dart&lt;/li&gt;
&lt;li&gt;Nullable and Non-nullable Dart datatypes&lt;/li&gt;
&lt;li&gt;Null-aware operators&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;late&lt;/code&gt; keyword&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Having mentioned that, let's start:&lt;br&gt;
&lt;a href="https://i.giphy.com/media/flbcUFdLSHwZC03p11/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/flbcUFdLSHwZC03p11/giphy.gif" alt="Let's get started"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Null and Null safety in Dart
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Null&lt;/em&gt;, as a programming concept, simply mean “absence of value”. Having a data type to denote this absence is useful. Let's take a scenario where people are asked to fill their full names in a form. It is possible for some of these people not to have middle names. In a case like this, we want to make an expression that this field could contain a value of String, or it may have no data at all.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;Null&lt;/em&gt; class in Dart provides this null value. Imagine there’s no option for null values, we could simply assign an empty string ( “” ) to represent the absence of a middle name. But then, we would need to specify this with a comment for our colleagues to understand.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;String middleName = “”;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Using an empty String such as this works but we would have to tell other colleagues about it. What if we can actually set &lt;code&gt;middleName&lt;/code&gt; to the null that it is?&lt;/p&gt;

&lt;p&gt;&lt;code&gt;String middleName = null;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This is very clear to everyone that there is no value for &lt;code&gt;middleName&lt;/code&gt;, and based on this, we can easily decide what should happen when the value of the &lt;code&gt;middleName&lt;/code&gt; is null.&lt;/p&gt;

&lt;p&gt;The code above will work just fine in versions of Dart prior to 2.12. However for versions above this, an error will be thrown (at compile time).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;A value of type ‘Null’ can’t be assigned to a variable of type ‘String’&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Before the introduction of &lt;em&gt;Null&lt;/em&gt; safety, Dart allows us to pass in values that could be null, calling a method on it on compile time (i.e while typing the code) without throwing an error. This could be dangerous at some point because if that value is eventually null, then our code breaks at runtime. We don’t want our users to see our flaws, right?&lt;/p&gt;

&lt;p&gt;Let’s take an example:&lt;/p&gt;

&lt;p&gt;Assuming we wish to check the length of our &lt;code&gt;middleName&lt;/code&gt; variable, we can define a function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;int capitalize(String middleName){
  return middleName.toUpperCase();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let’s try this code in our main.dart file, in the main function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;void main(){
    print (capitalize(‘Adeyemi’)); // ‘ADEYEMI’
    print(capitalize(‘learning flutter’)); // 'LEARNING FLUTTER’
        }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works just fine as long as we do not pass null as a value in the capitalize function. Once we pass null as a parameter to capitalize, in Dart &amp;lt;2.12 (before null safety), the code doesn’t throw an error on compile time but if we run it, the code breaks with an error.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;NoSuchMethodError: The getter ‘length’ was called on null.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;As much as possible we do not want our users to see this, and we might not be able to catch it since it doesn’t appear before running the code. This is why we need null safety. If the same code as above is written in Dart version &amp;gt;2.12 (i.e null safe version), an error is thrown instantly when null is passed as an argument to capitalize.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;print(capitalize(null));&lt;/code&gt;&lt;br&gt;
Error shown: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;The argument type ‘Null’ can’t be assigned to the parameter type ‘String’&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This change eliminates the possibility of being surprised by null, hence prevents a number of errors. In short, &lt;em&gt;Null&lt;/em&gt; safety help keep us safe from the problems of forgotten null occurrence.&lt;/p&gt;
&lt;h2&gt;
  
  
  Nullable and Non-nullable Data Types
&lt;/h2&gt;

&lt;p&gt;With the advent of Dart null safety, Dart guarantees us that all its data types are non-null by default. This means that all the data types must have a value, unless we want it to be otherwise (i.e we want it to be null).&lt;/p&gt;

&lt;p&gt;Non-nullable types are the common easy-to-understand types that we know, they are declared without using the &lt;code&gt;?&lt;/code&gt; (question mark) at the end.&lt;/p&gt;

&lt;p&gt;Examples of non-nullable types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;String: “Flutter”, “Dart”, ‘Google’&lt;/li&gt;
&lt;li&gt;int: 2, 35, 7, 22, 100&lt;/li&gt;
&lt;li&gt;double: 0.003, 22.7, 3.142&lt;/li&gt;
&lt;li&gt;bool: true, false&lt;/li&gt;
&lt;li&gt;Sport: basketball, football&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means that all these values are acceptable. For example, we can write in our editor.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;int myAge = 20;
bool userRegistered = true;
String myWord = “I love Flutter”;
Sport football = Sport(name: “Football”, players: 11);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All these would work fine as they are not null. But when we try:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;String myName = null; //A red underline shows on compile time&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A compile-time error is shown immediately.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;A value of type 'Null' can’t be assigned to a variable of type ‘String’.&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
But how then do we assign null to a variable?&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%2Fcdn.images.express.co.uk%2Fimg%2Fdynamic%2F20%2F590x%2Fsecondary%2FMoney-Heist-season-5-Netflix-2414403.jpg%3Fr%3D1586858054881" 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%2Fcdn.images.express.co.uk%2Fimg%2Fdynamic%2F20%2F590x%2Fsecondary%2FMoney-Heist-season-5-Netflix-2414403.jpg%3Fr%3D1586858054881" alt="Money Heist professor showing - That is where Dart nullable types comes in"&gt;&lt;/a&gt;&lt;br&gt;
Picture Reference: &lt;a href="https://www.express.co.uk/showbiz/tv-radio/1268691/Money-Heist-season-4-professor-Alvaro-Morte-scene-series-Netflix-La-Casa-de-Papel" rel="noopener noreferrer"&gt;express.co.uk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is where Dart nullable types comes in.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To make a type nullable, all we have to do is to add a ‘?’ in front of the type.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;int? myAge = null; //This works&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A nullable type allows null value in addition to its original type. This means that the type ‘double?’ can take values such as 1.42, 23.5, null, 0.005 amongst others.&lt;/p&gt;

&lt;p&gt;The question mark (?) in front of the type is not an operation on the data type, rather it indicates a whole new datatype.&lt;/p&gt;

&lt;p&gt;String? is a whole different datatype from String.&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%2Fxc9bd55bw9drhvt94if7.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%2Fxc9bd55bw9drhvt94if7.png" alt="String? Hierachy in Dart null safety"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reference: &lt;a href="https://dart.dev/null-safety/understanding-null-safety" rel="noopener noreferrer"&gt;Dart doc&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Every non-nullable Dart type has its corresponding nullable type&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Also, we can say the non-nullable type is a subtype of its corresponding nullable type. That is, int is a subtype of int? since int? can take a value of int.&lt;/p&gt;

&lt;p&gt;Finally, if a nullable variable is not assigned initially, it is given a type of Null.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;int? year;
String? middleName;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If this is printed on console:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;print(‘Year is $year’);
print(‘Middle name is $middleName’);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Year is null
Middle name is null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Null Aware Operators
&lt;/h2&gt;

&lt;p&gt;One of the major issues before the introduction of null safety is how easy it is for developers to forget to handle values that might turnout to be null. With null safety now, Dart ensures that developers cannot perform specific operations on nullable values unless they’ve handled the possibility of null.&lt;br&gt;
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;int? age;
print(age.isEven);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instantly, on compile-time, Dart throws an unchecked_use_of_nullable_value error stating:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;The property ‘isEven’ can’t be unconditionally accessed because the receiver can be ‘null’&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Then it goes ahead to suggest:&lt;br&gt;
&lt;code&gt;Try making the access conditional (using ‘?.’) or adding a null check to the target (‘!’).&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
We can, with this improvement, easily handle the compile-time error instead of waiting until this crashes our app.&lt;/p&gt;

&lt;p&gt;Dart provides a set of operators to help handle the possibility of null values, these are known as the null-aware operators.&lt;/p&gt;

&lt;p&gt;The null-aware operators are as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If-null operator (??)&lt;/li&gt;
&lt;li&gt;Null-aware access operator (?.)&lt;/li&gt;
&lt;li&gt;Null assertion operator(!)&lt;/li&gt;
&lt;li&gt;Null-aware assignment operator (??=)&lt;/li&gt;
&lt;li&gt;Null-aware cascade operator(?..)&lt;/li&gt;
&lt;li&gt;Null-aware index operator (?[ ])&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now let’s see how these operators work&lt;/p&gt;
&lt;h3&gt;
  
  
  If-null operator (??)
&lt;/h3&gt;

&lt;p&gt;If we have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;int? numberOfYears;
final age = numberOfYears ?? 0;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;This is simply read as “If numberOfYears is not null, then set age equals numberOfYears, if it is null, set age equals 0”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It should be noted that using that using ?? ensures that the value of age can never be null. Hence, Dart infers the variable as int, not int?&lt;br&gt;
From above, using the ?? operator is same as writing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  int? numberOfYears;
  int? age;
  if(numberOfYears != null){
    age = numberOfYears;
  }else{
    age = 0;
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is about 6 additional lines of code instead of the one-liner using the ?? operator.&lt;/p&gt;

&lt;h3&gt;
  
  
  Null-aware access operator (?.)
&lt;/h3&gt;

&lt;p&gt;Earlier, we tried age.isEven, and we saw that Dart give us an error at compile-time. To by-pass this, one of the suggested way is to use the ?. operator on age. That is, &lt;code&gt;age?.isEven&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This can be explained simply as “If age is null, return null, otherwise if age has a value, return true/false if it’s even or not”.&lt;/p&gt;

&lt;p&gt;The operator ?. should be used when we’re not totally sure if the variable will be null or not. Hence, if it turns out to be null, we can easily handle it, if it isn’t null too, we handle it accordingly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Null assertion operator (!)
&lt;/h3&gt;

&lt;p&gt;Unlike the Null aware access operator (?.), whenever we’re so sure that the variable we’re handling is definitely not null, we could use the ! operator (bang operator).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;age!.isEven&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In this case, we’re saying that “ Yes, I am sure age is not going to be null, so just check if it’s even”. This comes at a cost though, because if age eventually turns out to be null, our app will crash at runtime.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The ! operator should be treated as a dangerous operator and only used when we’re very sure our variable will not be null. By using this operator, we simply tell Dart that “look, I am going out of null safety on this variable because I’m sure it’s null, so let me handle it myself”.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Null- aware assignment operator (??=)
&lt;/h3&gt;

&lt;p&gt;This works like the if-null operator (??), but we use the ??= when updating the same value.&lt;br&gt;
For example:&lt;br&gt;
&lt;code&gt;String? country;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;When it’s time to use the address variable, it will be wise to check if an address has been assigned earlier. This can be done using the ?? operator as:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;country = country ?? “Nigeria”;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;But since it’s the same variable we want to update, we can simply write:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;country ??= “Nigeria”;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In simple terms, the ??= operator simply says “If country is null, set country to “Nigeria”, otherwise, retain the current value of country”.&lt;/p&gt;
&lt;h3&gt;
  
  
  Null-aware cascade operator (?..)
&lt;/h3&gt;

&lt;p&gt;In Dart, the cascade operator (..) allows us to call multiple method on the same object at a go OR help set multiple properties on the same object.&lt;/p&gt;

&lt;p&gt;For example, given a class Sport like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Sport{
  String? name;
  int? players;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If Sport class isn’t nullable, we can us the cascade operator like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    Sport sport = Sport()
        ..name = "Football"
        ..players = 11;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A common use case of the null-aware cascade operator is on the Path object, during painting in Flutter.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Path? path;
Path
   ?..moveTo(0, 0)
    ..lineTo(0, 4)
    ..lineTo(4, 4)
    ..lineTo(4, 0)
    ..lineTo(0,0);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;The null-aware cascade operator can be short-circuited, you only need to use it for the first time in the chain and if the variable (path) is null, all operations in the chain do not get called.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Null-aware Index Operator (?[])
&lt;/h3&gt;

&lt;p&gt;In Dart, indexing is used to access an element of a List&lt;/p&gt;

&lt;p&gt;&lt;code&gt;List&amp;lt;String&amp;gt; myColors = [“Blue”, “Green”, “Red”];&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The indexes begin at 0, hence to call out “Green”, we do this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;var green = myColors[1];&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now with null-safety, we know that a List might be null, hence, to index an item of that List we have our helper ?[] operator.&lt;/p&gt;

&lt;p&gt;Let’s see an example:&lt;br&gt;
&lt;code&gt;List&amp;lt;String&amp;gt;? myColors = [“Blue”, “Green”, “Red”];&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Even though, the List is nullable but since we’ve assigned a value to it, it has been promoted.&lt;/p&gt;

&lt;p&gt;Setting myColors to null.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;myColors = null;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now, when we try to get the “Green” value again, we use the null-aware index operator as thus:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;String? green = myColors?[1];&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This, in literal term means “if myColors is null, assign null value to green. If otherwise, assign the 1th index of myColors to green”.&lt;br&gt;
If we try to access a value from a null list before null-safety, it would have resulted in our app crashing. But again, thanks to null-safety.&lt;/p&gt;
&lt;h2&gt;
  
  
  The &lt;code&gt;late&lt;/code&gt; keyword
&lt;/h2&gt;

&lt;p&gt;Sometimes, we want to make our variable non-nullable but we do not have the value to initialize it. The late keyword helps us to promise Dart that a value will be green to the variable before its usage, but that will be later. Using the late keyword means that the variable’s value won’t be calculated until we access the variable for the first time. This is called &lt;em&gt;lazy initialization&lt;/em&gt;. There are different ways by which we could later assign a value to that variable before using it like using the initState (for a StatefulWidget) or calling a function that returns that value.&lt;/p&gt;

&lt;p&gt;Whenever we try to access a variable that we specific with the late keyword without later assigning a value to it, we broke our promise, hence we get a LateInitializationError&lt;br&gt;
Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Sport{
  late String name;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And then we have something like this somewhere else.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Sport sport = Sport();
print(sport.name) //an error would be thrown since we have not initialized name.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;LateInitializationError: Field ‘name’ has not been initialized&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In this article, we have looked at the concept of Null and the beauty of Null safety. If used appropriately, Null safety can help you in writing better and less error-prone codes. &lt;/p&gt;

&lt;h2&gt;
  
  
  Additional Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dart.dev/null-safety/understanding-null-safety" rel="noopener noreferrer"&gt;Understanding Null Safety&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codewithandrea.com/videos/dart-null-safety-ultimate-guide-non-nullable-types/" rel="noopener noreferrer"&gt;Dart Null Safety: The Ultimate Guide to Non-Nullable Types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//youtube.com/watch?v=PnSpQkOKwv0"&gt;Video - Null Safety in Dart and Flutter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>dart</category>
      <category>flutter</category>
      <category>mobile</category>
      <category>programming</category>
    </item>
    <item>
      <title>BEGINNERS' GUIDE TO FLUTTER</title>
      <dc:creator>Idris Idris</dc:creator>
      <pubDate>Wed, 30 Dec 2020 08:49:29 +0000</pubDate>
      <link>https://dev.to/idrisadeyemi01/beginners-guide-to-flutter-16de</link>
      <guid>https://dev.to/idrisadeyemi01/beginners-guide-to-flutter-16de</guid>
      <description>&lt;p&gt;Have you heard &lt;strong&gt;Flutter&lt;/strong&gt; and have no clue what it does? Have you ever wondered what the hype that surrounds Flutter is about? Or perhaps, you have just picked up Flutter and needed a guide on becoming a Pro at Flutter.&lt;/p&gt;

&lt;p&gt;This article is a simple introduction to Flutter. It breaks down the various features of Flutter and explains how to get started with it. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Basic Introduction to Flutter and Dart&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;According to the &lt;a href="https://flutter.dev/" rel="noopener noreferrer"&gt;&lt;em&gt;official Flutter documentation&lt;/em&gt;&lt;/a&gt;, Flutter SDK is Google's UI toolkit for crafting beautiful, natively compiled applications for mobile, web, and desktop from a single codebase.&lt;/p&gt;

&lt;p&gt;In simple terms, this means that you can easily build apps that run on both Android and iOS operating systems with just one codebase. Usually, the normal practice is to write two different codebases for Android and iOS operating systems. However, using a framework like Flutter, you can create cross-platform apps with a single codebase.&lt;/p&gt;

&lt;p&gt;Flutter was created by Google and was released officially in May 2017. Flutter uses a programming language called &lt;a href="https://dart.dev/" rel="noopener noreferrer"&gt;&lt;strong&gt;Dart&lt;/strong&gt;&lt;/a&gt; for its development.&lt;/p&gt;

&lt;p&gt;Dart is simply a typed object programming language. Google created Dart back in 2011. The later version was released in November 2013. Its syntax is similar to JavaScript’s and it is quite easy to learn. &lt;/p&gt;

&lt;p&gt;Asides from Flutter, there are other frameworks for building cross-platform apps, (i.e apps that run across multiple operating systems) such as React Native, Xamarin, Phonegap, Ionic, etc. &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why you should Pick Flutter as your main Mobile Development Framework&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Several people have different opinions on how ‘efficient’ Flutter is. There are contrasting opinions on whether or not Flutter is the best framework for mobile development.&lt;/p&gt;

&lt;p&gt;While I do not necessarily argue that Flutter is the ‘it’ framework, here are the top reasons why Flutter is my go-to framework and why I feel you should learn Flutter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Ability to See Realtime Activities&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can easily check real-time activities on your app(s) with Flutter due to its &lt;a href="https://flutter.dev/docs/development/tools/hot-reload" rel="noopener noreferrer"&gt;&lt;em&gt;Hot Reload&lt;/em&gt;&lt;/a&gt; feature. React Native has this ability as well, but what Flutter provides is arguably better and more consistent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Easy to Learn And Use&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you have built apps using languages such as Java, React Native, C#, Swift, etc, you would notice how relatively easier building with Flutter is. Without much hassle, while using the inbuilt Flutter widgets, you can easily create your mobile apps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Good and Easy-to-understand Documentation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Flutter has one of the best documentations when compared to other frameworks. It also has a step-by-step guide to using the widgets and creating your first app with Flutter.&lt;/p&gt;

&lt;p&gt;Other reasons why you should choose Flutter as your main app development framework are: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Rapidly growing community.&lt;/li&gt;
&lt;li&gt;  Ideal for start-ups to create their MVPs etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;GETTING STARTED WITH FLUTTER&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/3o6ZtnsjdU1EYJ5nRC/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/3o6ZtnsjdU1EYJ5nRC/giphy.gif" alt="Let's get started"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this juncture, I believe you have been convinced to learn and start building with Flutter. So, how do you get started?&lt;br&gt;
There are several ways to learn a new concept. I have highlighted three common ways I have seen people get started with a new programming language or framework.&lt;br&gt;
&lt;em&gt;NB: The pathways highlighted were influenced by personal preferences and experiences.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A.  Use of Documentation:&lt;br&gt;
Flutter’s documentation is one of the easiest to understand and work with. To get started, go to the &lt;a href="https://flutter.dev" rel="noopener noreferrer"&gt;flutter official site&lt;/a&gt; and visit the &lt;a href="https://flutter.dev/docs/get-started/" rel="noopener noreferrer"&gt;&lt;em&gt;getting started&lt;/em&gt;&lt;/a&gt; page to begin your journey.&lt;/p&gt;

&lt;p&gt;B.  E-books:&lt;br&gt;
 There are numerous published beginner-friendly books to help you get started with developing apps with Flutter and Dart. Some recommendations are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Practical Flutter_ Improve your Mobile Development with Google’s Latest Open-Source SDK by Frank Zametti&lt;/li&gt;
&lt;li&gt;  Flutter Projects by Simone Alessandria&lt;/li&gt;
&lt;li&gt;  Flutter Libraries We Love by CodeMagic&lt;/li&gt;
&lt;li&gt;  Flutter in Action by Eric Windmill&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;C.  Tutorial Videos: &lt;br&gt;
There are quite a lot of cool, easy-to-follow-and-understand Flutter and Dart tutorial video courses on &lt;a href="https://www.udemy.com/" rel="noopener noreferrer"&gt;Udemy&lt;/a&gt;, &lt;a href="https://www.udacity.com/" rel="noopener noreferrer"&gt;Udacity&lt;/a&gt;, &lt;a href="https://www.coursera.org/" rel="noopener noreferrer"&gt;Coursera&lt;/a&gt; and others. I personally recommend the &lt;a href="https://www.udemy.com/course/flutter-bootcamp-with-dart/" rel="noopener noreferrer"&gt;Complete 2020 Flutter Development Bootcamp with Dart&lt;/a&gt; by Dr. Angela Yu, which is available on Udemy.&lt;br&gt;
There are also tons of YouTube Channels that teach building apps with Flutter. Some recommendations are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The Net Ninja&lt;/li&gt;
&lt;li&gt;  MTECHVIRAL&lt;/li&gt;
&lt;li&gt;  Reso Coder&lt;/li&gt;
&lt;li&gt;  Easy Approach&lt;/li&gt;
&lt;li&gt;  Marcus Ng&lt;/li&gt;
&lt;li&gt;  The Flutter Way&lt;/li&gt;
&lt;li&gt;  FilledStacks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bonus:&lt;/strong&gt; There are few subjective roadmaps on Github that people have curated to help beginners in their journey through Flutter. Here are some of them:&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Tarikul711" rel="noopener noreferrer"&gt;
        Tarikul711
      &lt;/a&gt; / &lt;a href="https://github.com/Tarikul711/flutter-development-roadmap" rel="noopener noreferrer"&gt;
        flutter-development-roadmap
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Flutter App Developer Roadmap - A complete roadmap to learn Flutter App Development. I tried to learn flutter using this roadmap. If you want to add something please contribute to the project. Happy Learning
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/olexale" rel="noopener noreferrer"&gt;
        olexale
      &lt;/a&gt; / &lt;a href="https://github.com/olexale/flutter_roadmap" rel="noopener noreferrer"&gt;
        flutter_roadmap
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Highly Subjective Roadmap to Flutter Development
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&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%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/DroidsOnRoids" rel="noopener noreferrer"&gt;
        DroidsOnRoids
      &lt;/a&gt; / &lt;a href="https://github.com/DroidsOnRoids/flutter-roadmap" rel="noopener noreferrer"&gt;
        flutter-roadmap
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Roadmap for Flutter developers in 2020
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;What Next After Learning The Basics?&lt;/strong&gt;
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Build Projects
&lt;/h4&gt;

&lt;p&gt;Learning gives you the knowledge, but practice gives you confidence. Practice what you have learned.&lt;br&gt;
Building projects after learning new concepts is very necessary. Its importance can never be overemphasized. &lt;br&gt;
Project ideas can come from different places - the environment, existing products, personal interests, etc. &lt;br&gt;
Here are some major sources you can get project ideas from:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;a href="https://github.com/florinpop17/app-ideas" rel="noopener noreferrer"&gt;A github repository for 80+ app ideas by Florin Pop&lt;/a&gt; - This repo is excellent for getting project ideas as it classifies the projects based on level.&lt;/li&gt;
&lt;li&gt; Design platforms and communities such as &lt;a href="https://dribbble.com/" rel="noopener noreferrer"&gt;Dribbble&lt;/a&gt;, &lt;a href="https://www.uplabs.com/" rel="noopener noreferrer"&gt;Uplabs&lt;/a&gt; - These websites house openly-available designs from designers around the world. You can choose to recreate these designs for personal improvements.&lt;/li&gt;
&lt;li&gt; Contribute to open source projects.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Show your works
&lt;/h4&gt;

&lt;p&gt;Let people that you do what you do. Make use of the various social media platforms to showcase how amazing you are at what you do. Share projects you have worked on.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Be your own hypeman&lt;/em&gt; - &lt;a href="https://twitter.com/Geektutor?s=20" rel="noopener noreferrer"&gt;GeekTutor&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In this article, we have explained what Flutter and Dart are, why you should learn and use Flutter, how to get started, and also the importance of building projects.&lt;br&gt;
If this helped in one way or the other, kindly like and share.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy Fluttering.&lt;/em&gt; &lt;/p&gt;

</description>
      <category>flutter</category>
      <category>beginners</category>
      <category>ios</category>
      <category>android</category>
    </item>
  </channel>
</rss>
