<?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: happyharis</title>
    <description>The latest articles on DEV Community by happyharis (@happyharis).</description>
    <link>https://dev.to/happyharis</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%2F308169%2F75f9fa7e-cced-4e14-a2a3-9396ab12b82d.png</url>
      <title>DEV Community: happyharis</title>
      <link>https://dev.to/happyharis</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/happyharis"/>
    <language>en</language>
    <item>
      <title>Flutter Web: Google Sign In</title>
      <dc:creator>happyharis</dc:creator>
      <pubDate>Tue, 28 Apr 2020 06:12:52 +0000</pubDate>
      <link>https://dev.to/happyharis/flutter-web-google-sign-in-42bb</link>
      <guid>https://dev.to/happyharis/flutter-web-google-sign-in-42bb</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/E8kgHqEz6fs"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Flutter is still gaining traction and people are learning and exploring the wonders of Flutter. Flutter web is in the same stance. And now, you might want to have some authentication to be inserted in you flutter web or you either have an auth service and want to see if it's compatible to the web.&lt;/p&gt;

&lt;p&gt;1 . Install google sign in in your pubspec.yaml file. The web implementation of google sign is in the official package.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="c1"&gt;// pubspec.yaml&lt;/span&gt;

&lt;span class="nl"&gt;google_sign_in:&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;latest&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;2 . Then, you have to go to the your index.html file and add your google sign in meta tag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"google-signin-client_id"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"YOUR_CLIENT_ID.apps.googleusercontent.com"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;3 . To get your client id, you have to your credentials page in your google api developer console through this website: &lt;a href="https://console.developers.google.com/apis/credentials"&gt;https://console.developers.google.com/apis/credentials&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;4 . Under your OAuth 2.0 Client IDs, if you have the Web Client api, just copy the client id and paste in your index.html.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--f2xMQbaZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/80448924-5b472680-8950-11ea-8fba-373bb8d7e437.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--f2xMQbaZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/80448924-5b472680-8950-11ea-8fba-373bb8d7e437.png" alt="image"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"google-signin-client_id"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"afda89df7b328sadf.apps.googleusercontent.com"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;4 .a. If you do not have the Web Client api, make sure you configure your OAuth screen. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--L7dPQ-u0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/80449184-06f07680-8951-11ea-9589-cd562970e07d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--L7dPQ-u0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/80449184-06f07680-8951-11ea-9589-cd562970e07d.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To configure, and you don't have G-Suite, then you can only make it external.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5td1IrvH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/80449473-d0ffc200-8951-11ea-830f-7f6eb7d0a5eb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5td1IrvH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/80449473-d0ffc200-8951-11ea-830f-7f6eb7d0a5eb.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you're in, you have to update the name of the project and save it&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--B75-lLkE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/80449302-5afb5b00-8951-11ea-8ca5-04e64d43f76a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B75-lLkE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/80449302-5afb5b00-8951-11ea-8ca5-04e64d43f76a.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4 .b. Then create the OAuth credential web client. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2h1eDL9c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/80449611-2fc53b80-8952-11ea-98b1-044ad31f97b3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2h1eDL9c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/80449611-2fc53b80-8952-11ea-98b1-044ad31f97b3.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose Web application. Don't need to rename the default name&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YfmEjAAU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/80449677-52575480-8952-11ea-8a5c-6a50f162ed81.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YfmEjAAU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/80449677-52575480-8952-11ea-8a5c-6a50f162ed81.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And set the authorised Javascript origins to &lt;a href="http://localhost:5000"&gt;http://localhost:5000&lt;/a&gt; for debugging.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YbYVsy4x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/80449760-8763a700-8952-11ea-9036-c1c9ec170d44.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YbYVsy4x--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/80449760-8763a700-8952-11ea-9036-c1c9ec170d44.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy the client id and paste in your index.html.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6cL31qcq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/80449921-e9241100-8952-11ea-8695-841adb92085c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6cL31qcq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/80449921-e9241100-8952-11ea-8695-841adb92085c.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5 . Go in the settings of the Web Client and make sure your has authorised Javascript origins to &lt;a href="http://localhost:5000"&gt;http://localhost:5000&lt;/a&gt; for debugging.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3sspBrRL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/80450189-9139da00-8953-11ea-9388-5b673c989e8e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3sspBrRL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/80450189-9139da00-8953-11ea-9388-5b673c989e8e.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6 . Instruction Source from: &lt;a href="https://pub.dev/packages/google_sign_in_web"&gt;google_sign_in_web package&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Normally &lt;code&gt;flutter run&lt;/code&gt; starts in a random port. In the case where you need to deal with authentication like the above, that's not the most appropriate behavior.&lt;/p&gt;

&lt;p&gt;You can tell &lt;code&gt;flutter run&lt;/code&gt; to listen for requests in a specific host and port with the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flutter run -d chrome --web-hostname localhost --web-port 5000
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;You can set your launch.json in your VSCode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"configurations"&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Flutter with Web Port 5000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"launch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dart"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&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="s2"&gt;"--web-port"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"5000"&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="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;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;7 . Add the import:&lt;br&gt;
&lt;/p&gt;

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



&lt;p&gt;8 . Initialize GoogleSignIn with the scopes you want:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;GoogleSignIn&lt;/span&gt; &lt;span class="n"&gt;_googleSignIn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GoogleSignIn&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
  &lt;span class="nl"&gt;scopes:&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;
    &lt;span class="s"&gt;'email'&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
  &lt;span class="o"&gt;],&lt;/span&gt;
&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;9 . You can now use the &lt;code&gt;GoogleSignIn&lt;/code&gt; class to authenticate in your Dart code, e.g.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;Future&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_handleSignIn&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="n"&gt;async&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;await&lt;/span&gt; &lt;span class="n"&gt;_googleSignIn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;signIn&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



</description>
      <category>flutter</category>
      <category>flutterweb</category>
      <category>google</category>
      <category>auth</category>
    </item>
    <item>
      <title>Flutter Web: Google Maps</title>
      <dc:creator>happyharis</dc:creator>
      <pubDate>Mon, 27 Jan 2020 13:44:42 +0000</pubDate>
      <link>https://dev.to/happyharis/flutter-web-google-maps-381a</link>
      <guid>https://dev.to/happyharis/flutter-web-google-maps-381a</guid>
      <description>&lt;p&gt;Google Maps was implemented in Flutter late last year and people were excited to use the plugin. However, there are an increasing number of people who are excited on the progress of Flutter Web. However, the flutter team did not release an official flutter web implementation of google maps.&lt;/p&gt;

&lt;p&gt;Lucky for you guys, here is a quick guide on how to implement Google Maps in Flutter Web.&lt;/p&gt;

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

&lt;p&gt;First, you need the Google Map api keys. Before initialising, you have to have a project in your Google Cloud Platform. Create one if you don't have one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--x_j5mqSr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://user-images.githubusercontent.com/31005114/73162693-57292400-4129-11ea-9c86-c1fbb4c78a61.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--x_j5mqSr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://user-images.githubusercontent.com/31005114/73162693-57292400-4129-11ea-9c86-c1fbb4c78a61.gif" alt="create new google cloud project"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, search for "Javascript Map" and enable it. Otherwise, the api key will shout an error that says the google map service is not activated.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Fmhs0BvJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://user-images.githubusercontent.com/31005114/73162526-ed107f00-4128-11ea-8f43-90e32673fe11.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Fmhs0BvJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://user-images.githubusercontent.com/31005114/73162526-ed107f00-4128-11ea-8f43-90e32673fe11.gif" alt="search javascript google map api service"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Initialise the google map js sdk in our index.html file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://maps.googleapis.com/maps/api/js?key=&amp;lt;YOUR-API-KEY&amp;gt;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And import &lt;a href="https://pub.dev/packages/google_maps"&gt;google_maps&lt;/a&gt; in pubspec.yaml:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;dependencies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;google_maps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;^3.4.1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And here is how you create a google map widget.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'dart:html'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:flutter/material.dart'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:google_maps/google_maps.dart'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'dart:ui'&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;ui&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="nf"&gt;getMap&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="kt"&gt;String&lt;/span&gt; &lt;span class="n"&gt;htmlId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"7"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;// ignore: undefined_prefixed_name&lt;/span&gt;
  &lt;span class="n"&gt;ui&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;platformViewRegistry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;registerViewFactory&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;htmlId&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;viewId&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;myLatlng&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;LatLng&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.3521&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;103.8198&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

    &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;mapOptions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MapOptions&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
      &lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="na"&gt;zoom&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
      &lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="na"&gt;center&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;LatLng&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;1.3521&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;103.8198&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

    &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;elem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;DivElement&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
      &lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;htmlId&lt;/span&gt;
      &lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"100%"&lt;/span&gt;
      &lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"100%"&lt;/span&gt;
      &lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;border&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'none'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GMap&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;elem&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;mapOptions&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

    &lt;span class="n"&gt;Marker&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MarkerOptions&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
      &lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="na"&gt;position&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;myLatlng&lt;/span&gt;
      &lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="na"&gt;map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt;
      &lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'Hello World!'&lt;/span&gt;
      &lt;span class="o"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;elem&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="o"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;HtmlElementView&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;viewType:&lt;/span&gt; &lt;span class="n"&gt;htmlId&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;htmlId&lt;/code&gt; - a unique id to name the div element&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ui.platformViewRegistry.registerViewFactory&lt;/code&gt; - creates a webview in dart&lt;/p&gt;

&lt;p&gt;&lt;code&gt;LatLng(1.3521, 103.8198)&lt;/code&gt; - class that takes latitude and longitude of a location&lt;/p&gt;

&lt;p&gt;&lt;code&gt;DivElement()&lt;/code&gt; - class to create a dive element&lt;/p&gt;

&lt;p&gt;&lt;code&gt;GMap&lt;/code&gt; - creates a google map element&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Marker()&lt;/code&gt; - the red icon that shows in your &lt;code&gt;LatLng&lt;/code&gt; in google map&lt;/p&gt;

&lt;p&gt;&lt;code&gt;HtmlElementView()&lt;/code&gt; - creates a platform view for Flutter Web&lt;/p&gt;

