<?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: Zack Hoherchak</title>
    <description>The latest articles on DEV Community by Zack Hoherchak (@chektek).</description>
    <link>https://dev.to/chektek</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%2F123690%2F489fd337-b7a8-45cb-a5e9-1cb7b6632a78.PNG</url>
      <title>DEV Community: Zack Hoherchak</title>
      <link>https://dev.to/chektek</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chektek"/>
    <language>en</language>
    <item>
      <title>Update All Node Packages to Latest</title>
      <dc:creator>Zack Hoherchak</dc:creator>
      <pubDate>Fri, 13 Aug 2021 03:39:40 +0000</pubDate>
      <link>https://dev.to/chektek/update-all-node-packages-to-latest-5efc</link>
      <guid>https://dev.to/chektek/update-all-node-packages-to-latest-5efc</guid>
      <description>&lt;h1&gt;
  
  
  Update All Node Packages to Latest
&lt;/h1&gt;

&lt;p&gt;We’ve all returned to an old project only to find all of our dependencies outdated. Motivation to write code outside the&lt;br&gt;
workplace ebbs and flows, so I find myself reviving old projects frequently. Home projects are not typically all that&lt;br&gt;
large, so it is easy to update the dependencies all at once and verify the functionality is not compromised.&lt;/p&gt;

&lt;h2&gt;
  
  
  Warning
&lt;/h2&gt;

&lt;p&gt;Do not use this on a large project! You are almost guaranteed to come across package incompatibility. Another thing to&lt;br&gt;
note is that if you are doing this to a project using typescript and one of the big frameworks, there is a good chance&lt;br&gt;
that typescript is ahead by a version or two, so you will have to drop it back down to be compatible.&lt;/p&gt;

&lt;h2&gt;
  
  
  npm-check-updates
&lt;/h2&gt;

&lt;p&gt;The tool we are going to use is called &lt;a href="https://www.npmjs.com/package/npm-check-updates"&gt;npm-check-updates&lt;/a&gt;. You can&lt;br&gt;
find a full list of commands and flags &lt;a href="https://www.npmjs.com/package/npm-check-updates"&gt;here&lt;/a&gt;, but the quick steps are&lt;br&gt;
listed below.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the tool &lt;code&gt;npm install -g npm-check-updates&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Verify that your package.json is checked in to version control (the next command will overwrite the package.json)&lt;/li&gt;
&lt;li&gt;Update the package.json &lt;code&gt;ncu --upgrade&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Validate the changes to your package.json&lt;/li&gt;
&lt;li&gt;Install the new packages &lt;code&gt;npm install&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Congratulations, your project now has the latest node packages!&lt;/p&gt;

</description>
      <category>npm</category>
      <category>node</category>
    </item>
    <item>
      <title>11 Beginner Tips for Google's Flutter</title>
      <dc:creator>Zack Hoherchak</dc:creator>
      <pubDate>Wed, 26 May 2021 23:06:20 +0000</pubDate>
      <link>https://dev.to/chektek/11-beginner-tips-for-google-s-flutter-ood</link>
      <guid>https://dev.to/chektek/11-beginner-tips-for-google-s-flutter-ood</guid>
      <description>&lt;h1&gt;
  
  
  11 Beginner Tips for Google's Flutter
&lt;/h1&gt;

&lt;p&gt;Flutter has established itself as a major player in the cross-platform space. I've been working on a Flutter app for the last 30 days, and here are a few things I've learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trailing Commas Are Not Optional
&lt;/h2&gt;

&lt;p&gt;Keyboard shortcuts are great for speeding up productivity, and I tend to spam my "format code" keybind When I first started using Flutter, I was baffled about why sometimes my code would clean itself up, and other times it would remain a tangled mess. The Flutter dart formatter only works when you use trailing commas!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Without Commas&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2AqS8jF1kmAA0GLxvM-7fDpg.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AqS8jF1kmAA0GLxvM-7fDpg.png" alt="Without Commas"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;With Commas&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2AOhbSVxLOBCCJ-xzhiDpk-A.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AOhbSVxLOBCCJ-xzhiDpk-A.png" alt="With Commas"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Keep it Stateless
&lt;/h2&gt;

&lt;p&gt;Widgets are better without state. There are definitely scenarios where you will need to use a StatefulWidget, but use stateless widgets wherever possible! Handling state in other ways (see the "state" tip below) will make your code more maintainable in the future. Using factories can help with setting up stateless widgets. I use Google's Firestore, and providing a factory is a great way to map your data to a strongly typed object and keeping your widget stateless.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Flutter Factory&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2A0XecCJC8i4uSGj58lx8NVQ.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A0XecCJC8i4uSGj58lx8NVQ.png" alt="Flutter Factory"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  How to Handle Type Conflicts
&lt;/h2&gt;

