<?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: Pranil Shah</title>
    <description>The latest articles on DEV Community by Pranil Shah (@ipranilshah).</description>
    <link>https://dev.to/ipranilshah</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%2F1096978%2F4722de25-f825-4e19-af7d-3c9fb35bfa6c.jpg</url>
      <title>DEV Community: Pranil Shah</title>
      <link>https://dev.to/ipranilshah</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ipranilshah"/>
    <language>en</language>
    <item>
      <title>Power of Flutter Hive DB: No SQL Local Database</title>
      <dc:creator>Pranil Shah</dc:creator>
      <pubDate>Sat, 18 Nov 2023 15:18:18 +0000</pubDate>
      <link>https://dev.to/ipranilshah/power-of-flutter-hive-db-no-sql-local-database-462e</link>
      <guid>https://dev.to/ipranilshah/power-of-flutter-hive-db-no-sql-local-database-462e</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the ever-evolving world of mobile app development, the need for efficient and reliable local storage solutions is paramount. Enter Flutter Hive DB, a lightweight and fast NoSQL database for Flutter and Dart applications. In this blog post, we'll explore what Flutter Hive DB is, why it stands out among its counterparts, the methods of saving data with Hive, and delve into a detailed example to showcase its prowess.&lt;/p&gt;




&lt;p&gt;What is Flutter Hive DB?&lt;/p&gt;

&lt;p&gt;Flutter Hive DB is a NoSQL, key-value pair database that is designed specifically for Flutter and Dart applications. Developed by the talented team at Hive, this open-source library is built with simplicity and performance in mind, providing a seamless and efficient way to persistently store and retrieve data locally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Official Document:&lt;/strong&gt; &lt;a href="https://docs.hivedb.dev/#/" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why Hive Stands Out:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Lightweight and Fast:&lt;/strong&gt; Hive is renowned for its lightweight nature and blazing-fast performance. It outshines many other local databases by minimizing overhead and ensuring quick data access, making it an ideal choice for resource-intensive mobile applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. NoSQL Structure:&lt;/strong&gt; Adopting a NoSQL structure means that Hive is schema-less, allowing for dynamic and flexible data storage. This makes it easy to adapt to changes in your data model without the need for complex migrations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Cross-Platform Compatibility:&lt;/strong&gt; Flutter Hive DB seamlessly integrates with Flutter and Dart applications, making it a cross-platform solution. Whether you're developing for Android, iOS, or the web, Hive provides a consistent and reliable storage mechanism.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/pranilshah4024/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; &lt;a href="https://twitter.com/pranilshah4024" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; &lt;a href="https://github.com/pranilshah4024/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; &lt;a href="mailto:pranilshah4024@gmail.com"&gt;Email&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Methods of Saving Data with Hive:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hive supports various methods for saving data, and understanding these methods is crucial for effective data management in your Flutter applications:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Box Operations:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;put: Adds or updates a key-value pair in the box.
get: Retrieves the value associated with a given key.
delete: Removes a key-value pair from the box.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Batch Operations:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;putAll: Adds or updates multiple key-value pairs in a single operation.
deleteAll: Removes multiple key-value pairs in a single operation.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Custom Adapters:&lt;/strong&gt; Hive allows developers to create custom adapters for complex data types, enabling the storage of custom objects with ease.&lt;/p&gt;




&lt;p&gt;Integration :&lt;/p&gt;

&lt;p&gt;Let's walk through the process of integrating Bugfender into a Flutter application:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Adding Dependency:&lt;/strong&gt; &lt;br&gt;
Add the Bugfender dependency to your &lt;code&gt;pubspec.yaml&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dependencies:
  hive: ^[version]
  hive_flutter: ^[version]

dev_dependencies:
  hive_generator: ^[version]
  build_runner: ^[version]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Initialize :&lt;/strong&gt;&lt;br&gt;
Initialize Hive with a valid directory in your app files. You can also provide a subdirectory:&lt;br&gt;
await Hive.initFlutter();&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Use Hive.init() for non-Flutter apps.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;3. Open Box :&lt;/strong&gt;&lt;br&gt;
All of your data is stored in boxes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var box = await Hive.openBox('testBox');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You may call box('testBox') to get the singleton instance of an already opened box.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;**Note: **Hive supports all primitive &lt;code&gt;types&lt;/code&gt;, &lt;code&gt;List&lt;/code&gt;, &lt;code&gt;Map&lt;/code&gt;, &lt;code&gt;DateTime&lt;/code&gt;, &lt;code&gt;BigInt&lt;/code&gt; and &lt;code&gt;Uint8List&lt;/code&gt;. Any object can be stored using TypeAdapters.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Add Data Basics:&lt;/strong&gt;&lt;br&gt;
Simply adding data into an already opened box using key-pair.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import 'package:hive/hive.dart';