&lt;p&gt;You can customise the &lt;a href="https://developers-dot-devsite-v2-prod.appspot.com/maps/documentation/javascript/examples/marker-animations"&gt;animation&lt;/a&gt; and looks of your marker, &lt;a href="https://developers-dot-devsite-v2-prod.appspot.com/maps/documentation/javascript/examples/icon-simple"&gt;here&lt;/a&gt;.&lt;br&gt;
You can add a info windows as such:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;marker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Marker&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MarkerOptions&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
      &lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="na"&gt;position&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;myLatlng&lt;/span&gt;
      &lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="na"&gt;map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt;
      &lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="na"&gt;title&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'Hello World!'&lt;/span&gt;
      &lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="na"&gt;label&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'h'&lt;/span&gt;
      &lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="na"&gt;icon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png'&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

    &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;infoWindow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;InfoWindow&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;InfoWindowOptions&lt;/span&gt;&lt;span class="o"&gt;()..&lt;/span&gt;&lt;span class="na"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;contentString&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;marker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;listen&lt;/span&gt;&lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;infoWindow&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;open&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;marker&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="n"&gt;contentString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'&amp;lt;div id="content"&amp;gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'&amp;lt;div id="siteNotice"&amp;gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'&amp;lt;/div&amp;gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'&amp;lt;h1 id="firstHeading" class="firstHeading"&amp;gt;Uluru&amp;lt;/h1&amp;gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'&amp;lt;div id="bodyContent"&amp;gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Uluru&amp;lt;/b&amp;gt;, also referred to as &amp;lt;b&amp;gt;Ayers Rock&amp;lt;/b&amp;gt;, is a large '&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'sandstone rock formation in the southern part of the '&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'Northern Territory, central Australia. It lies 335&amp;amp;#160;km (208&amp;amp;#160;mi) '&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'south west of the nearest large town, Alice Springs; 450&amp;amp;#160;km '&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'(280&amp;amp;#160;mi) by road. Kata Tjuta and Uluru are the two major '&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'features of the Uluru - Kata Tjuta National Park. Uluru is '&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'sacred to the Pitjantjatjara and Yankunytjatjara, the '&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'Aboriginal people of the area. It has many springs, waterholes, '&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'rock caves and ancient paintings. Uluru is listed as a World '&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'Heritage Site.&amp;lt;/p&amp;gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'&amp;lt;p&amp;gt;Attribution: Uluru, &amp;lt;a href="https://en.wikipedia.org/w/index.php?title=Uluru&amp;amp;oldid=297882194"&amp;gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'https://en.wikipedia.org/w/index.php?title=Uluru&amp;lt;/a&amp;gt; '&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'(last visited June 22, 2009).&amp;lt;/p&amp;gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'&amp;lt;/div&amp;gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
    &lt;span class="s"&gt;'&amp;lt;/div&amp;gt;'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Hope you find this tutorial useful!&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>flutterweb</category>
      <category>webdev</category>
      <category>maps</category>
    </item>
    <item>
      <title>Flutter Web: Sentry</title>
      <dc:creator>happyharis</dc:creator>
      <pubDate>Wed, 22 Jan 2020 03:34:29 +0000</pubDate>
      <link>https://dev.to/happyharis/flutter-web-sentry-kda</link>
      <guid>https://dev.to/happyharis/flutter-web-sentry-kda</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/rteGnESc-p4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;When you have a production ready application, how are you going to catch those pesky bugs? &lt;/p&gt;

&lt;p&gt;Even if your users has a specific use case, it takes a lot of work to figure which exact code is giving the bug. &lt;/p&gt;

&lt;p&gt;No worries, &lt;a href="https://sentry.io/"&gt;Sentry&lt;/a&gt; is here. It is a platform that helps you show the errors that you might not have thought of in your production app.&lt;/p&gt;

&lt;p&gt;Now that Flutter Web is in beta, we gotta catch those pesky bugs when we release our Flutter Web apps out there (maybe using &lt;a href=""&gt;Firebase hosting&lt;/a&gt;). Flutter has release some packages that can be used in the Flutter Web, and one of it is &lt;a href="https://pub.dev/packages/sentry"&gt;Sentry&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once you have sign up with an account, create a project under others. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--znIHV9b3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/72862763-42075c00-3d09-11ea-91e9-e36f72efc741.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--znIHV9b3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/72862763-42075c00-3d09-11ea-91e9-e36f72efc741.png" alt="Screenshot of Creation of Project Other in Sentry"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sadly, Flutter is not one of the platforms.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Then go to your settings, and get your DSN keys. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yi9u504h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/72863229-cc03f480-3d0a-11ea-9654-c65b4e30725b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yi9u504h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/72863229-cc03f480-3d0a-11ea-9654-c65b4e30725b.png" alt="DSN Keys"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"A DSN, or Data Source Name. It looks a lot like a standard URL, but it’s actually just a representation of the configuration required by the Sentry SDKs. It consists of a few pieces, including the protocol, public key, the server address, and the project identifier." Source: &lt;a href="https://docs.sentry.io/error-reporting/quickstart/?platform=javascript#configure-the-dsn"&gt;Sentry&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, we have to install the Sentry dependencies in our Flutter Web app.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;// In pubspec.yaml&lt;/span&gt;

&lt;span class="na"&gt;dependencies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;sentry&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;lt;latest version&amp;gt;&lt;/span&gt;

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


&lt;p&gt;Next, we have to initialise our sentry client with our DSN (that we got earlier) in our app and send our first error!&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="c1"&gt;// In main.dart&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:sentry/sentry.dart'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;SentryClient&lt;/span&gt; &lt;span class="n"&gt;sentry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;SentryClient&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;dsn:&lt;/span&gt; &lt;span class="n"&gt;YOUR_DSN&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="n"&gt;async&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;StateError&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'This is a Dart exception.'&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stackTrace&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;await&lt;/span&gt; &lt;span class="n"&gt;sentry&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;captureException&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;exception:&lt;/span&gt; &lt;span class="n"&gt;error&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;stackTrace:&lt;/span&gt; &lt;span class="n"&gt;stackTrace&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
    &lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;It will be reflected in your Sentry board as such:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0aAexH5X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/72862722-23a16080-3d09-11ea-87e0-f66ad8afc269.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0aAexH5X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/31005114/72862722-23a16080-3d09-11ea-87e0-f66ad8afc269.png" alt="First Issue in Sentry"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if we want to catch any uncaught error?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Good question. You will have to use runZoned to catch all errors by flutter. &lt;/p&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/flutter/flutter/issues/49199"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--vJ70wriM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-ba8488d21cd8ee1fee097b8410db9deaa41d0ca30b004c0c63de0a479114156f.svg"&gt;
      &lt;span class="issue-title"&gt;
        On the Web Window callback fields should preserve the zone
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#49199&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/happyharis"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--spC0NuR0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://avatars1.githubusercontent.com/u/31005114%3Fv%3D4" alt="happyharis avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/happyharis"&gt;happyharis&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/flutter/flutter/issues/49199"&gt;&lt;time&gt;Jan 21, 2020&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      
&lt;h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;Steps to Reproduce&lt;/h2&gt;

&lt;p&gt;First, I tested the standalone method &lt;code&gt;sentry.captureException()&lt;/code&gt; on chrome. It works. This would be recorded in the Sentry dashboard.&lt;/p&gt;
&lt;div class="highlight highlight-source-dart"&gt;&lt;pre&gt;
&lt;span class="pl-k"&gt;import&lt;/span&gt; &lt;span class="pl-s"&gt;'package:sentry/sentry.dart'&lt;/span&gt;;

&lt;span class="pl-k"&gt;final&lt;/span&gt; &lt;span class="pl-c1"&gt;SentryClient&lt;/span&gt; sentry &lt;span class="pl-k"&gt;=&lt;/span&gt; &lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-c1"&gt;SentryClient&lt;/span&gt;(dsn&lt;span class="pl-k"&gt;:&lt;/span&gt; &lt;span class="pl-c1"&gt;YOUR_DSN&lt;/span&gt;);

&lt;span class="pl-en"&gt;main&lt;/span&gt;() &lt;span class="pl-k"&gt;async&lt;/span&gt; {
  &lt;span class="pl-k"&gt;try&lt;/span&gt; {
    &lt;span class="pl-k"&gt;throw&lt;/span&gt; &lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-c1"&gt;StateError&lt;/span&gt;(&lt;span class="pl-s"&gt;'This is a Dart exception.'&lt;/span&gt;);
  } &lt;span class="pl-k"&gt;catch&lt;/span&gt;(error, stackTrace) {
    &lt;span class="pl-k"&gt;await&lt;/span&gt; sentry.&lt;span class="pl-en"&gt;captureException&lt;/span&gt;(
      exception&lt;span class="pl-k"&gt;:&lt;/span&gt; error,
      stackTrace&lt;span class="pl-k"&gt;:&lt;/span&gt; stackTrace,
    );
  }
}&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Second, I used the repo &lt;a href="https://github.com/flutter/crashy/blob/master/lib/main.dart"&gt;crashy's &lt;code&gt;main.dart&lt;/code&gt;&lt;/a&gt; code to test Sentry.&lt;/p&gt;
&lt;p&gt;However, when these three methods below ran, it did not get recorded in Sentry:&lt;/p&gt;
&lt;div class="highlight highlight-source-dart"&gt;&lt;pre&gt;&lt;span class="pl-c"&gt;// First, not recorded&lt;/span&gt;
&lt;span class="pl-k"&gt;throw&lt;/span&gt; &lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-c1"&gt;StateError&lt;/span&gt;(&lt;span class="pl-s"&gt;'This is a Dart exception.'&lt;/span&gt;);

&lt;span class="pl-c"&gt;// Second, not recorded&lt;/span&gt;
&lt;span class="pl-en"&gt;foo&lt;/span&gt;() &lt;span class="pl-k"&gt;async&lt;/span&gt; {
  &lt;span class="pl-k"&gt;throw&lt;/span&gt; &lt;span class="pl-k"&gt;new&lt;/span&gt; &lt;span class="pl-c1"&gt;StateError&lt;/span&gt;(&lt;span class="pl-s"&gt;'This is an async Dart exception.'&lt;/span&gt;);
}
&lt;span class="pl-en"&gt;bar&lt;/span&gt;() &lt;span class="pl-k"&gt;async&lt;/span&gt; {
  &lt;span class="pl-k"&gt;await&lt;/span&gt; &lt;span class="pl-en"&gt;foo&lt;/span&gt;();
}
&lt;span class="pl-k"&gt;await&lt;/span&gt; &lt;span class="pl-en"&gt;bar&lt;/span&gt;();

&lt;span class="pl-c"&gt;// Third, not recorded&lt;/span&gt;
&lt;span class="pl-k"&gt;final&lt;/span&gt; channel &lt;span class="pl-k"&gt;=&lt;/span&gt; &lt;span class="pl-k"&gt;const&lt;/span&gt; &lt;span class="pl-c1"&gt;MethodChannel&lt;/span&gt;(&lt;span class="pl-s"&gt;'crashy-custom-channel'&lt;/span&gt;);
&lt;span class="pl-k"&gt;await&lt;/span&gt; channel.&lt;span class="pl-en"&gt;invokeMethod&lt;/span&gt;(&lt;span class="pl-s"&gt;'blah'&lt;/span&gt;);&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Tested again with iOS 13.3 simulator (iPhone Max 11), and all of these methods above were working.&lt;/p&gt;

  Logs

&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;// Ran flutter run -d chrome --verbose

