<?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: DailyFlutter.Monster</title>
    <description>The latest articles on DEV Community by DailyFlutter.Monster (@dailyfluttermonster).</description>
    <link>https://dev.to/dailyfluttermonster</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%2F403796%2F84cb8dd3-a76b-4c70-9358-609bf9134ccb.png</url>
      <title>DEV Community: DailyFlutter.Monster</title>
      <link>https://dev.to/dailyfluttermonster</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dailyfluttermonster"/>
    <language>en</language>
    <item>
      <title>How To Create A Flutter Chrome Extension</title>
      <dc:creator>DailyFlutter.Monster</dc:creator>
      <pubDate>Wed, 15 Jul 2020 08:43:31 +0000</pubDate>
      <link>https://dev.to/dailyfluttermonster/how-to-create-a-flutter-chrome-extension-10be</link>
      <guid>https://dev.to/dailyfluttermonster/how-to-create-a-flutter-chrome-extension-10be</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wWuar01b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/fbfq8qev0etmjh6i7tku.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wWuar01b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/fbfq8qev0etmjh6i7tku.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;Chrome extension are used in chrome (obviously), and they allow the user to have an app in a small overlay on the top right of their chrome window. Some popular chrome extension include the likes of: grammerly, honey, JSON Viewer etc. &lt;/p&gt;

&lt;p&gt;Today I will be showing how to create a simple chrome extension that runs a flutter app. The end result of what we are looking at looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qy02JwvT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/icp9jyo3agk2rhrer5i1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qy02JwvT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/icp9jyo3agk2rhrer5i1.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Without any more hesitation let's get to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tutorial Portion
&lt;/h2&gt;

&lt;p&gt;The first thing that needs to be done after you create the project is restructuring the manifest file located in the web folder. We need to format our app to be a chrome extension, so the manifest will be:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;The next step is to remove the script that calls creates the flutter app from index.html, and but it in another file I will name flutter_app.htm&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;This is because chrome extensions don't like it when you run scripts in index.html. We will call the created flutter_app.htm file as an iframe in index.htm:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;We are done now for coding, let's see how we can add this as a chrome extension.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adding a Chrome Extension
&lt;/h3&gt;

&lt;p&gt;First run flutter build web inside your flutter project.&lt;/p&gt;

&lt;p&gt;In your browser navigate to chrome://extensions/. Once there click on load unpacked in the top left corner&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LEdfG_fd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0filajfkjmdablorlce1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LEdfG_fd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0filajfkjmdablorlce1.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open the build/web folder, then the flutter extension shoula appear on dashboard.&lt;/p&gt;

&lt;p&gt;You can now open the flutter extension from the extensions menu in the top right of your chrome browser.&lt;/p&gt;

&lt;p&gt;If you want to pin it, just click the pin button and it will be added to your list of pinned extensions&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8-vbvPru--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/orjofipd8m8o5wg9mq36.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8-vbvPru--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/orjofipd8m8o5wg9mq36.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I hope this information was of value to you. This is a good idea if you want to build an app that has a chrome extension companion, like forest for example.&lt;/p&gt;

&lt;p&gt;Source code: &lt;a href="https://github.com/Mattds825/chrome_ext"&gt;https://github.com/Mattds825/chrome_ext&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If you want to run the source code first run 'flutter build web' then add build/web as an extension in chrome&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>tutorial</category>
      <category>webdev</category>
      <category>computerscience</category>
    </item>
    <item>
      <title>How to host a Flutter web app on Firebase</title>
      <dc:creator>DailyFlutter.Monster</dc:creator>
      <pubDate>Mon, 13 Jul 2020 13:09:42 +0000</pubDate>
      <link>https://dev.to/dailyfluttermonster/how-to-host-a-flutter-web-app-on-firebase-4dpk</link>
      <guid>https://dev.to/dailyfluttermonster/how-to-host-a-flutter-web-app-on-firebase-4dpk</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TrTGpCFe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qeve6geimg3suxmlcydu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TrTGpCFe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qeve6geimg3suxmlcydu.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Firebase is a great tool for whoever wants to host their web app or website for free and easily. In this tutorial, I will be showing how to quickly create a firebase project and host a flutter web app.&lt;/p&gt;