&lt;p&gt;Dart exposes all of the available classes from the import, which comes at great convenience when you are not familiar with the exact name of the class you need, but can cause some overlap causing the compiler not to understand which classes you want to use. The application I'm working on uses many generic terms/classes, often causing these overlaps and causing obscure errors if you are unfamiliar with Flutter.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Full Import&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2ANSNUvKg6uEvtRhMMWxnS_w.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ANSNUvKg6uEvtRhMMWxnS_w.png" alt="Full Import"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are a few ways to avoid this situation. The first and my favorite is to hide the conflicting class.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Import with Hidden Class&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2AINFcnjxR0jHnHE4JC11-CA.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AINFcnjxR0jHnHE4JC11-CA.png" alt="Import with Hidden Class"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also specify all of the classes that you need from the import, which normally sounds favorable to me, but in this case, it can get a little verbose.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Import with Specific Classes&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2AhllPjx7yfq116yrSDc3bhA.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AhllPjx7yfq116yrSDc3bhA.png" alt="Import with Specific Classes"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lastly, if you actually need both classes in the same place, you will have to provide a prefix/alias to access what you want.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Import with Alias&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2AcnVxxO2aBJc6L3601vgjUA.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AcnVxxO2aBJc6L3601vgjUA.png" alt="Import with Alias"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Hide The Ugly Banner
&lt;/h2&gt;

&lt;p&gt;When I ran the starter app, the first thing I wanted to do was remove the ugly debug banner from the Material banner. You can add the debugShowCheckedModeBanner flag to your material app.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Debug Banner&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2AJ7-vmUGBB9Dr5zpHjVuY6Q.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AJ7-vmUGBB9Dr5zpHjVuY6Q.png" alt="Debug Banner"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;debugShowCheckedModeBanner: false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Streams &amp;amp; Futures (Asynchronous Data)
&lt;/h2&gt;

&lt;p&gt;Handling asynchronous actions is one of the most important things in any framework because every app connects to something somewhere. Coming from Typescript, I'm more familiar with the terms promise and observable, but the best ways to handle futures and streams in flutter is with FutureBuilder and StreamBuilder. These widgets take two main parameters, the call loading the data and a builder, which acts as the standard build method on StatelessWidget that updates when the request completes.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;FutureBuilder&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2AMHnkalWuDHVTNgnC1LxPjw.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AMHnkalWuDHVTNgnC1LxPjw.png" alt="FutureBuilder"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since my application does not need any fancy loading animations, I decided to set up a global loading widget inside a snapshot resolver class, so I'm not repeating the same if/else combination throughout my app.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Snapshot Resolver&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2AowbPefzP3Fkj_HSFS4nO0A.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AowbPefzP3Fkj_HSFS4nO0A.png" alt="Snapshot Resolver"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If your app needs more complicated custom animations depending on what is loading, then this resolver class is not for you, but the implementation would look the same, checking if the snapshot has data, an error, or otherwise return your loading widget.&lt;/p&gt;
&lt;h2&gt;
  
  
  More Widgets, More Better
&lt;/h2&gt;

&lt;p&gt;The first time I tried flutter (early 2019), I gave up on it quickly simply because I was not too fond of the nesting widgets structure. If you are not careful, you will end up with what I call triangle code&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Triangle Code&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2AXtup8wzAjdltb5M4Rr8LZg.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AXtup8wzAjdltb5M4Rr8LZg.png" alt="Triangle Code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After revisiting it more recently, I've realized that your widgets should never really reach extremes like shown above. Extracting out widgets into their own custom reusable classes can clean up your code significantly! Flutter's tooling makes this super easy with "Extract Widget."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Extract Widget&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2ArKe6-pU8-y923SYqns8kLw.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ArKe6-pU8-y923SYqns8kLw.png" alt="Extract Widget"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Test Everywhere and Test Often
&lt;/h2&gt;

&lt;p&gt;This sounds pretty straightforward, but consider it as a reminder. I was tempted to stick with testing on the Flutter Web deploy while writing a bulk of my code because it's easier on my laptop to run a browser than an emulator or dangle a phone from a cable, but even the base material components have quirks on different systems. Something as simple as a scrollbar worked on Android and the web but was not positioned correctly on iOS (see the SafeArea below).&lt;/p&gt;
&lt;h2&gt;
  
  
  State Management
&lt;/h2&gt;

&lt;p&gt;State management is always a big debate for any framework that doesn't directly set a standard for itself, and Flutter is no different. There are countless helper libraries out there, but &lt;a href="https://pub.dev/packages/get_it" rel="noopener noreferrer"&gt;getIt&lt;/a&gt; is the one that I found to be the most straightforward transitioning from an Angular web environment (for small apps). &lt;a href="https://pub.dev/packages/get_it" rel="noopener noreferrer"&gt;getIt&lt;/a&gt; allows you to set up singleton services that can then inject them throughout your application, similar to how Angular lets you inject singleton services through a component's constructor.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Service registration&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2AYchKFkepLT9D7VzrqqWagg.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AYchKFkepLT9D7VzrqqWagg.png" alt="Service registration"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once your services are set up, you can then access them anywhere in your application like this:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Accessing a Registered Singleton Service&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2A-wyYQMVqrrql5gkInUuqfg.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A-wyYQMVqrrql5gkInUuqfg.png" alt="Accessing a Registered Singleton Service"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Use the SafeArea
&lt;/h2&gt;