[  +27 ms] executing: [/Users/haris/Development/flutter/] git -c log.showSignature=false log -n 1
--pretty=format:%H
[  +43 ms] Exit code 0 from: git -c log.showSignature=false log -n 1 --pretty=format:%H
[        ] 18cd7a3601bcffb36fdf2f679f763b5e827c2e8e
[        ] executing: [/Users/haris/Development/flutter/] git describe --match v&lt;span class="pl-k"&gt;*&lt;/span&gt;.&lt;span class="pl-k"&gt;*&lt;/span&gt;.&lt;span class="pl-k"&gt;*&lt;/span&gt; --first-parent
--long --tags
[  +36 ms] Exit code 0 from: git describe --match v&lt;span class="pl-k"&gt;*&lt;/span&gt;.&lt;span class="pl-k"&gt;*&lt;/span&gt;.&lt;span class="pl-k"&gt;*&lt;/span&gt; --first-parent --long --tags
[        ] v1.12.13+hotfix.6-0-g18cd7a360
[   +8 ms] executing: [/Users/haris/Development/flutter/] git rev-parse --abbrev-ref --symbolic @{u}
[  +14 ms] Exit code 0 from: git rev-parse --abbrev-ref --symbolic @{u}
[        ] origin/beta
[        ] executing: [/Users/haris/Development/flutter/] git ls-remote --get-url origin
[  +17 ms] Exit code 0 from: git ls-remote --get-url origin
[        ] https://github.com/flutter/flutter.git
[  +54 ms] executing: [/Users/haris/Development/flutter/] git rev-parse --abbrev-ref HEAD
[  +12 ms] Exit code 0 from: git rev-parse --abbrev-ref HEAD
[        ] beta
[   +7 ms] executing: sw_vers -productName
[  +15 ms] Exit code 0 from: sw_vers -productName
[        ] Mac OS X
[        ] executing: sw_vers -productVersion
[  +16 ms] Exit code 0 from: sw_vers -productVersion
[        ] 10.15.2
[        ] executing: sw_vers -buildVersion
[  +15 ms] Exit code 0 from: sw_vers -buildVersion
[        ] 19C57
[  +31 ms] executing: /usr/bin/xcode-select --print-path
[  +14 ms] Exit code 0 from: /usr/bin/xcode-select --print-path
[        ] /Applications/Xcode.app/Contents/Developer
[   +1 ms] executing: /usr/bin/xcodebuild -version
[ +966 ms] Exit code 0 from: /usr/bin/xcodebuild -version
[   +2 ms] Xcode 11.3.1
           Build version 11C504
[  +57 ms] executing: /Users/haris/Library/Android/sdk/platform-tools/adb devices -l
[   +7 ms] Exit code 0 from: /Users/haris/Library/Android/sdk/platform-tools/adb devices -l
[        ] List of devices attached
[  +13 ms] executing:
/Users/haris/Development/flutter/bin/cache/artifacts/libimobiledevice/idevice_id -h
[  +89 ms] /usr/bin/xcrun simctl list --json devices
[ +167 ms] Artifact Instance of &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;AndroidMavenArtifacts&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; is not required, skipping update.
[        ] Artifact Instance of &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;AndroidGenSnapshotArtifacts&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; is not required, skipping update.
[        ] Artifact Instance of &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;AndroidInternalBuildArtifacts&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; is not required, skipping update.
[        ] Artifact Instance of &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;IOSEngineArtifacts&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; is not required, skipping update.
[   +7 ms] Artifact Instance of &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;WindowsEngineArtifacts&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; is not required, skipping update.
[        ] Artifact Instance of &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;MacOSEngineArtifacts&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; is not required, skipping update.
[        ] Artifact Instance of &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;LinuxEngineArtifacts&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; is not required, skipping update.
[        ] Artifact Instance of &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;LinuxFuchsiaSDKArtifacts&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; is not required, skipping update.
[        ] Artifact Instance of &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;MacOSFuchsiaSDKArtifacts&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; is not required, skipping update.
[        ] Artifact Instance of &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;FlutterRunnerSDKArtifacts&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; is not required, skipping update.
[        ] Artifact Instance of &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;FlutterRunnerDebugSymbols&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; is not required, skipping update.
[  +61 ms] Found plugin firebase_core at
/Users/haris/Development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.4.3+1/
[   +9 ms] Found plugin firebase_core_web at
/Users/haris/Development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core_web-0.1.1+1/
[  +72 ms] Found plugin url_launcher at
/Users/haris/Development/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-5.4.1/
[   +5 ms] Found plugin url_launcher_macos at
/Users/haris/Development/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_macos-0.0.1+2/
[   +6 ms] Found plugin url_launcher_web at
/Users/haris/Development/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_web-0.1.0+2/
[  +56 ms] Found plugin firebase_core at
/Users/haris/Development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.4.3+1/
[   +7 ms] Found plugin firebase_core_web at
/Users/haris/Development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core_web-0.1.1+1/
[  +33 ms] Found plugin url_launcher at
/Users/haris/Development/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-5.4.1/
[   +2 ms] Found plugin url_launcher_macos at
/Users/haris/Development/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_macos-0.0.1+2/
[   +2 ms] Found plugin url_launcher_web at
/Users/haris/Development/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_web-0.1.0+2/
[  +77 ms] Generating
/Users/haris/Desktop/linktree_public_demo/android/app/src/main/java/io/flutter/plugins/GeneratedPlug
inRegistrant.java
⣽[ +441 ms] executing: [/Users/haris/Desktop/linktree_public_demo/ios/Runner.xcodeproj/]
/usr/bin/xcodebuild -project /Users/haris/Desktop/linktree_public_demo/ios/Runner.xcodeproj -target
Runner -showBuildSettings
[        ] executing: [/Users/haris/Desktop/linktree_public_demo/ios/Runner.xcodeproj/]
/usr/bin/xcodebuild -project /Users/haris/Desktop/linktree_public_demo/ios/Runner.xcodeproj -target
Runner -showBuildSettings
 