void main() async {

  var box = await Hive.openBox('testBox');

  box.put('name', 'David');

/// get data from box using key 
  print('Name: ${box.get('name')}');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Add Data Using Hive Object :&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data Object&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@HiveType()
class Person extends HiveObject {
  @HiveField(0)
  String name;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Generate adapter using &lt;code&gt;hive_generator&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;flutter packages pub run build_runner build - delete-conflicting-outputs&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Type Adapter :&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class PersonAdapter extends TypeAdapter&amp;lt;Person&amp;gt; {
  @override
  final typeId = 0;

  @override
  Person read(BinaryReader reader) {
    return Person()..name = reader.read();
  }

  @override
  void write(BinaryWriter writer, Person obj) {
    writer.write(obj.name);
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;When to Use?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hive is very performant because it has little overhead compared to relational databases. The API is very close to how the data is stored on the disk.&lt;br&gt;
Key-value databases can be used to store almost any kind of data. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User profiles&lt;/li&gt;
&lt;li&gt;Session information&lt;/li&gt;
&lt;li&gt;Article/blog comments&lt;/li&gt;
&lt;li&gt;Messages&lt;/li&gt;
&lt;li&gt;Shopping cart contents&lt;/li&gt;
&lt;li&gt;Product categories&lt;/li&gt;
&lt;li&gt;Binary data&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hive is also one of the best options when it comes to cross-platform support. You don't have to include binaries, and it works in the browser using IndexedDB.&lt;br&gt;
If you use the shared_preferences packages and don't need to access them from native code, you should always use Hive instead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When not to use Hive&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every kind of data can be stored in Hive when modeled correctly. That being said, it might sometimes be more convenient to use a relational database like SQLite. (More convenient, not faster!)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Especially if your data has complex relations and you rely heavily on indices and complex queries, you should consider using SQLite.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Since Hive is so lightweight and will hardly increase your app size at all, you can also use Hive and other solutions together.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Export Stored Data of Hive :&lt;/strong&gt;&lt;br&gt;
Android :&lt;/p&gt;

&lt;p&gt;Android Studio &amp;gt; Device File Explorer &amp;gt; data &amp;gt; data &amp;gt; your_package_name &amp;gt; box_name.hive&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;iOS :&lt;br&gt;
Xcode &amp;gt; Organiser &amp;gt; your_app &amp;gt; download_container &amp;gt; show package content &amp;gt; box_name.hive&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Visualise Data :&lt;br&gt;
&lt;a href="https://studio.hivedb.dev/#/" rel="noopener noreferrer"&gt;Link&lt;/a&gt;: You can drop your .hive file here&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk732ipkv5tyzi49xbvyv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk732ipkv5tyzi49xbvyv.png" alt="Flutter with hive by Pranil Shah" width="800" height="199"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Flutter Hive DB stands as a testament to the power of simplicity and efficiency in local storage solutions. With its lightweight design, NoSQL structure, and cross-platform compatibility, it has earned its place as a go-to database for Flutter and Dart developers. By understanding the various methods of saving data with Hive and exploring practical examples, you can harness the full potential of this versatile database in your mobile applications.&lt;br&gt;
Let's Connect and follow for more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/ipranilshah/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; &lt;a href="https://twitter.com/ipranilshah" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; &lt;a href="https://github.com/pranilshah4024/" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; &lt;a href="mailto:pranilshah4024@gmail.com"&gt;Email&lt;/a&gt; &lt;br&gt;
&lt;a href="https://pranilshah.in" rel="noopener noreferrer"&gt;https://pranilshah.in&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>programming</category>
      <category>android</category>
      <category>ios</category>
    </item>
    <item>
      <title>Supercharge Flutter Development with Bugfender: Realtime Debugging</title>
      <dc:creator>Pranil Shah</dc:creator>
      <pubDate>Sun, 12 Nov 2023 20:44:12 +0000</pubDate>
      <link>https://dev.to/ipranilshah/supercharge-flutter-development-with-bugfender-realtime-debugging-3glk</link>
      <guid>https://dev.to/ipranilshah/supercharge-flutter-development-with-bugfender-realtime-debugging-3glk</guid>
      <description>&lt;p&gt;&lt;strong&gt;What is Bugfender?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As per &lt;a href="https://bugfender.com/" rel="noopener noreferrer"&gt;Bugfender&lt;/a&gt; documentation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Bugfender is a log storage service for application developers. Bugfender collects everything happening in the application, even if it doesn't crash, in order to reproduce and resolve bugs more effectively and provide better customer support.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;Key Features of Bugfender:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Real-Time Logging:&lt;/strong&gt; Bugfender allows you to see logs from devices in real-time, making it easier to catch bugs as they occur.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remote Debugging:&lt;/strong&gt; Developers can remotely inspect and debug applications, eliminating the need to access the device physically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Device Details:&lt;/strong&gt; Bugfender provides device-specific details, such as OS version, screen resolution, and more, aiding in pinpointing issues related to specific devices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom Logging Levels:&lt;/strong&gt; Developers can categorize logs based on severity, making prioritizing and focusing on critical issues easier.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Integrating Bugfender with Flutter:&lt;/strong&gt;&lt;br&gt;
Let's walk through the process of integrating Bugfender into a Flutter application:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Install Bugfender Dependency:&lt;/strong&gt;&lt;br&gt;
Add the Bugfender dependency to your &lt;code&gt;pubspec.yaml&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dependencies:
  flutter_bugfender: ^2.1.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run &lt;code&gt;flutter pub get&lt;/code&gt; to install the package.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Initialize Bugfender:&lt;/strong&gt; In your main.dart file, import Bugfender, and initialize it in the main function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import 'package:flutter_bugfender/flutter_bugfender.dart';

void main() {
  Bugfender.init("YOUR_APP_KEY", enableUIEventLogging: true);
  runApp(MyApp());
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Replace "YOUR_APP_KEY" with the key obtained from the Bugfender dashboard.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Logging Messages:&lt;/strong&gt; Use Bugfender to log messages throughout your application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FlutterBugfender.log("Working fine!");
FlutterBugfender.fatal("Fatal sent!");
FlutterBugfender.error("Error sent!");
FlutterBugfender.warn("Warning sent!");
FlutterBugfender.info("Info sent!");
FlutterBugfender.debug("Debug sent!");
FlutterBugfender.trace("Trace sent!");
FlutterBugfender.sendLog(
 line: 42,
 method: "someMethod()",
 file:"someFile",
 level: LogLevel.info,
 tag: "Custom tag",
 text: "This is a custom log"
);
FlutterBugfender.setDeviceString("user.email", "example@example.com");
FlutterBugfender.setDeviceInt("user.id", 32);
Flu tterBugfender.setDeviceFloat("user.pi", 3.14);
FlutterBugfender.setDeviceBool("user.enabled", true);
FlutterBugfender.removeDeviceKey("user.pi");
FlutterBugfender.sendCrash("Test Crash", "Stacktrace here!");
FlutterBugfender.sendIssue("Test Issue", "Issue value goes here!");
FlutterBugfender.sendUserFeedback("Test user feedback", "User feedback details here!");
FlutterBugfender.setForceEnabled(true);
FlutterBugfender.forceSendOnce();
FlutterBugfender.getDeviceUri());
FlutterBugfender.getSessionUri());
FlutterBugfender.getUserFeedback()); // Show a screen which asks for feedback
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These logs will be sent to the Bugfender dashboard in real-time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Viewing Logs:&lt;/strong&gt; Access the Bugfender dashboard to view logs from different devices, filter by log levels, and analyze the app's behavior remotely.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9cm37khlgo4lcoyb8mty.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9cm37khlgo4lcoyb8mty.png" alt=" " width="800" height="296"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Benefits of Bugfender in Flutter Development:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Efficient Bug Identification:&lt;/strong&gt; Bugfender provides real-time logs, enabling developers to identify and fix bugs as they occur, reducing debugging time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remote Debugging:&lt;/strong&gt; Developers can remotely debug applications, making it easier to troubleshoot issues on various devices without physically accessing them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Device-Specific Insights:&lt;/strong&gt; Bugfender offers detailed information about each device, helping developers understand and resolve issues specific to certain configurations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom Logging Levels:&lt;/strong&gt; Categorizing logs by severity allows developers to focus on critical issues first, streamlining the debugging process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streamlined Collaboration:&lt;/strong&gt; Bugfender facilitates collaboration among team members by providing a centralized platform for log analysis, making it easier to share insights and work together to solve problems.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;br&gt;
Integrating Bugfender with your Flutter application significantly enhances the debugging process by providing real-time insights, remote debugging capabilities, and detailed device-specific information. By streamlining the identification and resolution of bugs, Bugfender proves to be a valuable tool for Flutter developers striving to create robust and error-free applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdvurop25cme9ypnwluy6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdvurop25cme9ypnwluy6.png" alt="Flutter with Bugfender by Pranil Shah" width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's Connect and follow for more.&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/ipranilshah/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; &lt;a href="https://twitter.com/ipranilshah" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt; &lt;a href="https://github.com/pranilshah4024" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; &lt;a href="mailto:pranilshah4024@gmail.com"&gt;Email&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pranilshah.in" rel="noopener noreferrer"&gt;https://pranilshah.in&lt;/a&gt;&lt;/p&gt;

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