<?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>Forem: Samarth Agarwal</title>
    <description>The latest articles on Forem by Samarth Agarwal (@samarthagarwal).</description>
    <link>https://forem.com/samarthagarwal</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%2F482703%2F7a4212b9-9455-4f3e-a760-957eaf36361b.jpeg</url>
      <title>Forem: Samarth Agarwal</title>
      <link>https://forem.com/samarthagarwal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/samarthagarwal"/>
    <language>en</language>
    <item>
      <title>Flutter + Flame Experiment</title>
      <dc:creator>Samarth Agarwal</dc:creator>
      <pubDate>Thu, 29 Jul 2021 08:28:21 +0000</pubDate>
      <link>https://forem.com/samarthagarwal/flutter-flame-experiment-3f1h</link>
      <guid>https://forem.com/samarthagarwal/flutter-flame-experiment-3f1h</guid>
      <description>&lt;p&gt;A simple Flutter experiment using Flame simulating a Double Pendulum system. Really enjoyed how Flame works.&lt;/p&gt;

&lt;h4&gt;
  
  
  Demo
&lt;/h4&gt;

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

&lt;h4&gt;
  
  
  References and Credits
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.myphysicslab.com/pendulum/double-pendulum-en.html"&gt;https://www.myphysicslab.com/pendulum/double-pendulum-en.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=uWzPe_S-RVE"&gt;https://www.youtube.com/watch?v=uWzPe_S-RVE&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Repo Here: &lt;a href="https://github.com/samarthagarwal/double_pendulum_flame"&gt;https://github.com/samarthagarwal/double_pendulum_flame&lt;/a&gt;
&lt;/h4&gt;

</description>
      <category>flutter</category>
      <category>flame</category>
      <category>dart</category>
      <category>dartlang</category>
    </item>
    <item>
      <title>Full-Text Search in Flutter with Algolia</title>
      <dc:creator>Samarth Agarwal</dc:creator>
      <pubDate>Mon, 05 Oct 2020 11:48:29 +0000</pubDate>
      <link>https://forem.com/samarthagarwal/full-text-search-in-flutter-with-algolia-3kni</link>
      <guid>https://forem.com/samarthagarwal/full-text-search-in-flutter-with-algolia-3kni</guid>
      <description>&lt;h6&gt;
  
  
  # &lt;em&gt;This article was originally posted on my Medium publication. &lt;a href="https://medium.com/flutter-community/full-text-search-in-flutter-with-firestore-and-algolia-8de1a10b0c49" rel="noopener noreferrer"&gt;Here&lt;/a&gt; is a link to the original.&lt;/em&gt;
&lt;/h6&gt;

&lt;p&gt;Searching is one of the most important features of any mobile application that deals with data. It is almost inevitable to not have a reliable and consistent search in a mobile application these days. If your app deals with data that it retrieves from an API or a web service, you can have the backend developers develop the search mechanism for you and you can then consume the search results via the API, but, if you are using something like Cloud Firestore to store your data, you are in a puddle.&lt;/p&gt;

&lt;p&gt;You can perform basic searches in Cloud Firestore where you need to match some fields with some values and order the results in a certain order as long as you are not dealing with text. Basically, it is not even searching. You can only look for exact value matches in the documents fields. For example, if a document has a field called &lt;code&gt;name&lt;/code&gt; with the value &lt;code&gt;John Doe&lt;/code&gt;, your search query should contain the exact field &lt;code&gt;name&lt;/code&gt; and its value to be able to retrieve this document. Even if you use &lt;code&gt;John&lt;/code&gt; or &lt;code&gt;Doe&lt;/code&gt; as your search string, it won’t work because for text, you always check for equality in Firestore.&lt;/p&gt;

&lt;p&gt;Recently, I had to add the search functionality to an app I have been working on and I had to write the search logic in such a way that it should consider multiple fields within a document on Cloud Firestore. For example, If I have the following documents inside my &lt;code&gt;Posts&lt;/code&gt; collection.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;post_id: 1234
post_title: Web Development for Beginners
post_text: This is a wonderful book for those who want to learn web development from scratch.

post_id: 1235
post_title: Software Development for Beginners
post_text: ...

post_id: 1236
post_title: Programming for Beginners
post_text: ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In the above dataset, we can only perform a search within Firestore if the search query is exactly the text that we have stored in the field in the document. Firestore will not return any results for the following query.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Firestore.collection("Posts").where("post_title", "==", "Software").get()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And that’s obvious. The search term &lt;code&gt;software&lt;/code&gt; does not match exactly within any document’s &lt;code&gt;post_title&lt;/code&gt; field. And the problem maximizes when you are supposed to search across fields. Moreover, you cannot expect your users to be able to type the title of the book exactly the same way you have it in the database.&lt;/p&gt;

&lt;p&gt;Enter Algolia. &lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F450%2F1%2Am2zbMG9VI38PvfZoH9UScA.jpeg" 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%2F450%2F1%2Am2zbMG9VI38PvfZoH9UScA.jpeg" alt="Algolia"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have been an Algolia user and it is a life-saver if you are using Firestore and 3 months into development you realize you are in a puddle.&lt;/p&gt;