(This is taking an unexpectedly long time.)⣷[+3018 ms] Build settings &lt;span class="pl-k"&gt;for&lt;/span&gt; action build and target Runner:
                        ACTION = build
                        AD_HOC_CODE_SIGNING_ALLOWED = NO
                        ALTERNATE_GROUP = staff
                        ALTERNATE_MODE = u+w,go-w,a+rX
                        ALTERNATE_OWNER = haris
                        ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO
                        ALWAYS_SEARCH_USER_PATHS = NO
                        ALWAYS_USE_SEPARATE_HEADERMAPS = NO
                        APPLE_INTERNAL_DEVELOPER_DIR = /AppleInternal/Developer
                        APPLE_INTERNAL_DIR = /AppleInternal
                        APPLE_INTERNAL_DOCUMENTATION_DIR = /AppleInternal/Documentation
                        APPLE_INTERNAL_LIBRARY_DIR = /AppleInternal/Library
                        APPLE_INTERNAL_TOOLS = /AppleInternal/Developer/Tools
                        APPLICATION_EXTENSION_API_ONLY = NO
                        APPLY_RULES_IN_COPY_FILES = NO
                        APPLY_RULES_IN_COPY_HEADERS = NO
                        ARCHS = armv7 arm64
                        ARCHS_STANDARD = armv7 arm64
                        ARCHS_STANDARD_32_64_BIT = armv7 arm64
                        ARCHS_STANDARD_32_BIT = armv7
                        ARCHS_STANDARD_64_BIT = arm64
                        ARCHS_STANDARD_INCLUDING_64_BIT = armv7 arm64
                        ARCHS_UNIVERSAL_IPHONE_OS = armv7 arm64
                        ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon
                        AVAILABLE_PLATFORMS = appletvos appletvsimulator iphoneos iphonesimulator
                        macosx watchos watchsimulator
                        BITCODE_GENERATION_MODE = marker
                        BUILD_ACTIVE_RESOURCES_ONLY = NO
                        BUILD_COMPONENTS = headers build
                        BUILD_DIR = /Users/haris/Desktop/linktree_public_demo/build/ios
                        BUILD_LIBRARY_FOR_DISTRIBUTION = NO
                        BUILD_ROOT = /Users/haris/Desktop/linktree_public_demo/build/ios
                        BUILD_STYLE = 
                        BUILD_VARIANTS = normal
                        BUILT_PRODUCTS_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Release-iphoneos
                        CACHE_ROOT =
                        /var/folders/nl/6t9k7tpd5994g139jpf4f2mr0000gn/C/com.apple.DeveloperTools/11
                        .3.1-11C504/Xcode
                        CCHROOT =
                        /var/folders/nl/6t9k7tpd5994g139jpf4f2mr0000gn/C/com.apple.DeveloperTools/11
                        .3.1-11C504/Xcode
                        CHMOD = /bin/chmod
                        CHOWN = /usr/sbin/chown
                        CLANG_ANALYZER_NONNULL = YES
                        CLANG_CXX_LANGUAGE_STANDARD = gnu++0x
                        CLANG_CXX_LIBRARY = libc++
                        CLANG_ENABLE_MODULES = YES
                        CLANG_ENABLE_OBJC_ARC = YES
                        CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES
                        CLANG_WARN_BOOL_CONVERSION = YES
                        CLANG_WARN_COMMA = YES
                        CLANG_WARN_CONSTANT_CONVERSION = YES
                        CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES
                        CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR
                        CLANG_WARN_EMPTY_BODY = YES
                        CLANG_WARN_ENUM_CONVERSION = YES
                        CLANG_WARN_INFINITE_RECURSION = YES
                        CLANG_WARN_INT_CONVERSION = YES
                        CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES
                        CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES
                        CLANG_WARN_OBJC_LITERAL_CONVERSION = YES
                        CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR
                        CLANG_WARN_RANGE_LOOP_ANALYSIS = YES
                        CLANG_WARN_STRICT_PROTOTYPES = YES
                        CLANG_WARN_SUSPICIOUS_MOVE = YES
                        CLANG_WARN_UNREACHABLE_CODE = YES
                        CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
                        CLASS_FILE_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos/Runner.build/JavaClasses
                        CLEAN_PRECOMPS = YES
                        CLONE_HEADERS = NO
                        CODESIGNING_FOLDER_PATH =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Release-iphoneos/Runner.
                        app
                        CODE_SIGNING_ALLOWED = YES
                        CODE_SIGNING_REQUIRED = YES
                        CODE_SIGN_CONTEXT_CLASS = XCiPhoneOSCodeSignContext
                        CODE_SIGN_IDENTITY = iPhone Developer
                        CODE_SIGN_INJECT_BASE_ENTITLEMENTS = YES
                        COLOR_DIAGNOSTICS = NO
                        COMBINE_HIDPI_IMAGES = NO
                        COMPILER_INDEX_STORE_ENABLE = Default
                        COMPOSITE_SDK_DIRS =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/CompositeSDKs
                        COMPRESS_PNG_FILES = YES
                        CONFIGURATION = Release
                        CONFIGURATION_BUILD_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Release-iphoneos
                        CONFIGURATION_TEMP_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos
                        CONTENTS_FOLDER_PATH = Runner.app
                        COPYING_PRESERVES_HFS_DATA = NO
                        COPY_HEADERS_RUN_UNIFDEF = NO
                        COPY_PHASE_STRIP = NO
                        COPY_RESOURCES_FROM_STATIC_FRAMEWORKS = YES
                        CORRESPONDING_SIMULATOR_PLATFORM_DIR =
                        /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platfor
                        m
                        CORRESPONDING_SIMULATOR_PLATFORM_NAME = iphonesimulator
                        CORRESPONDING_SIMULATOR_SDK_DIR =
                        /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platfor
                        m/Developer/SDKs/iPhoneSimulator13.2.sdk
                        CORRESPONDING_SIMULATOR_SDK_NAME = iphonesimulator13.2
                        CP = /bin/cp
                        CREATE_INFOPLIST_SECTION_IN_BINARY = NO
                        CURRENT_ARCH = arm64
                        CURRENT_PROJECT_VERSION = 1
                        CURRENT_VARIANT = normal
                        DEAD_CODE_STRIPPING = YES
                        DEBUGGING_SYMBOLS = YES
                        DEBUG_INFORMATION_FORMAT = dwarf-with-dsym
                        DEFAULT_COMPILER = com.apple.compilers.llvm.clang.1_0
                        DEFAULT_DEXT_INSTALL_PATH = /System/Library/DriverExtensions
                        DEFAULT_KEXT_INSTALL_PATH = /System/Library/Extensions
                        DEFINES_MODULE = NO
                        DEPLOYMENT_LOCATION = NO
                        DEPLOYMENT_POSTPROCESSING = NO
                        DEPLOYMENT_TARGET_CLANG_ENV_NAME = IPHONEOS_DEPLOYMENT_TARGET
                        DEPLOYMENT_TARGET_CLANG_FLAG_NAME = miphoneos-version-min
                        DEPLOYMENT_TARGET_CLANG_FLAG_PREFIX = -miphoneos-version-min=
                        DEPLOYMENT_TARGET_LD_ENV_NAME = IPHONEOS_DEPLOYMENT_TARGET
                        DEPLOYMENT_TARGET_LD_FLAG_NAME = ios_version_min
                        DEPLOYMENT_TARGET_SETTING_NAME = IPHONEOS_DEPLOYMENT_TARGET
                        DEPLOYMENT_TARGET_SUGGESTED_VALUES = 8.0 8.1 8.2 8.3 8.4 9.0 9.1 9.2 9.3
                        10.0 10.1 10.2 10.3 11.0 11.1 11.2 11.3 11.4 12.0 12.1 12.2 12.3 12.4 13.0
                        13.1 13.2
                        DERIVED_FILES_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos/Runner.build/DerivedSources
                        DERIVED_FILE_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos/Runner.build/DerivedSources
                        DERIVED_SOURCES_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos/Runner.build/DerivedSources
                        DEVELOPER_APPLICATIONS_DIR =
                        /Applications/Xcode.app/Contents/Developer/Applications
                        DEVELOPER_BIN_DIR = /Applications/Xcode.app/Contents/Developer/usr/bin
                        DEVELOPER_DIR = /Applications/Xcode.app/Contents/Developer
                        DEVELOPER_FRAMEWORKS_DIR =
                        /Applications/Xcode.app/Contents/Developer/Library/Frameworks
                        DEVELOPER_FRAMEWORKS_DIR_QUOTED =
                        /Applications/Xcode.app/Contents/Developer/Library/Frameworks
                        DEVELOPER_LIBRARY_DIR = /Applications/Xcode.app/Contents/Developer/Library
                        DEVELOPER_SDK_DIR =
                        /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Develop
                        er/SDKs
                        DEVELOPER_TOOLS_DIR = /Applications/Xcode.app/Contents/Developer/Tools
                        DEVELOPER_USR_DIR = /Applications/Xcode.app/Contents/Developer/usr
                        DEVELOPMENT_LANGUAGE = en
                        DOCUMENTATION_FOLDER_PATH = Runner.app/en.lproj/Documentation
                        DONT_GENERATE_INFOPLIST_FILE = NO
                        DO_HEADER_SCANNING_IN_JAM = NO
                        DSTROOT = /tmp/Runner.dst
                        DT_TOOLCHAIN_DIR =
                        /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolcha
                        &lt;span class="pl-k"&gt;in&lt;/span&gt;
                        DWARF_DSYM_FILE_NAME = Runner.app.dSYM
                        DWARF_DSYM_FILE_SHOULD_ACCOMPANY_PRODUCT = NO
                        DWARF_DSYM_FOLDER_PATH =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Release-iphoneos
                        EFFECTIVE_PLATFORM_NAME = -iphoneos
                        EMBEDDED_CONTENT_CONTAINS_SWIFT = NO
                        EMBEDDED_PROFILE_NAME = embedded.mobileprovision
                        EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = NO
                        ENABLE_BITCODE = NO
                        ENABLE_DEFAULT_HEADER_SEARCH_PATHS = YES
                        ENABLE_HARDENED_RUNTIME = NO
                        ENABLE_HEADER_DEPENDENCIES = YES
                        ENABLE_NS_ASSERTIONS = NO
                        ENABLE_ON_DEMAND_RESOURCES = YES
                        ENABLE_STRICT_OBJC_MSGSEND = YES
                        ENABLE_TESTABILITY = NO
                        ENTITLEMENTS_ALLOWED = YES
                        ENTITLEMENTS_DESTINATION = Signature
                        ENTITLEMENTS_REQUIRED = YES
                        EXCLUDED_INSTALLSRC_SUBDIRECTORY_PATTERNS = .DS_Store .svn .git .hg CVS
                        EXCLUDED_RECURSIVE_SEARCH_PATH_SUBDIRECTORIES = &lt;span class="pl-k"&gt;*&lt;/span&gt;.nib &lt;span class="pl-k"&gt;*&lt;/span&gt;.lproj &lt;span class="pl-k"&gt;*&lt;/span&gt;.framework
                        &lt;span class="pl-k"&gt;*&lt;/span&gt;.gch &lt;span class="pl-k"&gt;*&lt;/span&gt;.xcode&lt;span class="pl-k"&gt;*&lt;/span&gt; &lt;span class="pl-k"&gt;*&lt;/span&gt;.xcassets (&lt;span class="pl-k"&gt;*&lt;/span&gt;) .DS_Store CVS .svn .git .hg &lt;span class="pl-k"&gt;*&lt;/span&gt;.pbproj &lt;span class="pl-k"&gt;*&lt;/span&gt;.pbxproj
                        EXECUTABLES_FOLDER_PATH = Runner.app/Executables
                        EXECUTABLE_FOLDER_PATH = Runner.app
                        EXECUTABLE_NAME = Runner
                        EXECUTABLE_PATH = Runner.app/Runner
                        EXPANDED_CODE_SIGN_IDENTITY = 
                        EXPANDED_CODE_SIGN_IDENTITY_NAME = 
                        EXPANDED_PROVISIONING_PROFILE = 
                        FILE_LIST =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos/Runner.build/Objects/LinkFileList
                        FIXED_FILES_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos/Runner.build/FixedFiles
                        FLUTTER_APPLICATION_PATH = /Users/haris/Desktop/linktree_demo_clone
                        FLUTTER_BUILD_DIR = build
                        FLUTTER_BUILD_NAME = 1.0.0
                        FLUTTER_BUILD_NUMBER = 1
                        FLUTTER_FRAMEWORK_DIR =
                        /Users/haris/Development/flutter/bin/cache/artifacts/engine/ios
                        FLUTTER_ROOT = /Users/haris/Development/flutter
                        FLUTTER_TARGET = lib/main.dart
                        FRAMEWORKS_FOLDER_PATH = Runner.app/Frameworks
                        FRAMEWORK_FLAG_PREFIX = -framework
                        FRAMEWORK_SEARCH_PATHS =
                        /Users/haris/Desktop/linktree_public_demo/ios/Flutter
                        FRAMEWORK_VERSION = A
                        FULL_PRODUCT_NAME = Runner.app
                        GCC3_VERSION = 3.3
                        GCC_C_LANGUAGE_STANDARD = gnu99
                        GCC_INLINES_ARE_PRIVATE_EXTERN = YES
                        GCC_NO_COMMON_BLOCKS = YES
                        GCC_PFE_FILE_C_DIALECTS = c objective-c c++ objective-c++
                        GCC_SYMBOLS_PRIVATE_EXTERN = YES
                        GCC_THUMB_SUPPORT = YES
                        GCC_TREAT_WARNINGS_AS_ERRORS = NO
                        GCC_VERSION = com.apple.compilers.llvm.clang.1_0
                        GCC_VERSION_IDENTIFIER = com_apple_compilers_llvm_clang_1_0
                        GCC_WARN_64_TO_32_BIT_CONVERSION = YES
                        GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR
                        GCC_WARN_UNDECLARED_SELECTOR = YES
                        GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE
                        GCC_WARN_UNUSED_FUNCTION = YES
                        GCC_WARN_UNUSED_VARIABLE = YES
                        GENERATE_MASTER_OBJECT_FILE = NO
                        GENERATE_PKGINFO_FILE = YES
                        GENERATE_PROFILING_CODE = NO
                        GENERATE_TEXT_BASED_STUBS = NO
                        GID = 20
                        GROUP = staff
                        HEADERMAP_INCLUDES_FLAT_ENTRIES_FOR_TARGET_BEING_BUILT = YES
                        HEADERMAP_INCLUDES_FRAMEWORK_ENTRIES_FOR_ALL_PRODUCT_TYPES = YES
                        HEADERMAP_INCLUDES_NONPUBLIC_NONPRIVATE_HEADERS = YES
                        HEADERMAP_INCLUDES_PROJECT_HEADERS = YES
                        HEADERMAP_USES_FRAMEWORK_PREFIX_ENTRIES = YES
                        HEADERMAP_USES_VFS = NO
                        HIDE_BITCODE_SYMBOLS = YES
                        HOME = /Users/haris
                        ICONV = /usr/bin/iconv
                        INFOPLIST_EXPAND_BUILD_SETTINGS = YES
                        INFOPLIST_FILE = Runner/Info.plist
                        INFOPLIST_OUTPUT_FORMAT = binary
                        INFOPLIST_PATH = Runner.app/Info.plist
                        INFOPLIST_PREPROCESS = NO
                        INFOSTRINGS_PATH = Runner.app/en.lproj/InfoPlist.strings
                        INLINE_PRIVATE_FRAMEWORKS = NO
                        INSTALLHDRS_COPY_PHASE = NO
                        INSTALLHDRS_SCRIPT_PHASE = NO
                        INSTALL_DIR = /tmp/Runner.dst/Applications
                        INSTALL_GROUP = staff
                        INSTALL_MODE_FLAG = u+w,go-w,a+rX
                        INSTALL_OWNER = haris
                        INSTALL_PATH = /Applications
                        INSTALL_ROOT = /tmp/Runner.dst
                        IPHONEOS_DEPLOYMENT_TARGET = 8.0
                        JAVAC_DEFAULT_FLAGS = -J-Xms64m -J-XX:NewSize=4M -J-Dfile.encoding=UTF8
                        JAVA_APP_STUB =
                        /System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationS
                        tub
                        JAVA_ARCHIVE_CLASSES = YES
                        JAVA_ARCHIVE_TYPE = JAR
                        JAVA_COMPILER = /usr/bin/javac
                        JAVA_FOLDER_PATH = Runner.app/Java
                        JAVA_FRAMEWORK_RESOURCES_DIRS = Resources
                        JAVA_JAR_FLAGS = cv
                        JAVA_SOURCE_SUBDIR = &lt;span class="pl-c1"&gt;.&lt;/span&gt;
                        JAVA_USE_DEPENDENCIES = YES
                        JAVA_ZIP_FLAGS = -urg
                        JIKES_DEFAULT_FLAGS = +E +OLDCSO
                        KASAN_DEFAULT_CFLAGS = -DKASAN=1 -fsanitize=address -mllvm
                        -asan-globals-live-support -mllvm -asan-force-dynamic-shadow
                        KEEP_PRIVATE_EXTERNS = NO
                        LD_DEPENDENCY_INFO_FILE =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos/Runner.build/Objects-normal/arm64/Runner_dependency_info.dat
                        LD_GENERATE_MAP_FILE = NO
                        LD_MAP_FILE_PATH =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos/Runner.build/Runner-LinkMap-normal-arm64.txt
                        LD_NO_PIE = NO
                        LD_QUOTE_LINKER_ARGUMENTS_FOR_COMPILER_DRIVER = YES
                        LD_RUNPATH_SEARCH_PATHS =  @executable_path/Frameworks
                        LEGACY_DEVELOPER_DIR =
                        /Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/Share
                        dSupport/Developer
                        LEX = lex
                        LIBRARY_DEXT_INSTALL_PATH = /Library/DriverExtensions
                        LIBRARY_FLAG_NOSPACE = YES
                        LIBRARY_FLAG_PREFIX = -l
                        LIBRARY_KEXT_INSTALL_PATH = /Library/Extensions
                        LIBRARY_SEARCH_PATHS =
                        /Users/haris/Desktop/linktree_public_demo/ios/Flutter
                        LINKER_DISPLAYS_MANGLED_NAMES = NO
                        LINK_FILE_LIST_normal_arm64 = 
                        LINK_FILE_LIST_normal_armv7 = 
                        LINK_WITH_STANDARD_LIBRARIES = YES
                        LLVM_TARGET_TRIPLE_OS_VERSION = ios8.0
                        LLVM_TARGET_TRIPLE_VENDOR = apple
                        LOCALIZABLE_CONTENT_DIR = 
                        LOCALIZED_RESOURCES_FOLDER_PATH = Runner.app/en.lproj
                        LOCALIZED_STRING_MACRO_NAMES = NSLocalizedString CFCopyLocalizedString
                        LOCALIZED_STRING_SWIFTUI_SUPPORT = YES
                        LOCAL_ADMIN_APPS_DIR = /Applications/Utilities
                        LOCAL_APPS_DIR = /Applications
                        LOCAL_DEVELOPER_DIR = /Library/Developer
                        LOCAL_LIBRARY_DIR = /Library
                        LOCROOT = 
                        LOCSYMROOT = 
                        MACH_O_TYPE = mh_execute
                        MAC_OS_X_PRODUCT_BUILD_VERSION = 19C57
                        MAC_OS_X_VERSION_ACTUAL = 101502
                        MAC_OS_X_VERSION_MAJOR = 101500
                        MAC_OS_X_VERSION_MINOR = 1502
                        METAL_LIBRARY_FILE_BASE = default
                        METAL_LIBRARY_OUTPUT_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Release-iphoneos/Runner.
                        app
                        MODULES_FOLDER_PATH = Runner.app/Modules
                        MODULE_CACHE_DIR =
                        /Users/haris/Library/Developer/Xcode/DerivedData/ModuleCache.noindex
                        MTL_ENABLE_DEBUG_INFO = NO
                        NATIVE_ARCH = armv7
                        NATIVE_ARCH_32_BIT = i386
                        NATIVE_ARCH_64_BIT = x86_64
                        NATIVE_ARCH_ACTUAL = x86_64
                        NO_COMMON = YES
                        OBJECT_FILE_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos/Runner.build/Objects
                        OBJECT_FILE_DIR_normal =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos/Runner.build/Objects-normal
                        OBJROOT = /Users/haris/Desktop/linktree_public_demo/build/ios
                        ONLY_ACTIVE_ARCH = NO
                        OS = MACOS
                        OSAC = /usr/bin/osacompile
                        PACKAGE_TYPE = com.apple.package-type.wrapper.application
                        PASCAL_STRINGS = YES
                        PATH =
                        /Applications/Xcode.app/Contents/Developer/usr/bin:/Library/Frameworks/Pytho
                        n.framework/Versions/3.7/bin:/Users/haris/.rvm/gems/ruby-2.6.3/bin:/Users/ha
                        ris/.rvm/gems/ruby-2.6.3@global/bin:/Users/haris/.rvm/rubies/ruby-2.6.3/bin:
                        /Users/haris/.nvm/versions/node/v13.1.0/bin:/Users/haris/.fastlane/bin:/usr/
                        local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Postgres.app/Contents/
                        Versions/latest/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/U
                        sers/haris/.rvm/gems/ruby-2.6.3/bin:/Users/haris/.rvm/gems/ruby-2.6.3@global
                        /bin:/Users/haris/.rvm/rubies/ruby-2.6.3/bin:/Users/haris/.nvm/versions/node
                        /v13.1.0/bin:/Users/haris/.fastlane/bin:/Users/haris/Development/flutter/bin
                        :/Users/haris/.rvm/bin:/usr/java/jre1.6.0_24/bin/:/Users/haris/Desktop/pslov
                        e-period-tracker/bin:/Users/haris/Development/flutter/bin:/usr/java/jre1.6.0
                        _24/bin/:/Users/haris/Desktop/pslove-period-tracker/bin
                        PATH_PREFIXES_EXCLUDED_FROM_HEADER_DEPENDENCIES = /usr/include
                        /usr/local/include /System/Library/Frameworks
                        /System/Library/PrivateFrameworks
                        /Applications/Xcode.app/Contents/Developer/Headers
                        /Applications/Xcode.app/Contents/Developer/SDKs
                        /Applications/Xcode.app/Contents/Developer/Platforms
                        PBDEVELOPMENTPLIST_PATH = Runner.app/pbdevelopment.plist
                        PFE_FILE_C_DIALECTS = objective-c
                        PKGINFO_FILE_PATH =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos/Runner.build/PkgInfo
                        PKGINFO_PATH = Runner.app/PkgInfo
                        PLATFORM_DEVELOPER_APPLICATIONS_DIR =
                        /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Devel
                        oper/Applications
                        PLATFORM_DEVELOPER_BIN_DIR =
                        /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Devel
                        oper/usr/bin
                        PLATFORM_DEVELOPER_LIBRARY_DIR =
                        /Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/Share
                        dSupport/Developer/Library
                        PLATFORM_DEVELOPER_SDK_DIR =
                        /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Devel
                        oper/SDKs
                        PLATFORM_DEVELOPER_TOOLS_DIR =
                        /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Devel
                        oper/Tools
                        PLATFORM_DEVELOPER_USR_DIR =
                        /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Devel
                        oper/usr
                        PLATFORM_DIR =
                        /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform
                        PLATFORM_DISPLAY_NAME = iOS
                        PLATFORM_NAME = iphoneos
                        PLATFORM_PREFERRED_ARCH = arm64
                        PLATFORM_PRODUCT_BUILD_VERSION = 17B102
                        PLIST_FILE_OUTPUT_FORMAT = binary
                        PLUGINS_FOLDER_PATH = Runner.app/PlugIns
                        PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = YES
                        PRECOMP_DESTINATION_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos/Runner.build/PrefixHeaders
                        PRESERVE_DEAD_CODE_INITS_AND_TERMS = NO
                        PRIVATE_HEADERS_FOLDER_PATH = Runner.app/PrivateHeaders
                        PRODUCT_BUNDLE_IDENTIFIER = com.example.linktreeDemoClone
                        PRODUCT_BUNDLE_PACKAGE_TYPE = APPL
                        PRODUCT_MODULE_NAME = Runner
                        PRODUCT_NAME = Runner
                        PRODUCT_SETTINGS_PATH =
                        /Users/haris/Desktop/linktree_public_demo/ios/Runner/Info.plist
                        PRODUCT_TYPE = com.apple.product-type.application
                        PROFILING_CODE = NO
                        PROJECT = Runner
                        PROJECT_DERIVED_FILE_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/DerivedSour
                        ces
                        PROJECT_DIR = /Users/haris/Desktop/linktree_public_demo/ios
                        PROJECT_FILE_PATH =
                        /Users/haris/Desktop/linktree_public_demo/ios/Runner.xcodeproj
                        PROJECT_NAME = Runner
                        PROJECT_TEMP_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build
                        PROJECT_TEMP_ROOT = /Users/haris/Desktop/linktree_public_demo/build/ios
                        PROVISIONING_PROFILE_REQUIRED = YES
                        PUBLIC_HEADERS_FOLDER_PATH = Runner.app/Headers
                        RECURSIVE_SEARCH_PATHS_FOLLOW_SYMLINKS = YES
                        REMOVE_CVS_FROM_RESOURCES = YES
                        REMOVE_GIT_FROM_RESOURCES = YES
                        REMOVE_HEADERS_FROM_EMBEDDED_BUNDLES = YES
                        REMOVE_HG_FROM_RESOURCES = YES
                        REMOVE_SVN_FROM_RESOURCES = YES
                        RESOURCE_RULES_REQUIRED = YES
                        REZ_COLLECTOR_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos/Runner.build/ResourceManagerResources
                        REZ_OBJECTS_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos/Runner.build/ResourceManagerResources/Objects
                        SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = NO
                        SCRIPTS_FOLDER_PATH = Runner.app/Scripts
                        SDKROOT =
                        /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Devel
                        oper/SDKs/iPhoneOS13.2.sdk
                        SDK_DIR =
                        /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Devel
                        oper/SDKs/iPhoneOS13.2.sdk
                        SDK_DIR_iphoneos13_2 =
                        /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Devel
                        oper/SDKs/iPhoneOS13.2.sdk
                        SDK_NAME = iphoneos13.2
                        SDK_NAMES = iphoneos13.2
                        SDK_PRODUCT_BUILD_VERSION = 17B102
                        SDK_VERSION = 13.2
                        SDK_VERSION_ACTUAL = 130200
                        SDK_VERSION_MAJOR = 130000
                        SDK_VERSION_MINOR = 200
                        SED = /usr/bin/sed
                        SEPARATE_STRIP = NO
                        SEPARATE_SYMBOL_EDIT = NO
                        SET_DIR_MODE_OWNER_GROUP = YES
                        SET_FILE_MODE_OWNER_GROUP = NO
                        SHALLOW_BUNDLE = YES
                        SHARED_DERIVED_FILE_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Release-iphoneos/Derived
                        Sources
                        SHARED_FRAMEWORKS_FOLDER_PATH = Runner.app/SharedFrameworks
                        SHARED_PRECOMPS_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/SharedPrecompiledHeaders
                        SHARED_SUPPORT_FOLDER_PATH = Runner.app/SharedSupport
                        SKIP_INSTALL = NO
                        SOURCE_ROOT = /Users/haris/Desktop/linktree_public_demo/ios
                        SRCROOT = /Users/haris/Desktop/linktree_public_demo/ios
                        STRINGS_FILE_OUTPUT_ENCODING = binary
                        STRIP_BITCODE_FROM_COPIED_FILES = YES
                        STRIP_INSTALLED_PRODUCT = YES
                        STRIP_STYLE = all
                        STRIP_SWIFT_SYMBOLS = YES
                        SUPPORTED_DEVICE_FAMILIES = 1,2
                        SUPPORTED_PLATFORMS = iphoneos
                        SUPPORTS_MACCATALYST = NO
                        SUPPORTS_TEXT_BASED_API = NO
                        SWIFT_COMPILATION_MODE = wholemodule
                        SWIFT_OBJC_BRIDGING_HEADER = Runner/Runner-Bridging-Header.h
                        SWIFT_OPTIMIZATION_LEVEL = -O
                        SWIFT_PLATFORM_TARGET_PREFIX = ios
                        SWIFT_VERSION = 5.0
                        SYMROOT = /Users/haris/Desktop/linktree_public_demo/build/ios
                        SYSTEM_ADMIN_APPS_DIR = /Applications/Utilities
                        SYSTEM_APPS_DIR = /Applications
                        SYSTEM_CORE_SERVICES_DIR = /System/Library/CoreServices
                        SYSTEM_DEMOS_DIR = /Applications/Extras
                        SYSTEM_DEVELOPER_APPS_DIR =
                        /Applications/Xcode.app/Contents/Developer/Applications
                        SYSTEM_DEVELOPER_BIN_DIR =
                        /Applications/Xcode.app/Contents/Developer/usr/bin
                        SYSTEM_DEVELOPER_DEMOS_DIR =
                        /Applications/Xcode.app/Contents/Developer/Applications/Utilities/Built
                        Examples
                        SYSTEM_DEVELOPER_DIR = /Applications/Xcode.app/Contents/Developer
                        SYSTEM_DEVELOPER_DOC_DIR = /Applications/Xcode.app/Contents/Developer/ADC
                        Reference Library
                        SYSTEM_DEVELOPER_GRAPHICS_TOOLS_DIR =
                        /Applications/Xcode.app/Contents/Developer/Applications/Graphics Tools
                        SYSTEM_DEVELOPER_JAVA_TOOLS_DIR =
                        /Applications/Xcode.app/Contents/Developer/Applications/Java Tools
                        SYSTEM_DEVELOPER_PERFORMANCE_TOOLS_DIR =
                        /Applications/Xcode.app/Contents/Developer/Applications/Performance Tools
                        SYSTEM_DEVELOPER_RELEASENOTES_DIR =
                        /Applications/Xcode.app/Contents/Developer/ADC Reference
                        Library/releasenotes
                        SYSTEM_DEVELOPER_TOOLS = /Applications/Xcode.app/Contents/Developer/Tools
                        SYSTEM_DEVELOPER_TOOLS_DOC_DIR =
                        /Applications/Xcode.app/Contents/Developer/ADC Reference
                        Library/documentation/DeveloperTools
                        SYSTEM_DEVELOPER_TOOLS_RELEASENOTES_DIR =
                        /Applications/Xcode.app/Contents/Developer/ADC Reference
                        Library/releasenotes/DeveloperTools
                        SYSTEM_DEVELOPER_USR_DIR = /Applications/Xcode.app/Contents/Developer/usr
                        SYSTEM_DEVELOPER_UTILITIES_DIR =
                        /Applications/Xcode.app/Contents/Developer/Applications/Utilities
                        SYSTEM_DEXT_INSTALL_PATH = /System/Library/DriverExtensions
                        SYSTEM_DOCUMENTATION_DIR = /Library/Documentation
                        SYSTEM_KEXT_INSTALL_PATH = /System/Library/Extensions
                        SYSTEM_LIBRARY_DIR = /System/Library
                        TAPI_VERIFY_MODE = ErrorsOnly
                        TARGETED_DEVICE_FAMILY = 1,2
                        TARGETNAME = Runner
                        TARGET_BUILD_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Release-iphoneos
                        TARGET_NAME = Runner
                        TARGET_TEMP_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos/Runner.build
                        TEMP_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos/Runner.build
                        TEMP_FILES_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos/Runner.build
                        TEMP_FILE_DIR =
                        /Users/haris/Desktop/linktree_public_demo/build/ios/Runner.build/Release-iph
                        oneos/Runner.build
                        TEMP_ROOT = /Users/haris/Desktop/linktree_public_demo/build/ios
                        TOOLCHAIN_DIR =
                        /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolcha
                        &lt;span class="pl-k"&gt;in&lt;/span&gt;
                        TREAT_MISSING_BASELINES_AS_TEST_FAILURES = NO
                        UID = 501
                        UNLOCALIZED_RESOURCES_FOLDER_PATH = Runner.app
                        UNSTRIPPED_PRODUCT = NO
                        USER = haris
                        USER_APPS_DIR = /Users/haris/Applications
                        USER_LIBRARY_DIR = /Users/haris/Library
                        USE_DYNAMIC_NO_PIC = YES
                        USE_HEADERMAP = YES
                        USE_HEADER_SYMLINKS = NO
                        USE_LLVM_TARGET_TRIPLES = YES
                        USE_LLVM_TARGET_TRIPLES_FOR_CLANG = YES
                        USE_LLVM_TARGET_TRIPLES_FOR_LD = YES
                        USE_LLVM_TARGET_TRIPLES_FOR_TAPI = YES
                        VALIDATE_PRODUCT = YES
                        VALIDATE_WORKSPACE = NO
                        VALID_ARCHS = arm64 arm64e armv7 armv7s
                        VERBOSE_PBXCP = NO
                        VERSIONING_SYSTEM = apple-generic
                        VERSIONPLIST_PATH = Runner.app/version.plist
                        VERSION_INFO_BUILDER = haris
                        VERSION_INFO_FILE = Runner_vers.c
                        VERSION_INFO_STRING = &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;@(#)PROGRAM:Runner  PROJECT:Runner-1&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;
                        WRAPPER_EXTENSION = app
                        WRAPPER_NAME = Runner.app
                        WRAPPER_SUFFIX = .app
                        WRAP_ASSET_PACKS_IN_SEPARATE_DIRECTORIES = NO
                        XCODE_APP_SUPPORT_DIR =
                        /Applications/Xcode.app/Contents/Developer/Library/Xcode
                        XCODE_PRODUCT_BUILD_VERSION = 11C504
                        XCODE_VERSION_ACTUAL = 1131
                        XCODE_VERSION_MAJOR = 1100
                        XCODE_VERSION_MINOR = 1130
                        XPCSERVICES_FOLDER_PATH = Runner.app/XPCServices
                        YACC = yacc
                        arch = arm64
                        variant = normal
[ +108 ms] Launching lib/main.dart on Chrome &lt;span class="pl-k"&gt;in&lt;/span&gt; debug mode...
[        ] Building application &lt;span class="pl-k"&gt;for&lt;/span&gt; the web...
[ +186 ms] Found plugin firebase_core at
/Users/haris/Development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core-0.4.3+1/
[   +2 ms] Found plugin firebase_core_web at
/Users/haris/Development/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_core_web-0.1.1+1/
[  +22 ms] Found plugin url_launcher at
/Users/haris/Development/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-5.4.1/
[   +1 ms] Found plugin url_launcher_macos at
/Users/haris/Development/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_macos-0.0.1+2/
[   +2 ms] Found plugin url_launcher_web at
/Users/haris/Development/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher_web-0.1.0+2/
[+9456 ms] Starting daemon...
[ +313 ms] Initializing inputs
[  +19 ms] Reading cached asset graph...
[ +634 ms] Reading cached asset graph completed, took 630ms

[ +588 ms] Checking &lt;span class="pl-k"&gt;for&lt;/span&gt; updates since last build...
[ +689 ms] Checking &lt;span class="pl-k"&gt;for&lt;/span&gt; updates since last build completed, took 689ms

[  +10 ms] Initializing inputs
[   +2 ms] Reading cached asset graph...
[        ] Reading cached asset graph completed, took 630ms
[        ] Checking &lt;span class="pl-k"&gt;for&lt;/span&gt; updates since last build...
[        ] Checking &lt;span class="pl-k"&gt;for&lt;/span&gt; updates since last build completed, took 689ms
[ +210 ms] Serving DevTools at http://127.0.0.1:65323

[ +754 ms] About to build [web]...
[   +5 ms] Running build...
[ +203 ms] Running build completed, took 94ms

[   +1 ms] Caching finalized dependency graph...
[   +9 ms] Caching finalized dependency graph completed, took 137ms

[   +6 ms] Succeeded after 240ms with 0 outputs (0 actions)

[  +13 ms] Building application &lt;span class="pl-k"&gt;for&lt;/span&gt; &lt;span class="pl-smi"&gt;the web... (completed&lt;/span&gt; &lt;span class="pl-k"&gt;in&lt;/span&gt; 13.1s)
[        ] Attempting to connect to browser instance..
[+4885 ms] Debug service listening on ws://127.0.0.1:65369/IqWOt77bhe8=

[ +332 ms]       Failed to load asset at path:
packages/build_web_compilers/src/dev_compiler/dart_sdk.js.

                          Status code: 404

                          Headers:
                          {
                      &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;date&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;Tue, 21 Jan 2020 09:58:35 GMT&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
                      &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;content-length&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;9&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
                      &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;x-frame-options&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;SAMEORIGIN&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
                      &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;content-type&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;text/plain; charset=utf-8&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
                      &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;x-xss-protection&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;1; mode=block&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
                      &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;x-content-type-options&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;nosniff&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
                      &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;server&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;dart:io with Shelf&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;,
                      &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;via&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;1.1 shelf_proxy&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;
                    }

                          Content:
                          Not Found}