&lt;h2&gt;
  
  
  The App
&lt;/h2&gt;

&lt;p&gt;For the purpose of keeping things simple, I will just be sticking with the initial counter app that comes with every new flutter project.&lt;/p&gt;

&lt;p&gt;So, in the terminal, I run &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;flutter create 'firebase_hosted_app&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates the app for me in that directory we will not even have to look at the code in reality and everything that we have to do to get it hosted can be done from the terminal.&lt;/p&gt;

&lt;p&gt;Change to the drectory of the app&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cd firebase_hosted_app&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next thing is to build for the web.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;flutter build web&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;this wil create the web project that you will be hosting in the directory build/web&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrating Firebase into the Project
&lt;/h2&gt;

&lt;p&gt;for this, you will first need the Firebase CLI. If you do not have these installed please follow this tutorial of how to do that and then come back to this part:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://firebase.google.com/docs/cli#install_the_firebase_cli"&gt;https://firebase.google.com/docs/cli#install_the_firebase_cli&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you must login to firebase though the terminal (note you must have a google account to use firebase). &lt;/p&gt;

&lt;p&gt;In the terminal enter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;firebase login&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You will then be redirected to a link on the browser where you will have to log in to your google account. Once this is done you can close the browser and return to the terminal.&lt;/p&gt;

&lt;p&gt;Now run:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;firebase init&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This will initilize your firebase project and you will be promtedd with 6 options:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9QD7xINt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0mnx2cklkowmyd5l6pot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9QD7xINt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0mnx2cklkowmyd5l6pot.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Move down to hositng with the arrow keys, hit the spacebar to select it then press enter. The next pormt will look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7HvSVeHL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ohtuiqrhyq840kqd0d0a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7HvSVeHL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ohtuiqrhyq840kqd0d0a.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose 'create a new project'&lt;/p&gt;