&lt;p&gt;With phones being released in all different shapes and sizes, it can be difficult to make sure your app will work as expected on all devices. One way to combat some of these issues is with the "SafeArea" widget. I was experiencing some issues with the scrollbar in my application on iOS devices because the calculation for the position was not taking into account the notch (a &lt;a href="https://github.com/flutter/flutter/issues/57920" rel="noopener noreferrer"&gt;bug issue&lt;/a&gt; has been filed on Github and will be fixed in a future release), but wrapping my widget in a SafeArea resolved the issue. When in doubt, use the SafeArea.&lt;/p&gt;
&lt;h2&gt;
  
  
  What to Do With JSON
&lt;/h2&gt;

&lt;p&gt;Most services providing data will be serving your app JSON, so we need to know how to handle taking that JSON and creating a strongly typed object. Flutter provides a package for translating JSON using json.decode(object) into a map of strings to dynamic objects. From there, you will want to create a factory that translates that map into a strongly typed object.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;JSON Page Factory&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2A_UInTQTGfDD49ZACVemLLw.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A_UInTQTGfDD49ZACVemLLw.png" alt="JSON Page Factory"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In my case, I'm getting my data from Google's Firestore, so I took it one step further to implement a factory that takes a Firestore DocumentSnapshot:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Google Firestore Factory&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2AHJxH_7B2Bc_qYFIurEktIA.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AHJxH_7B2Bc_qYFIurEktIA.png" alt="Google Firestore Factory"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One bad habit I brought with me from Typescript and Angular is creating a class (interface) for my JSON object and then a separate widget class for displaying/building the object on the screen. If your object is directly represented by widgets on the screen, you can go ahead and have your strongly typed object coming from JSON extend StatelessWidget!&lt;/p&gt;
&lt;h2&gt;
  
  
  IDE Extensions for Flutter
&lt;/h2&gt;

&lt;p&gt;You will obviously want/need to install the Dart language service and Flutter extensions, but there are a few other extensions that I've found really helpful while working on flutter.&lt;/p&gt;
&lt;h3&gt;
  
  
  Bracket Pair Colorizer 2
&lt;/h3&gt;

&lt;p&gt;Bracket Pair Colorizer 2 is beneficial for keeping track of what widget you are nested in. (If you use IntelliJ instead of VSCode, there is a "Rainbow Brackets" plugin that works similarly)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bracket Pair Colorizer 2&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2AzeQ4LLPydCIS9AEjeLBfrw.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AzeQ4LLPydCIS9AEjeLBfrw.png" alt="Bracket Pair Colorizer 2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here are some settings that I use in VSCode to turn down the rainbow explosion. This will match the default VSCode theme pretty closely:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;"bracket-pair-colorizer-2.colors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"bracket-pair-colorizer-2.scopeLineCSS"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"borderStyle : solid"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"borderWidth : 2px"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"borderColor : #6e5880"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"opacity: 1"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Indent Rainbow
&lt;/h3&gt;

&lt;p&gt;Indent Rainbow accomplishes a similar goal to Bracket Pair Colorizer 2, but it allows you to keep track of your indentation.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Indent Rainbow&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2Azt8dmEitgo3szt3afFgVVA.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2Azt8dmEitgo3szt3afFgVVA.png" alt="Indent Rainbow"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is available in both VSCode and Intellij. Here are some settings again to turn down the rainbows. I use opacity here, which should help this look pretty nice with most themes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;"indentRainbow.colors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"rgba(50,50,50,1.00)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"rgba(50,50,50,0.75)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"rgba(50,50,50,0.50)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"rgba(50,50,50,0.25)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"rgba(50,50,50,0.00)"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Indented Block Highlighting
&lt;/h3&gt;

&lt;p&gt;This is a recurring theme here, but this is another extension to help you keep track of what widget you are working in. This one will highlight the scope of the current code block. (I'm not sure there is an equivalent for IntelliJ on this one, but I think you can accomplish something similar with settings)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Indented Block Highlighting&lt;/em&gt;&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-1.medium.com%2Fmax%2F2000%2F1%2ACLdg7zkAzP9mjcn4j8K3fQ.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%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2ACLdg7zkAzP9mjcn4j8K3fQ.png" alt="Indented Block Highlighting"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Google's Flutter Framework
&lt;/h2&gt;

&lt;p&gt;Overall I'm very impressed with how far Flutter has come. After spending 30+ days working on an app sparingly after hours, as an Angular developer, I could pick it up and be effective quickly. Hopefully, you found some of these tips helpful, and follow for more!&lt;/p&gt;

</description>
      <category>google</category>
      <category>flutter</category>
      <category>beginners</category>
      <category>vscode</category>
    </item>
  </channel>
</rss>