[  +53 ms] Attempting to connect to browser instance.. (completed &lt;span class="pl-k"&gt;in&lt;/span&gt; 5.3s)
[   +1 ms] Warning: Flutter&lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;s support for web development is not stable yet and hasn&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt;t
[        ] been thoroughly tested &lt;span class="pl-k"&gt;in&lt;/span&gt; production environments.
[        ] For more information see https://flutter.dev/web
[   +2 ms] 🔥  To hot restart changes &lt;span class="pl-k"&gt;while&lt;/span&gt; running, press &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;r&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;. To hot restart (and refresh the
browser), press
           &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;R&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;.
[   +2 ms] For a more detailed &lt;span class="pl-c1"&gt;help&lt;/span&gt; message, press &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;h&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;. To quit, press &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;"&lt;/span&gt;q&lt;span class="pl-pds"&gt;"&lt;/span&gt;&lt;/span&gt;.
[  +12 ms] Debug service listening on ws://127.0.0.1:65369/IqWOt77bhe8=&lt;/pre&gt;&lt;/div&gt;

&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;// Ran flutter analyze
 info • Unused import: &lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;'&lt;/span&gt;dart:ui&lt;span class="pl-pds"&gt;'&lt;/span&gt;&lt;/span&gt; • lib/generated_plugin_registrant.dart:4:8 • unused_import&lt;/pre&gt;&lt;/div&gt;