&lt;p&gt;You will then be asked to specify a unique project ID (note: the id  cannot include these characters: ' " ! _).&lt;/p&gt;

&lt;p&gt;The next prompt is what would you like to call you to project just leave this blank and let it default to the id unless you want to change the name &lt;/p&gt;

&lt;p&gt;then firebase will create the project for you:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vae4v0TE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5v7ymx446obh75nqozuc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vae4v0TE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5v7ymx446obh75nqozuc.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the public directory it will be build/web (the one we created in the first section)&lt;/p&gt;

&lt;p&gt;It will ask you if you want you configure as a single-page app&lt;/p&gt;

&lt;p&gt;Type Y and enter (to say yes)&lt;/p&gt;

&lt;p&gt;It will then say that index.html already exists. Overwrite? &lt;/p&gt;

&lt;p&gt;Type N and enter (to say no)&lt;/p&gt;

&lt;p&gt;This is what the process should look like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--b6JdGF5h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4wn1yk24nt4x9vbbomey.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b6JdGF5h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4wn1yk24nt4x9vbbomey.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
The only thing that is left now is to enter in the terminal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;firebase deploy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rxBN_Lci--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yd36sfxw94yrd3gksq0z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rxBN_Lci--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yd36sfxw94yrd3gksq0z.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now are done!!&lt;/p&gt;

&lt;p&gt;we can follow the host url to the the project online. In my case it is: &lt;a href="https://fir-hosted-app825.web.app/#/"&gt;https://fir-hosted-app825.web.app/#/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and sure enough we get the flutter counter app:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BIqib6eP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/l3omylafgqmw549iehtq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BIqib6eP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/l3omylafgqmw549iehtq.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I hope I managed to show  you how easy and quick it is to host your flutter project using firebase, this is great if you want to showcase you app without having the user download it from one of the stores, instead since flutter has one codebase, you can host you app online.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>tutorial</category>
      <category>hosting</category>
      <category>flutterweb</category>
    </item>
    <item>
      <title>Flutter Web Scraper Level 2: Etsy Product Finder Part 2</title>
      <dc:creator>DailyFlutter.Monster</dc:creator>
      <pubDate>Thu, 02 Jul 2020 07:22:39 +0000</pubDate>
      <link>https://dev.to/dailyfluttermonster/flutter-web-scraper-level-2-etsy-product-finder-part-2-2n5</link>
      <guid>https://dev.to/dailyfluttermonster/flutter-web-scraper-level-2-etsy-product-finder-part-2-2n5</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;I am showing how to build a etsty product searcher utilizing webscraping in flutter. In the previous part (link here) I showed how to set the ui, and we ended with this&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JuvDp4fY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wdbrw54tolhkeguq02pe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JuvDp4fY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wdbrw54tolhkeguq02pe.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our goal for this part is to add the url build to make an etsy search and the webscraping of the search results. In the end we will have an app that looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zZrbwQyi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sboja5joryrljfv9wybc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zZrbwQyi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sboja5joryrljfv9wybc.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tutorial Portion
&lt;/h2&gt;

&lt;h4&gt;
  
  
  'Please enter search' text
&lt;/h4&gt;

&lt;p&gt;The first thing we will add is a loading indicator for when we are not searching. For this&lt;/p&gt;

&lt;p&gt;in home_screen.dart we add:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h4&gt;
  
  
  Webscraping Time
&lt;/h4&gt;

&lt;p&gt;In results_list.dart we are going to add the changes to scrape the products from Esty's page. I will just add the code for the new result_list.dart file and explain some of the most important lines bellow:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;First, in lines 11-12, we have a boolean to check if the webscraping has loaded, and a list of result items that we will be adding to the list.&lt;/p&gt;

&lt;p&gt;Lines 14 is the the main Estys url and line 15 is the particular page we will be searching.&lt;/p&gt;

&lt;p&gt;We have an initState function that calls the async getData() function.&lt;/p&gt;

&lt;p&gt;getData() is the function where we will be scraping the page. First we initialize a new WebScraper variable that has the estyUrl.  Then in an if statement we check if the webpage we chose gets loaded. For the webpage in line 27, you can see that we have to construct the URL, by adding the search onto our pageExtenstion. The '.trim().replaceAll('  ', '%20')' portion is to make sure that if we have spaces in our search we are trimming them and changing any space between words to '%20' which is the standard that Etsy uses.&lt;/p&gt;

&lt;p&gt;Then we create three List&amp;gt; to get the images, descriptions, prices, and URLs. The tags used in the getElement() call were found using the web inspector in chrome on the Etsy page&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aR8PAZ2q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gp7ds7zbrduznbippmk5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aR8PAZ2q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gp7ds7zbrduznbippmk5.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We the iterate through one of the lists (in this case I chose images) and custruct our ResultItem then add it to the list.&lt;/p&gt;

&lt;p&gt;Once all this is done we call setState() and set loaded to true so that the results list will be show.&lt;/p&gt;

&lt;p&gt;And that's it!&lt;/p&gt;

&lt;p&gt;Now if you run it you should get the end product&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zZrbwQyi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sboja5joryrljfv9wybc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zZrbwQyi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sboja5joryrljfv9wybc.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I hope this projust tought you how to search and scrape html pages to display them in a list to users. This is a great idea if you want to create a comparison searcher, you could then scrape two websites and display all the result.&lt;/p&gt;

&lt;p&gt;In a future post I will also be showing how to scrape Javascript website, something that is a bit more tricky and requires more setting up, so stay tuned to for that one if you are interested.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>tutorial</category>
      <category>ios</category>
      <category>android</category>
    </item>
    <item>
      <title>Flutter Web Scraper Level 2: Etsy Product Finder Part 1</title>
      <dc:creator>DailyFlutter.Monster</dc:creator>
      <pubDate>Wed, 01 Jul 2020 11:59:18 +0000</pubDate>
      <link>https://dev.to/dailyfluttermonster/flutter-web-scraper-level-2-etsy-product-finder-part-1-1df3</link>
      <guid>https://dev.to/dailyfluttermonster/flutter-web-scraper-level-2-etsy-product-finder-part-1-1df3</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;In my previous post (&lt;a href="https://dev.to/dailyfluttermonster/get-data-from-the-web-with-web-scraper-and-flutter-gki"&gt;post&lt;/a&gt;) I showed how we can use web scraper to get the current world population number and display, however, this is a pretty simple and useless idea. So no I want to show how to use web scraper to make an app that is more like what you would be used to seeing. The application is called Etsy Product Finder and it will allow users to search for a product and view the top 5 Etsy results with their prices and if the user wants to view the product on the Etsy website, a clickthrough will be implemented. Since this will be a long walk through I will be posting 2 parts, the first one will cover installing all the packages and setting up the ui. The second will focus on how to use the data by web scraping the etsy website.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3Yaiy45Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cz5gs30v4hmd6jeivtqt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3Yaiy45Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cz5gs30v4hmd6jeivtqt.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tutorial Portion
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Installing Packages
&lt;/h4&gt;

&lt;p&gt;The first thing we need to do is add the packages that we need to our pubspec yaml. In this case it will be &lt;a href="https://pub.dev/packages/web_scraper"&gt;web_scraper&lt;/a&gt; and &lt;a href="https://pub.dev/packages/url_launcher"&gt;url_launcher&lt;/a&gt;, these packages allow us to do the necessary scraping data and also then allowing the user to clickthrough to open the item's page in the browser&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Then in main.dart you do the usual and clear everything out leaving only the main function and a stateless widget that has it's home being you homescreen:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Now I will first breakdown what we are going to build in the first part:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Main Screen with a search bar at the top&lt;/li&gt;
&lt;li&gt;List to contain search result&lt;/li&gt;
&lt;li&gt;List items for the result list&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this part we will be going through only the UI elements of the app&lt;/p&gt;

&lt;h4&gt;
  
  
  Creating Homescreen
&lt;/h4&gt;

&lt;p&gt;We need to create a homescreen with a search bar at the top and a list underneath it.&lt;/p&gt;

&lt;p&gt;So we are first going to have&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;This create a homescreen with a scaffold within a safe area (widget that avoid notches and notification bar), and it has a column, whose only child is the appbar currently.&lt;/p&gt;

&lt;p&gt;_HomeScreen state contains the variables for if the search was has been made and the string for the search&lt;/p&gt;

&lt;p&gt;As you will notice in the Homescreen class we create _HomeScreenState as a variable (state) then pass it on to createState(), this is because we are going to want to be able to change the state from the search bar class. which is what we will be doing next.&lt;/p&gt;

&lt;h4&gt;
  
  
  Creating the Seachbar
&lt;/h4&gt;

&lt;p&gt;For the search bar, we will use a row that contains a texform field and a material button that will trigger the search.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;In the code above you can see that we pass an instance of homescreen to the search bar, in turn when the material button is pressed, we change the homescreen's state so that searched is true and, the search text is the text from the textformfeild.&lt;/p&gt;

&lt;p&gt;Next we will design the result item and the result list.&lt;/p&gt;

&lt;h4&gt;
  
  
  Result Item
&lt;/h4&gt;

&lt;p&gt;The result item has to include variables for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;String for item's image url&lt;/li&gt;
&lt;li&gt;String for item's description&lt;/li&gt;
&lt;li&gt;String for item's clickthrough url&lt;/li&gt;
&lt;li&gt;String for item's prices&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;For the text we use a null checker to make sure we are not passing null results. The whole thing is wraped in an GestureDetector that calls _lauchUrl(). This in turn ia an async method that calls launch(url) to open the clickthough link.&lt;/p&gt;

&lt;p&gt;Now to create a list of these &lt;/p&gt;

&lt;h4&gt;
  
  
  Result List
&lt;/h4&gt;

&lt;p&gt;For testing puproses we won't webscrape yet, instead for this part we generate 5 test list items just to see what it looks like.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Then in test_screen.dart we can add to the column:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;if we run this and click search we will see:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OG9gT7tA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mww4wvo7asey6ly7960r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OG9gT7tA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mww4wvo7asey6ly7960r.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;In the next part I will show how we can add the webscraping to scrape search results from etsy&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Mattds825/esty_product_searcher"&gt;source code&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>android</category>
      <category>ios</category>
      <category>webscraping</category>
    </item>
    <item>
      <title>Flutter Audiobook Player in 50 lines of code</title>
      <dc:creator>DailyFlutter.Monster</dc:creator>
      <pubDate>Sat, 27 Jun 2020 17:40:51 +0000</pubDate>
      <link>https://dev.to/dailyfluttermonster/flutter-audiobook-player-in-50-lines-of-code-5c8j</link>
      <guid>https://dev.to/dailyfluttermonster/flutter-audiobook-player-in-50-lines-of-code-5c8j</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;How much can you do with 60 lines of code? Depends how good you are, also more importantly depends how good your language/framework is. While this won't be a tutorial on making super complicated quines of try to code golf until to the limit, I still found it worth sharing how easy and quick you can set up an audiobook player that plays books from librivox that can work on ios, android and web (copy and paste code at the bottom).&lt;/p&gt;

&lt;h2&gt;
  
  
  Tutorial
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Installing Packages
&lt;/h4&gt;

&lt;p&gt;For this tutorial I will be installing the package &lt;a href="https://pub.dev/packages/assets_audio_player"&gt;assets_audio_player&lt;/a&gt; for playing the audio. (In my case I will be also creating it as a web app so I will aslo install &lt;a href="https://pub.dev/packages/assets_audio_player_web"&gt;assets_audio_player_web&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cHPhqw6r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uw3fvcd2tkai2qz65s4l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cHPhqw6r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uw3fvcd2tkai2qz65s4l.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Show me the code
&lt;/h4&gt;

&lt;p&gt;In main.dart delete everything except for the main funtion, then create a statefull widget MyApp.&lt;/p&gt;

&lt;p&gt;in MyAppState we add the variables for keeping track of time and if the audio is paused or playing. I also added the url that I will be opening here.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZuyEoXfr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1bo4knb7u4y3gtg41vtl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZuyEoXfr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1bo4knb7u4y3gtg41vtl.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the build method we want to first make a material app, (I dont like the debug banner so I set debugShowCheckedModeBanner: false)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Qcdjz_vH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lhrjsdzwy93eku0hex3r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Qcdjz_vH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/lhrjsdzwy93eku0hex3r.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This MaterialApp's home will be a Scaffold with a Center widget. The center widget will have a Colum so that we can add our video's playback time and the play/pause button. This should be placed in the center of the screen so we set CrossAxisAllignment and MainAxisAllignment to center aswell.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FYT75ZaE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vvxuiyq97gju8s8bs3nb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FYT75ZaE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/vvxuiyq97gju8s8bs3nb.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now to build the audiobook player part. First, onto the simple stuff, we will create a Text widget that displays the time:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M59vx_eT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yzuxg1nqaa4vpjz11mc6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M59vx_eT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yzuxg1nqaa4vpjz11mc6.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next we add the AudioWidget (you willl need to import assets_audio_player). The paramenters we have to set are: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;'audio:' This takes in the audio's input source (can be from network or from asset)&lt;/li&gt;
&lt;li&gt;'play:' bool that stores the state&lt;/li&gt;
&lt;li&gt;'child': this where you would add your button or more elaboorate widget&lt;/li&gt;
&lt;li&gt;'onPositionChanged:' listens for changes in the audio position (c is current time and d is duration)&lt;/li&gt;
&lt;li&gt;'onReadyToPlay': listens for when the audio is ready to be played&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this tutorial my setup ended up being:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---SqDsPqz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/d6q9wl7tftbl872zqsy1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---SqDsPqz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/d6q9wl7tftbl872zqsy1.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This came out to 52 lines and if we run it we get:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qc6WM5cN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dd8al5jt73391j08xxxz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qc6WM5cN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dd8al5jt73391j08xxxz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qc6WM5cN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dd8al5jt73391j08xxxz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qc6WM5cN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/dd8al5jt73391j08xxxz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I hope you have enjoyed reading along and that you can make something much cooler than I did.&lt;/p&gt;

&lt;p&gt;As promised here is the copy and paste code:&lt;/p&gt;

&lt;p&gt;(&lt;a href="https://github.com/Mattds825/flutter_audiobook_demo"&gt;source code&lt;/a&gt;)&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


</description>
      <category>flutter</category>
      <category>dart</category>
      <category>android</category>
      <category>ios</category>
    </item>
    <item>
      <title>Get Data from the Web with Web Scraper and Flutter</title>
      <dc:creator>DailyFlutter.Monster</dc:creator>
      <pubDate>Fri, 26 Jun 2020 10:18:28 +0000</pubDate>
      <link>https://dev.to/dailyfluttermonster/get-data-from-the-web-with-web-scraper-and-flutter-gki</link>
      <guid>https://dev.to/dailyfluttermonster/get-data-from-the-web-with-web-scraper-and-flutter-gki</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;There is a huge amount of data online that is accessible with just a few clicks. Web scraping is the process of automating the manual search part with the browser and instead just scraping the info you want from each website. In the tutorial, I will be demonstrating how we can achieve this in Flutter to in the end create an app that displays the world's current population.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g2kPoDyL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ty853tgosivgfxejnyk6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g2kPoDyL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ty853tgosivgfxejnyk6.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tutorial Portion
&lt;/h2&gt;

&lt;p&gt;The first thing is first, huge shoutout to &lt;a href="https://github.com/tusharojha"&gt;https://github.com/tusharojha&lt;/a&gt; for creating the package &lt;a href="https://pub.dev/packages/web_scraper"&gt;https://pub.dev/packages/web_scraper&lt;/a&gt; that we will be using for the tutorial&lt;/p&gt;

&lt;h3&gt;
  
  
  setup
&lt;/h3&gt;

&lt;p&gt;The first thing we have to do is add the package to our flutter project in the pubspec.yaml, The link for the dependency can be found here &lt;a href="https://pub.dev/packages/web_scraper#-installing-tab-"&gt;https://pub.dev/packages/web_scraper#-installing-tab-&lt;/a&gt;. Our pubscpec.yaml should look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wXbm90tO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ly41lzrfayg86ex4mnst.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wXbm90tO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ly41lzrfayg86ex4mnst.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In main.dart we can delete the MyApp class and we will recreate it as a statless widget that returns a MaterialApp, (optionally already set 'debugShowCheckedModeBanner: false' to not the debug banner):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PnQlOi6r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i531b6zlcyf7cnxdjm3l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PnQlOi6r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i531b6zlcyf7cnxdjm3l.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We will then create our Homescreen which will be a stateful widget, that has a scaffold with a center widget, for now, the widget will just be a circular loading indicator:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l4v8xr0y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qdr1ytz6vwgkw1m1t2so.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l4v8xr0y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qdr1ytz6vwgkw1m1t2so.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dont forget to set the home as HomeScreen() in main.dart&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pqyONmte--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mqqdoddgw28g5qjisutg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pqyONmte--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mqqdoddgw28g5qjisutg.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we run this there is nothing special just the progress indicator:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qhjfnZHV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4akm5itlwdlkkustyr39.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qhjfnZHV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4akm5itlwdlkkustyr39.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lets now add some variables to keep track of the state of the app; inside _HomeScreenState. We will also create and import our WebScraper now &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cJQK_IFg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pclft7x44k5xj7sbsjqt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cJQK_IFg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pclft7x44k5xj7sbsjqt.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then for instantiating all the variables we will first override setState and call an async method that we created called _getData(). We will handle all the asynchronous calls in _getData()&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--___7UA5n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/12qm89n72ctdml3hqfff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--___7UA5n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/12qm89n72ctdml3hqfff.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We will now build out the _getData() method: we need to create a webscraper with our desired wesite url (in our case '&lt;a href="https://worldpopulationreview.com/"&gt;https://worldpopulationreview.com&lt;/a&gt;'). Then we want to check if it can load our desired page (since our website has the data in the main page this will just be '/').&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cJQK_IFg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pclft7x44k5xj7sbsjqt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cJQK_IFg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/pclft7x44k5xj7sbsjqt.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  HTML Time !!
&lt;/h3&gt;

&lt;p&gt;Now we can get what we want from the webpage. We need to first open the page in a browser and inpect the elements (in chrome cntl+alt+J)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Eqx7UL4h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/y3824j38zvknacebuptn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Eqx7UL4h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/y3824j38zvknacebuptn.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can get the element's name from the first options in properties. For the one which we want it is a div of the class center so our name will be div.center. We create a list of maps to get all the elements that match this name:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hQcXKIDC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/38vqb6h2xb36zzpnnozl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hQcXKIDC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/38vqb6h2xb36zzpnnozl.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once we have that we can call setState and set our popNum that we defined earlier to the first element's title that we get and set the bool loaded to true so the whole method should look now like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1PKAVM4h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ywae04weynua7syfbxcq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1PKAVM4h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ywae04weynua7syfbxcq.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Bringing it all Together
&lt;/h3&gt;

&lt;p&gt;The last thing we need to do now is stop the progress indicator when we get the result and display the popNum in a Text widget instead. We can do this by using the dart ternary operation to check if the loaded bool is true, and show the Text if it is true.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1PKAVM4h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ywae04weynua7syfbxcq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1PKAVM4h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ywae04weynua7syfbxcq.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So now our app should open with the loading indicator and then show the text we scraped once it is ready&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--g2kPoDyL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ty853tgosivgfxejnyk6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--g2kPoDyL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ty853tgosivgfxejnyk6.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Now we can easily scrape any static elements from websites with HTML. This is particularly useful if we want to, for example, compare the first price result of each seller's website and show them all, we would have to create a getData method for each site we are scraping then return it in a list.&lt;/p&gt;

&lt;p&gt;For the souce code: &lt;a href="https://github.com/Mattds825/web_scrape_population"&gt;souce&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Super boost your flutter web project with embedded iframes</title>
      <dc:creator>DailyFlutter.Monster</dc:creator>
      <pubDate>Thu, 25 Jun 2020 13:49:45 +0000</pubDate>
      <link>https://dev.to/dailyfluttermonster/super-boost-your-flutter-web-project-with-embedded-iframes-4a0p</link>
      <guid>https://dev.to/dailyfluttermonster/super-boost-your-flutter-web-project-with-embedded-iframes-4a0p</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;Flutter web is still in its infancy, and flutter developers are flocking to recreate their stunning ideas on web versions and often finding themselves at a loss because a lot of their favorite packages are missing web support and the ever so present community of flutter tutorials haven't caught up with the newer innovations for the web. In the Post, I will be demonstrating how to add ads to the side of your website page by simply pasting the HTML code (generally of an iframe but whatever code would work).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--38bFW-qS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5rgcscq1g5c332xs4ltr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--38bFW-qS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5rgcscq1g5c332xs4ltr.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tutorial Portion
&lt;/h2&gt;

&lt;p&gt;Now onto the meat of how to achieve this.&lt;/p&gt;

&lt;p&gt;The main file we will be focusing on is the index.html file located in the web directory, we will first be creating 3 views instead of the on view that we generally see (the two side views that will contain our HTML ads) and the content in the middle which will just be the script that runs main.dart&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating three views
&lt;/h3&gt;

&lt;p&gt;First go into index.html. It will look somthing like this &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Gd0-oPuC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/h4c4hlzy6vanki82ztan.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Gd0-oPuC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/h4c4hlzy6vanki82ztan.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first thing we will do is move the scripts that run our app to a separate folder&lt;/p&gt;

&lt;p&gt;→create new file named flutter_app.htm&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JYhNPBTl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/emx2rz2w9qbn0kvsg28l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JYhNPBTl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/emx2rz2w9qbn0kvsg28l.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this file, we will create an HTML element that has a body and copy the scripts that run main.dart from index.html. It should look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wxffaAog--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/iwwjdo9rrk11840djrad.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wxffaAog--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/iwwjdo9rrk11840djrad.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we have to go back to index.html and add an iframe that has html element we just created&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pZ3Jgd_i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uhpihgb7i705liq2c7hs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pZ3Jgd_i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/uhpihgb7i705liq2c7hs.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we run this now and had a look at it this is what we would see:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qOC7G525--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2283ggy2asywkpm9yaga.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qOC7G525--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2283ggy2asywkpm9yaga.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here we can the ever-familiar flutter demo app, however, what we can notice is that the height of it is constrained to the size of the demo home page and in this case only fills up around 10% of the screen height. We can fix this by adding a style to our div that contains the iframe. Still, in the &lt;/p&gt; tag, we have to add:

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0VoCobXF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gkuvbxwhnl4w7jku5zg4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0VoCobXF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/gkuvbxwhnl4w7jku5zg4.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;then add the style to as a class to the div conaining the iframe&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tqj-eqGW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7261yt1lmuuhcav578kf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tqj-eqGW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/7261yt1lmuuhcav578kf.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now if we run we will get our full-screen app. (note: since we are editing the HTML, flutter hot restart and hot reload don't check those files so we have to close our app and run again to see the changes) &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cRL0Z4fL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0m2hoay5lyu5vt6yw7eq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cRL0Z4fL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0m2hoay5lyu5vt6yw7eq.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our next steps will be to add the side panels&lt;/p&gt;

&lt;p&gt;First, we will create two files; side_panel_right.htm and side_panel_left.htm. for now they will look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kdub3wOY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/y9eb1wz9m85uqsdffxjk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kdub3wOY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/y9eb1wz9m85uqsdffxjk.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8giydaEP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/f07cvt6j2rbh0sw2l3j4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8giydaEP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/f07cvt6j2rbh0sw2l3j4.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then we have to go back to index.html and add them.&lt;/p&gt;

&lt;p&gt;First we have to set the styles. For this we change the full-height class's width property to 80% and create a ads-width class width of 10%.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--reN2yp7X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bim3vc1nl912d2g73h50.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--reN2yp7X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/bim3vc1nl912d2g73h50.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then we put our original iframe div in a body and add two more divs for the ads panels. We then float the left-side ads panel and the main iframe to the left and float the right-side ads panel to the right. It will look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_Ad3KW3m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/f5885o59fbe2omr7ll3e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_Ad3KW3m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/f5885o59fbe2omr7ll3e.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we run our program, it will look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Oa0yfzNb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0d0q7tjjypl2l26c48jv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Oa0yfzNb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0d0q7tjjypl2l26c48jv.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
We are pretty much done here all we need to do is add any html banner ad code to either of the side panels' htm class.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adding an ad Banner
&lt;/h3&gt;

&lt;p&gt;For purposes of this tutorial, I will just be using an HTML ad template (&lt;a href="https://www.bannersnack.com/templates/display/restaurant/b130gn-strawberry-smoothie-food-banner-template.html"&gt;https://www.bannersnack.com/templates/display/restaurant/b130gn-strawberry-smoothie-food-banner-template.html&lt;/a&gt;) If you want to connect this to AdSense or amazon affiliate ads, for example, you will need to register on their respective websites and follow the steps to get the HTML code that you can paste into the side panels. Anyways, on with the tutorial.&lt;/p&gt;

&lt;p&gt;I will take the bannersnack template and just save it as is then copy the html code:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HmccU-gn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0gtnd61aj7yhsvcv4fee.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HmccU-gn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0gtnd61aj7yhsvcv4fee.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;all we have to do is paste it in the side panel htm classes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Lincb4XT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wsbp2k11wb585olrgb0o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Lincb4XT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wsbp2k11wb585olrgb0o.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We again quit our program and rerun it. The final result should look something like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---ZdyjtOv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sm4yh80pb6babxvgebtz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---ZdyjtOv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/sm4yh80pb6babxvgebtz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;You can play around with the sizing, placing, and background colors in the HTML code to make it look better, but that's it! Now you can run native HTML ads on your flutter web project without having to wait for new packages 😎&lt;/p&gt;

&lt;p&gt;source code link &lt;a href="https://github.com/Mattds825/iframe_side_ads"&gt;https://github.com/Mattds825/iframe_side_ads&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>html</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