&lt;p&gt;I used Algolia around 2 years ago for the first time for a project and I decided to use it again. This was a piece of cake for Algolia considering what it can do with JSON data. So the first step in integrating Algolia in your app is to decide what data you want to perform your searches on. Narrow it down as much as you can and then add that data to Algolia.&lt;/p&gt;

&lt;p&gt;Algolia has SDKs for both clients and servers in many popular programming languages but not Dart! But we will get around that. For now, I will be writing a small NodeJS script that will read all the documents from the Posts collection and add them to an index on Algolia. An Algolia index is like a collection of related data. An index has JSON documents within which it searches.&lt;br&gt;
I will be using the Firebase’s Admin SDK to sync Firestore and Algolia. I will be using the &lt;code&gt;algoliasearch&lt;/code&gt; NodeJS package to use the Algolia SDK. I will be skipping the details of this.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const algolia = algoliasearch("APP_ID", "API_ADMIN_KEY");
const index = algolia.initIndex("Posts"); // You can choose any name
let records = [];
let querySnapshot = await admin.firestore().collection("Posts").get();

for (let i in querySnapshot.docs) {
    let obj = querySnapshot.docs[i].data();
    obj.objectID = querySnapshot.docs[i].id;
    records.push(obj);
}

await index.saveObjects(records);
console.log("Pushed everything to Algolia"); 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;You can have a look at &lt;a href="https://www.youtube.com/watch?v=vDsOQ58TrI0" rel="noopener noreferrer"&gt;this&lt;/a&gt; video on &lt;a href="https://www.youtube.com/thesamarthagarwal" rel="noopener noreferrer"&gt;my YouTube channel&lt;/a&gt; to see how I uploaded the data from a Firestore collection to an Algolia index.&lt;/p&gt;

&lt;p&gt;The above code snippet just reads all the documents from the &lt;code&gt;Posts&lt;/code&gt; collection and inserts them one by one in the results array. Each object in the array has a property called &lt;code&gt;objectID&lt;/code&gt; that Algolia needs to index your data. Once the script finishes, you will have all the documents in an Algolia index called &lt;code&gt;Posts&lt;/code&gt;.&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%2F1400%2F1%2APcpPgsBl4b87GAEab7hV4A.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%2Fmiro.medium.com%2Fmax%2F1400%2F1%2APcpPgsBl4b87GAEab7hV4A.png" alt="Index created on Algolia"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go to the configuration section, select the Searchable Attributes option on the left, and add the &lt;code&gt;post_title&lt;/code&gt; and &lt;code&gt;post_text&lt;/code&gt; both to the list of searchable attributes. This will allow Algolia to search within both these fields.&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%2F1400%2F1%2Aubwy1bJ7uMZWOlyCUhu5HA.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%2Fmiro.medium.com%2Fmax%2F1400%2F1%2Aubwy1bJ7uMZWOlyCUhu5HA.png" alt="Added post_text and post_title to searchable attributes"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that we have the data on Algolia and we have configured how we want to perform our searches, let’s see how we can implement search in the Flutter App.&lt;/p&gt;