&lt;pre&gt;&lt;code&gt;// Ran flutter doctor -v

[✓] Flutter (Channel beta, v1.12.13+hotfix.6, on Mac OS X 10.15.2 19C57, locale en-SG)
    • Flutter version 1.12.13+hotfix.6 at /Users/haris/Development/flutter
    • Framework revision 18cd7a3601 (6 weeks ago), 2019-12-11 06:35:39 -0800
    • Engine revision 2994f7e1e6
    • Dart version 2.7.0

 
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    • Android SDK at /Users/haris/Library/Android/sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.3
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 11.3.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 11.3.1, Build version 11C504
    • CocoaPods version 1.7.1

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 3.4)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 36.0.1
    • Dart plugin version 183.6270
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1343-b01)

[✓] VS Code (version 1.41.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.7.1

[✓] Connected device (3 available)
    • iPhone 11 Pro Max • B2E57F80-0B9E-4CF7-B413-D703677FEC2F • ios            •
      com.apple.CoreSimulator.SimRuntime.iOS-13-3 (simulator)
    • Chrome            • chrome                               • web-javascript • Google Chrome
      79.0.3945.117
    • Web Server        • web-server                           • web-javascript • Flutter Tools

• No issues found!
&lt;/code&gt;&lt;/pre&gt;


    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/flutter/flutter/issues/49199"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Sadly, there is an error (currently) in the web client side of the Flutter's Sentry package. Thus, you have to catch your errors manually using the above code.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>flutterweb</category>
      <category>sentry</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Firebase Hosting with Namecheap Domains</title>
      <dc:creator>happyharis</dc:creator>
      <pubDate>Mon, 13 Jan 2020 10:05:55 +0000</pubDate>
      <link>https://dev.to/happyharis/firebase-hosting-with-namecheap-domains-30gk</link>
      <guid>https://dev.to/happyharis/firebase-hosting-with-namecheap-domains-30gk</guid>
      <description>&lt;p&gt;Firebase Hosting, in my opinion, the easiest and beginner friendly way to host your website seamlessly. I haven't tried other hosting services (except Heroku). If you have one, comment down below! &lt;/p&gt;

&lt;p&gt;However, when you deploy your web project the firebase hosting, you will the get a default url:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;XXXXX.firebaseapp.com&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That's when domains come in. In short, domains are the addresses of your projects. They convert the human readable address to an ip address that your web project is being stored.&lt;/p&gt;

&lt;p&gt;You can buy domains from GoDaddy, Google. However, I chose NameCheap because I am a cheapskate. I find that registering your NameCheap domain with firebase hosting is not exactly great. Thus, this a brief tutorial on it. Full video below.&lt;/p&gt;

&lt;p&gt;First, you need to get a domain name in NameCheap.&lt;/p&gt;

&lt;p&gt;Second, go to the Firebase Hosting of your project. Click on add custom domain and key in your custom domain. &lt;em&gt;Leave the checkbox that says redirect to an existing website, unchecked.&lt;/em&gt; Click continue.&lt;/p&gt;

&lt;p&gt;Copy the statement below the value header: &lt;code&gt;google-site-verification=somethingsom4eth6in7g&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Let's go to NameCheap dasboard. you need to go to Domain List &amp;gt; Manage &lt;em&gt;Click on the domain you want to register&lt;/em&gt; &amp;gt; Advanced DNS &amp;gt; Add New Record.&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%2Fmiro.medium.com%2Fmax%2F2048%2F0%2Ahd3HFeTjNlydbMzK." 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%2Fmiro.medium.com%2Fmax%2F2048%2F0%2Ahd3HFeTjNlydbMzK." alt="Namecheap Dashboard example"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://medium.com/@macariojames/firebase-custom-domain-verification-with-namecheap-dns-4baabaf3fb25" rel="noopener noreferrer"&gt;Source: Macario Jame&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Create an TXT Record, with a @ as host, instead of the url as the host.&lt;/p&gt;

&lt;p&gt;Moreover, create a CNAME record with &lt;code&gt;www&lt;/code&gt; as the host and the value with your domain.&lt;/p&gt;

&lt;p&gt;This will be verified after a couple of minutes. You are one step away from using your custom domain.&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%2Fi.ibb.co%2F943Cs3n%2FScreenshot-2020-01-13-at-6-13-34-PM.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%2Fi.ibb.co%2F943Cs3n%2FScreenshot-2020-01-13-at-6-13-34-PM.png" alt="Success Dialog for Firebase Hosting Domain"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once done, you will be brought to the last page, &lt;strong&gt;GO LIVE&lt;/strong&gt;. You have to add 2 &lt;code&gt;A Record&lt;/code&gt; with the host @ instead of your custom domain into the Advanced DNS settings.&lt;/p&gt;

&lt;p&gt;You have to wait for a while for the domain to be secured by Firebase. Refresh the page after a few minutes, and you will see the Pending status.&lt;/p&gt;

&lt;p&gt;You can visit your web app, which is not secured, yet.&lt;/p&gt;

&lt;p&gt;It may take up to 24 hours, but it will probably take less.&lt;/p&gt;

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

&lt;p&gt;Hope this is helpful 😁. Comment down below if you face with any issues.&lt;/p&gt;

</description>
      <category>firebase</category>
      <category>webdev</category>
      <category>domains</category>
    </item>
    <item>
      <title>Flutter Web: Firebase Storage</title>
      <dc:creator>happyharis</dc:creator>
      <pubDate>Fri, 10 Jan 2020 07:26:06 +0000</pubDate>
      <link>https://dev.to/happyharis/flutter-web-firebase-storage-2ac1</link>
      <guid>https://dev.to/happyharis/flutter-web-firebase-storage-2ac1</guid>
      <description>&lt;h1&gt;
  
  
  Flutter Web: Firebase Storage
&lt;/h1&gt;

&lt;p&gt;*Disclaimer: The firebase storage api for Flutter Web is still buggy. There is some uncaught errors in the JS end of the framework. &lt;strong&gt;Use at your own risk!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Video tutorial and link for the full code is down below 😁&lt;/p&gt;

&lt;p&gt;First, we need to create an upload image button with the function name uploadImage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Currently, my app is using a Scaffold widget, hence floatingActionButton&lt;/span&gt;

&lt;span class="nl"&gt;floatingActionButton:&lt;/span&gt; &lt;span class="n"&gt;FloatingActionButton&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;extended&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
  &lt;span class="nl"&gt;heroTag:&lt;/span&gt; &lt;span class="s"&gt;'picker'&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;elevation:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;backgroundColor:&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;tealAccent&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="o"&gt;],&lt;/span&gt;
  &lt;span class="nl"&gt;hoverElevation:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;label:&lt;/span&gt; &lt;span class="n"&gt;Row&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
    &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Widget&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;[&lt;/span&gt;
      &lt;span class="n"&gt;Icon&lt;/span&gt;&lt;span class="o"&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;file_upload&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
      &lt;span class="n"&gt;SizedBox&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;width:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;
      &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Upload Image'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;],&lt;/span&gt;
  &lt;span class="o"&gt;),&lt;/span&gt;
  &lt;span class="nl"&gt;onPressed:&lt;/span&gt; &lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;uploadImage&lt;/span&gt;&lt;span class="o"&gt;(),&lt;/span&gt;
&lt;span class="o"&gt;),&lt;/span&gt;
&lt;span class="nl"&gt;floatingActionButtonLocation:&lt;/span&gt; &lt;span class="n"&gt;FloatingActionButtonLocation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;centerFloat&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Second, let's create the function &lt;code&gt;uploadImage()&lt;/code&gt;. It's a simple function:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a. We need to choose a file that we want to upload&lt;/li&gt;
&lt;li&gt;b. Once it finishes reading, we then upload it to firebase storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Currently, flutter web is still in beta. Thus, we have to use the HTML library. I believe the flutter team does not want to use any html library to be consistent with one codebase for multiplatform&lt;br&gt;
IDK, we will see&lt;/p&gt;

&lt;p&gt;I got the help from this stackoverflow &lt;a href="https://stackoverflow.com/questions/13298140/how-to-upload-a-file-in-dart"&gt;question&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thus, we have to create an input element. If we were to refer to the docs about file reader for web in &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL"&gt;Mozilla doc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It actually gives an example of what we needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;previewFile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;preview&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;img&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;input[type=file]&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;files&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;reader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;FileReader&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nx"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;load&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// convert image file to base64 string&lt;/span&gt;
      &lt;span class="nx"&gt;preview&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="kc"&gt;false&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;reader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readAsDataURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;file&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;Thus, we should convert it to dart:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="c1"&gt;/// A "select file/folder" window will appear. User will have to choose a file.&lt;/span&gt;
&lt;span class="c1"&gt;/// This file will be then read, and uploaded to firebase storage;&lt;/span&gt;
&lt;span class="n"&gt;uploadImage&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="n"&gt;async&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// HTML input element&lt;/span&gt;
  &lt;span class="n"&gt;InputElement&lt;/span&gt; &lt;span class="n"&gt;uploadInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FileUploadInputElement&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;uploadInput&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;click&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

  &lt;span class="n"&gt;uploadInput&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;listen&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;changeEvent&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;uploadInput&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;files&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;first&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
      &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;reader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FileReader&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
      &lt;span class="c1"&gt;// The FileReader object lets web applications asynchronously read the&lt;/span&gt;
      &lt;span class="c1"&gt;// contents of files (or raw data buffers) stored on the user's computer,&lt;/span&gt;
      &lt;span class="c1"&gt;// using File or Blob objects to specify the file or data to read.&lt;/span&gt;
      &lt;span class="c1"&gt;// Source: https://developer.mozilla.org/en-US/docs/Web/API/FileReader&lt;/span&gt;

      &lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;readAsDataUrl&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
      &lt;span class="c1"&gt;// The readAsDataURL method is used to read the contents of the specified Blob or File.&lt;/span&gt;
      &lt;span class="c1"&gt;//  When the read operation is finished, the readyState becomes DONE, and the loadend is&lt;/span&gt;
      &lt;span class="c1"&gt;// triggered. At that time, the result attribute contains the data as a data: URL representing&lt;/span&gt;
      &lt;span class="c1"&gt;// the file's data as a base64 encoded string.&lt;/span&gt;
      &lt;span class="c1"&gt;// Source: https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsDataURL&lt;/span&gt;

      &lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;onLoadEnd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;listen&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
        &lt;span class="c1"&gt;// After file finiesh reading and loading, it will be uploaded to firebase storage&lt;/span&gt;
        &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;loadEndEvent&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;async&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="n"&gt;uploadToFirebase&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;},&lt;/span&gt;
      &lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;},&lt;/span&gt;
  &lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now, we have to create the function &lt;code&gt;uploadToFirebase()&lt;/code&gt; that requires a file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:firebase/firebase.dart'&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;fb&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:firebase/firestore.dart'&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;fs&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// In your screen (stateful) widget&lt;/span&gt;

&lt;span class="c1"&gt;// Before your build method, create an UploadTask instance&lt;/span&gt;
&lt;span class="n"&gt;fb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;UploadTask&lt;/span&gt; &lt;span class="n"&gt;_uploadTask&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;/// Upload file to firebase storage and updates [_uploadTask] to the latest&lt;/span&gt;
  &lt;span class="c1"&gt;/// file upload&lt;/span&gt;
&lt;span class="n"&gt;uploadToFirebase&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="n"&gt;imageFile&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;async&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;filePath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;'images/&lt;/span&gt;&lt;span class="si"&gt;${DateTime.now()}&lt;/span&gt;&lt;span class="s"&gt;.png'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;setState&lt;/span&gt;&lt;span class="o"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;_uploadTask&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;fb&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;storage&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;refFromURL&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'YOUR FIREBASE STORAGE URL'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;child&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filePath&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
        &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;imageFile&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="o"&gt;});&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The function above will create a images folder in firebase storage. Moreover, the picture uploaded will be named as time stamps (for reference and simplicity sake).&lt;/p&gt;