&lt;p&gt;Unfortunately, there is no Official SDK for Dart/Flutter for Algolia but you can use the amazing package &lt;code&gt;dart_algolia&lt;/code&gt; which is a wrapper around the REST API or you are feeling wild, you can go ahead with the REST API yourself. Your options are open.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/knoxpo" rel="noopener noreferrer"&gt;
        knoxpo
      &lt;/a&gt; / &lt;a href="https://github.com/knoxpo/dart_algolia" rel="noopener noreferrer"&gt;
        dart_algolia
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      [Unofficial] Algolia is a pure dart SDK, wrapped around Algolia REST API for easy implementation for your Flutter or Dart projects.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;I will be creating a brand new app in Flutter and quickly install the &lt;code&gt;dart_algolia&lt;/code&gt; package by adding it as a dependency in the &lt;code&gt;pubspec.yaml&lt;/code&gt; file. Save the file and run &lt;code&gt;flutter packages get&lt;/code&gt; command to install the package.&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%2F1400%2F1%2AzOjlzFSUt2Ow5ALgMqrGXw.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%2Fmiro.medium.com%2Fmax%2F1400%2F1%2AzOjlzFSUt2Ow5ALgMqrGXw.png" alt="Added algolia as a dependency in pubspec.yaml"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, in the &lt;code&gt;main.dart&lt;/code&gt; file, we will create a minimal UI with a text field and a button to perform the search. Here is the complete &lt;code&gt;build()&lt;/code&gt; method.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text("Algolia Search"),
    ),
    body: Container(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: &amp;lt;Widget&amp;gt;[
          Text("Search"),
          TextField(
            decoration: InputDecoration(hintText: "Search query here..."),
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.end,
            children: &amp;lt;Widget&amp;gt;[
              FlatButton(
                color: Colors.blue,
                child: Text(
                  "Search",
                  style: TextStyle(color: Colors.white),
                ),
                onPressed: () {},
              ),
            ],
          )
        ],
      ),
    ), // This trailing comma makes auto-formatting nicer for build methods.
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And here is how it looks like.&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%2F1400%2F1%2AWSfkt6enIVWKSB9t8CYOQQ.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%2Fmiro.medium.com%2Fmax%2F1400%2F1%2AWSfkt6enIVWKSB9t8CYOQQ.png" alt="Preview of the UI"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, let’s quickly add a &lt;code&gt;TextEditingController&lt;/code&gt; so that we can access the value of the &lt;code&gt;TextField&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TextEditingController _searchText = TextEditingController(text: "");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;And then assign the &lt;code&gt;_searchText&lt;/code&gt; to the controller property of the &lt;code&gt;TextField&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TextField(
  controller: _searchText,
  decoration: InputDecoration(hintText: "Search query here..."),
),
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Finally, it is time to write the code for the &lt;code&gt;onPressed&lt;/code&gt; event on the &lt;code&gt;FlatButton&lt;/code&gt;. Let’s create a method called &lt;code&gt;search&lt;/code&gt; and write all the search logic inside of it.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FlatButton(
  color: Colors.blue,
  child: Text(
    "Search",
    style: TextStyle(color: Colors.white),
  ),
  onPressed: _search,
),
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;We will now add a few variables at the top inside the class.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;List&amp;lt;AlgoliaObjectSnapshot&amp;gt; _results = [];
bool _searching = false;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The &lt;code&gt;_results&lt;/code&gt; array will hold the data returned by Algolia and we will use this to generate a &lt;code&gt;ListView&lt;/code&gt;. The &lt;code&gt;_searching&lt;/code&gt; boolean will just be used to indicate if searching has completed or not.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_search() async {
  setState(() {
    _searching = true;
  });

  Algolia algolia = Algolia.init(
    applicationId: 'APP_ID',
    apiKey: 'SEARCH_API_KEY',
  );

  AlgoliaQuery query = algolia.instance.index('Posts');
  query = query.search(_searchText.text);

  _results = (await query.getObjects()).hits;

  setState(() {
    _searching = false;
  });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Finally, let’s create the &lt;code&gt;ListView&lt;/code&gt; using &lt;code&gt;ListView.builder&lt;/code&gt; widget constructor. We will put it as the last element inside the &lt;code&gt;Column&lt;/code&gt; and wrap it inside an &lt;code&gt;Expanded&lt;/code&gt; widget so that it occupies all the available vertical space.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Expanded(
  child: _searching == true
      ? Center(
          child: Text("Searching, please wait..."),
        )
      : _results.length == 0
          ? Center(
              child: Text("No results found."),
            )
          : ListView.builder(
              itemCount: _results.length,
              itemBuilder: (BuildContext ctx, int index) {
                AlgoliaObjectSnapshot snap = _results[index];

                return ListTile(
                  leading: CircleAvatar(
                    child: Text(
                      (index + 1).toString(),
                    ),
                  ),
                  title: Text(snap.data["post_title"]),
                  subtitle: Text(snap.data["post_text"]),
                );
              },
            ),
),
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;All done. The code can be a little bit cleaner but let’s ignore it for now. Let’s test this out.&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%2F1224%2F1%2Am9lPWaFMkmviYfLJeoqjgQ.gif" 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%2F1224%2F1%2Am9lPWaFMkmviYfLJeoqjgQ.gif" alt="Final App Demo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is just the beginning. Algolia offers tremendous power and allows you to perform facetted searches, geolocation-based searches, ranking and sorting, and a lot more. I am still experimenting and you should give it a shot. Also, feel free to share your experiences.&lt;/p&gt;

&lt;p&gt;The code for the demo above is available on GitHub.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/samarthagarwal" rel="noopener noreferrer"&gt;
        samarthagarwal
      &lt;/a&gt; / &lt;a href="https://github.com/samarthagarwal/flutter_algolia" rel="noopener noreferrer"&gt;
        flutter_algolia
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;flutter_algolia&lt;/h1&gt;

&lt;/div&gt;

&lt;p&gt;A new Flutter application.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Getting Started&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;This project is a starting point for a Flutter application.&lt;/p&gt;

&lt;p&gt;A few resources to get you started if this is your first Flutter project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://flutter.dev/docs/get-started/codelab" rel="nofollow noopener noreferrer"&gt;Lab: Write your first Flutter app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://flutter.dev/docs/cookbook" rel="nofollow noopener noreferrer"&gt;Cookbook: Useful Flutter samples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For help getting started with Flutter, view our
&lt;a href="https://flutter.dev/docs" rel="nofollow noopener noreferrer"&gt;online documentation&lt;/a&gt;, which offers tutorials,
samples, guidance on mobile development, and a full API reference.&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/samarthagarwal/flutter_algolia" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;Here is a complete video on YouTube where I have implemented Full-text search using Algolia in a Flutter app.&lt;/p&gt;

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

&lt;p&gt;You can also subscribe to my YouTube channel for more fun content. &lt;/p&gt;

&lt;p&gt;Keep coding, cheers.&lt;/p&gt;

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