&lt;p&gt;Lastly, let's create a progress indicator to show the progress of the file being uploaded in a stream builder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:firebase/firebase.dart'&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;fb&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// In your screen widget&lt;/span&gt;

&lt;span class="n"&gt;StreamBuilder&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;fb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;UploadTaskSnapshot&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;(&lt;/span&gt;
  &lt;span class="nl"&gt;stream:&lt;/span&gt; &lt;span class="n"&gt;_uploadTask&lt;/span&gt;&lt;span class="o"&gt;?.&lt;/span&gt;&lt;span class="na"&gt;onStateChanged&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;builder:&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;snapshot&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;snapshot&lt;/span&gt;&lt;span class="o"&gt;?.&lt;/span&gt;&lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Default as 0&lt;/span&gt;
    &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;progressPercent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;event&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;?&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;bytesTransferred&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;totalBytes&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
        &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;progressPercent&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Successfully uploaded file 🎊'&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;progressPercent&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;SizedBox&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;LinearProgressIndicator&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;value:&lt;/span&gt; &lt;span class="n"&gt;progressPercent&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
      &lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;},&lt;/span&gt;
&lt;span class="o"&gt;),&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;If you have fast internet, the upload speed is very fast. Here's the flow of the upload process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User clicks on the button to upload file&lt;/li&gt;
&lt;li&gt;The window pops up as input is automatically clicked&lt;/li&gt;
&lt;li&gt;Once user has chosen a file, the FileReader will take some micro seconds to read the file&lt;/li&gt;
&lt;li&gt;After reading the file, the file will be passed in the &lt;code&gt;uploadToFirebase()&lt;/code&gt; function&lt;/li&gt;
&lt;li&gt;We will update the the UploadTask instance to the UploadTask instance we just newly created&lt;/li&gt;
&lt;li&gt;This will update the progress indicator and show a success message&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What is suppose to look like
&lt;/h2&gt;

&lt;p&gt;In the StreamBuilder above, it should look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:firebase/firebase.dart'&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;fb&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;


&lt;span class="n"&gt;StreamBuilder&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;fb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;UploadTaskSnapshot&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;(&lt;/span&gt;
  &lt;span class="nl"&gt;stream:&lt;/span&gt; &lt;span class="n"&gt;_uploadTask&lt;/span&gt;&lt;span class="o"&gt;?.&lt;/span&gt;&lt;span class="na"&gt;onStateChanged&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;builder:&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;snapshot&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;snapshot&lt;/span&gt;&lt;span class="o"&gt;?.&lt;/span&gt;&lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;?.&lt;/span&gt;&lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;fb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;TaskState&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;RUNNING&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;LinearProgressIndicator&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;value:&lt;/span&gt; &lt;span class="n"&gt;progressPercent&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
      &lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;fb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;TaskState&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SUCCESS&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Success 🎊'&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;fb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;TaskState&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ERROR&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Has error 😢'&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;// Show empty when not uploading&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;SizedBox&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}),&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;However, there is a bug 🐞, where it returns a null error and type check error in the web console, when you inspect in your browser. &lt;/p&gt;

&lt;p&gt;Disclaimer again, &lt;strong&gt;do at your own risk&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://gist.github.com/happyharis/d7a4a89bbac114af00f921f6c26ab728"&gt;Github Gist of the firebase storage implementation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you for reading. Hope you have a nice day 😊&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>flutterweb</category>
      <category>webdev</category>
      <category>firebase</category>
    </item>
    <item>
      <title>First Impression with Svelte</title>
      <dc:creator>happyharis</dc:creator>
      <pubDate>Wed, 08 Jan 2020 05:58:58 +0000</pubDate>
      <link>https://dev.to/happyharis/first-impression-with-svelte-27mo</link>
      <guid>https://dev.to/happyharis/first-impression-with-svelte-27mo</guid>
      <description>&lt;p&gt;This article is about my experience with Svelte: likes vs dislikes, and a comparison to a framework (read below to find out which framework)&lt;/p&gt;

&lt;p&gt;Svelte is a JS web framework that helps you create web apps by just compiling your code, without a virtual DOM.&lt;/p&gt;

&lt;p&gt;It has less boiler plate, no virtual DOM and gives another perception of reactivity. Watch this video about &lt;a href="https://www.youtube.com/watch?v=AdNJ3fydeao"&gt;rethinking reactivity&lt;/a&gt;. Highly recommend.&lt;/p&gt;

&lt;p&gt;After meddling with the framework (by creating a simple landing page),&lt;/p&gt;

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

&lt;p&gt;here are my thoughts on learning about svelte.&lt;/p&gt;

&lt;h1&gt;
  
  
  Likes
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Learning is pretty simple (if you have some background in JS web development) as you are not bombarded with boiler plate. You have to just learn about how Svelte reacts. That's it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When creating a component, you don't have to write this line of code &lt;code&gt;export default&lt;/code&gt; to get exported for other components to be used. WOW.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Dislikes
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Routing in Svelte ain't exactly great at explaining to a newbie like me. People who uses Svelte suggest to use Sapper framework (which is built on Svelte). I tried understanding Sapper, and it was overwhelming to comprehend. Yikes 😬&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Svelte is pretty new. The community is growing, but it is not matured yet. Just like Flutter back in the days 😆&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Which brings me to the comparison of another framework: Flutter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Similarities with Flutter Web and Svelte
&lt;/h2&gt;

&lt;p&gt;They both, open source, and have their logical code on the top part of the file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// In Svelte

&amp;lt;script&amp;gt;Logic code here&amp;lt;/script&amp;gt;

&amp;lt;style&amp;gt;&amp;lt;/style&amp;gt;

&amp;lt;html&amp;gt;&amp;lt;/html&amp;gt;

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

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Usually when I develop in Flutter

Logic code here

Widget {
 // the html/css
}

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

&lt;/div&gt;



&lt;h2&gt;
  
  
  Difference with Flutter Web and Svelte:
&lt;/h2&gt;

&lt;p&gt;Flutter - amazing huge team, created by Google, and companies (&lt;a href="https://codemagic.io/start/"&gt;CodeMagic&lt;/a&gt;, &lt;a href="https://rive.app/"&gt;Rive&lt;/a&gt;) creating tools for the framework&lt;/p&gt;

&lt;p&gt;Svelte - &lt;a href="https://twitter.com/Rich_Harris?s=20"&gt;Rich Harris&lt;/a&gt; and his videos (highly recommend)&lt;/p&gt;

&lt;p&gt;I really can't wait what Svelte would be offering next. Thanks for reading!&lt;/p&gt;

</description>
      <category>svelte</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>html</category>
    </item>
    <item>
      <title>Flutter Web: Firestore CRUD</title>
      <dc:creator>happyharis</dc:creator>
      <pubDate>Sat, 04 Jan 2020 13:43:53 +0000</pubDate>
      <link>https://dev.to/happyharis/flutter-web-firestore-crud-3p17</link>
      <guid>https://dev.to/happyharis/flutter-web-firestore-crud-3p17</guid>
      <description>&lt;p&gt;Updated [21/08/2020]: &lt;a href="https://pub.dev/packages/cloud_firestore/changelog"&gt;cloud_firestore major changes&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Now, all Flutter Firebase documentation is in the new link: &lt;a href="https://firebase.flutter.dev/docs/overview"&gt;https://firebase.flutter.dev/docs/overview&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Firstly, import the latest cloud_firestore and firebase core dependency in your pubspec.yaml file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;In&lt;/span&gt; &lt;span class="n"&gt;pubspec&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;yaml&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;

&lt;span class="nl"&gt;dependencies:&lt;/span&gt;
  &lt;span class="nl"&gt;cloud_firestore:&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;latest&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nl"&gt;firebase_core:&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;latest&lt;/span&gt; &lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;

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



&lt;p&gt;Secondly, add the Firebase and Firestore JS SDK in your web/index.html file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;In index.html...

&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://www.gstatic.com/firebasejs/7.9.1/firebase-app.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"https://www.gstatic.com/firebasejs/7.9.1/firebase-firestore.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"main.dart.js"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"application/javascript"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;

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



&lt;p&gt;Third, initialise Firebase, also in your index.html file with the Firebase keys (that can be found in Firebase settings):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;In index.html...

&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="c"&gt;&amp;lt;!-- Previously loaded Firebase SDKs --&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- ADD THIS BEFORE YOUR main.dart.js SCRIPT --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
    &lt;span class="c1"&gt;// TODO: Replace the following with your app's Firebase project configuration.&lt;/span&gt;
    &lt;span class="c1"&gt;// See: https://support.google.com/firebase/answer/7015592&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;firebaseConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;authDomain&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[YOUR_PROJECT].firebaseapp.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;databaseURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://[YOUR_PROJECT].firebaseio.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;projectId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[YOUR_PROJECT]&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;storageBucket&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[YOUR_PROJECT].appspot.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;messagingSenderId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;appId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1:...:web:...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;measurementId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;G-...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="c1"&gt;// Initialize Firebase&lt;/span&gt;
    &lt;span class="nx"&gt;firebase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;initializeApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;firebaseConfig&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
  &lt;span class="c"&gt;&amp;lt;!-- END OF FIREBASE INIT CODE --&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"main.dart.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Lastly, initialise firebase in your flutter main.dart file&lt;br&gt;
&lt;/p&gt;

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

&lt;span class="c1"&gt;// Import the firebase_core plugin&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:firebase_core/firebase_core.dart'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;runApp&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;App&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;App&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StatelessWidget&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Create the initilization Future outside of `build`:&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;Future&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;FirebaseApp&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_initialization&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Firebase&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;initializeApp&lt;/span&gt;&lt;span class="o"&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="o"&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="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;FutureBuilder&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;
      &lt;span class="c1"&gt;// Initialize FlutterFire:&lt;/span&gt;
      &lt;span class="nl"&gt;future:&lt;/span&gt; &lt;span class="n"&gt;_initialization&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;builder:&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;snapshot&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// Check for errors&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snapshot&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hasError&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;SomethingWentWrong&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Once complete, show your application&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;snapshot&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;connectionState&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;ConnectionState&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;done&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;MyAwesomeApp&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="c1"&gt;// Otherwise, show something whilst waiting for initialization to complete&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Loading&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
      &lt;span class="o"&gt;},&lt;/span&gt;
    &lt;span class="o"&gt;);&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;*Code above was from &lt;a href="https://firebase.flutter.dev/docs/overview"&gt;FlutterFire documentation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And TADA! You're free to use firestore CRUD functions whenever you like, in your mobile app, and web app as per usual.&lt;br&gt;
&lt;/p&gt;

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

&lt;span class="n"&gt;FirebaseFirestore&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;instance&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;collection&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'diaries'&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;FirebaseFirestore&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;instance&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;collection&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'diaries'&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;doc&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'monday'&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;update&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;FirebaseFirestore&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;instance&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;collection&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'diaries'&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;doc&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'monday'&lt;/span&gt;&lt;span class="o"&gt;).&lt;/span&gt;&lt;span class="na"&gt;delete&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



</description>
      <category>flutterweb</category>
      <category>flutter</category>
      <category>firestore</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
