<?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: sakshi angre</title>
    <description>The latest articles on Forem by sakshi angre (@coderx06).</description>
    <link>https://forem.com/coderx06</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%2F3938067%2Fead68e30-a8dd-490d-801e-88627f5a4638.jpg</url>
      <title>Forem: sakshi angre</title>
      <link>https://forem.com/coderx06</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/coderx06"/>
    <language>en</language>
    <item>
      <title>📸 Building Snap Picker — A Beautiful Animated Image Picker for Flutter</title>
      <dc:creator>sakshi angre</dc:creator>
      <pubDate>Mon, 25 May 2026 10:45:27 +0000</pubDate>
      <link>https://forem.com/coderx06/building-snap-picker-a-beautiful-animated-image-picker-for-flutter-1nf0</link>
      <guid>https://forem.com/coderx06/building-snap-picker-a-beautiful-animated-image-picker-for-flutter-1nf0</guid>
      <description>&lt;h1&gt;
  
  
  📸 Building Snap Picker — A Beautiful Animated Image Picker for Flutter
&lt;/h1&gt;

&lt;p&gt;Most Flutter image picker packages work…&lt;/p&gt;

&lt;p&gt;But let’s be honest — most of them look outdated, basic, and boring.&lt;/p&gt;

&lt;p&gt;So I decided to build something modern.&lt;/p&gt;

&lt;p&gt;Introducing &lt;strong&gt;Snap Picker&lt;/strong&gt; ✨&lt;/p&gt;

&lt;p&gt;A beautiful animated image picker for Flutter with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;custom gallery UI&lt;/li&gt;
&lt;li&gt;multi image selection&lt;/li&gt;
&lt;li&gt;camera support&lt;/li&gt;
&lt;li&gt;full screen image preview&lt;/li&gt;
&lt;li&gt;upload flow&lt;/li&gt;
&lt;li&gt;smooth interactions&lt;/li&gt;
&lt;li&gt;modern premium design&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🚀 Why I Built Snap Picker
&lt;/h1&gt;

&lt;p&gt;I wanted an image picker that felt like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instagram&lt;/li&gt;
&lt;li&gt;Snapchat&lt;/li&gt;
&lt;li&gt;modern social apps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;plain system UI&lt;/li&gt;
&lt;li&gt;outdated design&lt;/li&gt;
&lt;li&gt;poor UX&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I built a custom image picker experience completely in Flutter.&lt;/p&gt;




&lt;h1&gt;
  
  
  ✨ Features
&lt;/h1&gt;

&lt;p&gt;✅ Custom Gallery Picker&lt;br&gt;
✅ Multi Image Selection&lt;br&gt;
✅ Camera Support&lt;br&gt;
✅ Full Screen Image Preview&lt;br&gt;
✅ Swipe Between Images&lt;br&gt;
✅ Zoom Support&lt;br&gt;
✅ Upload Progress UI&lt;br&gt;
✅ Remove Selected Images&lt;br&gt;
✅ Draggable Bottom Sheet&lt;br&gt;
✅ Smooth Animations&lt;br&gt;
✅ Modern UI Design&lt;/p&gt;


&lt;h1&gt;
  
  
  📦 Installation
&lt;/h1&gt;

&lt;p&gt;Add this to your &lt;code&gt;pubspec.yaml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;dependencies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;snap_picker&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;^0.0.1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter pub get
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ⚡ Usage
&lt;/h1&gt;

&lt;p&gt;Using Snap Picker is simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;SnapPicker&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;show&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;allowMultiple:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;maxSelection:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;onImagesSelected:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;images&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;images&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🖼️ Beautiful Preview Grid
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;SnapPickerPreview&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nl"&gt;images:&lt;/span&gt; &lt;span class="n"&gt;selectedImages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;onRemove:&lt;/span&gt; &lt;span class="n"&gt;removeImage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Users can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;preview images&lt;/li&gt;
&lt;li&gt;remove images&lt;/li&gt;
&lt;li&gt;tap images for full screen view&lt;/li&gt;
&lt;li&gt;zoom and swipe between images&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🎨 The Goal
&lt;/h1&gt;

&lt;p&gt;I didn’t want to create:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“just another image picker”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I wanted to create:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“an image picker developers actually enjoy using.”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🔥 What’s Coming Next
&lt;/h1&gt;

&lt;p&gt;Future updates planned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎞️ Video Support&lt;/li&gt;
&lt;li&gt;🫧 Gooey Animations&lt;/li&gt;
&lt;li&gt;🔄 Reorder Images&lt;/li&gt;
&lt;li&gt;📂 Album Selector&lt;/li&gt;
&lt;li&gt;🌈 Glassmorphism UI&lt;/li&gt;
&lt;li&gt;⚡ Faster Lazy Loading&lt;/li&gt;
&lt;li&gt;🎨 Full Theme Customization&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  ❤️ Final Thoughts
&lt;/h1&gt;

&lt;p&gt;Building Snap Picker was such a fun experience because it combined:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flutter animations&lt;/li&gt;
&lt;li&gt;UI design&lt;/li&gt;
&lt;li&gt;real-world UX&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This package started as a small idea…&lt;br&gt;
and slowly became a polished image picker experience.&lt;/p&gt;

&lt;p&gt;If you’re building Flutter packages:&lt;br&gt;
start small, focus on UI/UX, and keep improving version by version 🚀&lt;/p&gt;




&lt;p&gt;⭐ Check out Snap Picker on pub.dev and GitHub:&lt;/p&gt;

&lt;p&gt;📦 &lt;a href="https://pub.dev/packages/snap_picker" rel="noopener noreferrer"&gt;https://pub.dev/packages/snap_picker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💻 &lt;a href="https://github.com/Sakshi-2508/snap_picker" rel="noopener noreferrer"&gt;https://github.com/Sakshi-2508/snap_picker&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  🔗 Package
&lt;/h1&gt;

&lt;p&gt;⭐ If you like the package, support it on pub.dev and GitHub.&lt;/p&gt;

&lt;p&gt;Thanks for reading 💙&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>mobile</category>
      <category>showdev</category>
      <category>ui</category>
    </item>
    <item>
      <title>🫠 Building Squishy — Creating Beautiful Page Transitions in Flutter</title>
      <dc:creator>sakshi angre</dc:creator>
      <pubDate>Mon, 25 May 2026 10:39:51 +0000</pubDate>
      <link>https://forem.com/coderx06/building-squishy-creating-beautiful-page-transitions-in-flutter-5gg0</link>
      <guid>https://forem.com/coderx06/building-squishy-creating-beautiful-page-transitions-in-flutter-5gg0</guid>
      <description>&lt;p&gt;Flutter already provides smooth animations out of the box.&lt;br&gt;
But when it comes to page transitions, most apps still use the same default slide animations.&lt;/p&gt;

&lt;p&gt;I wanted something that felt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;softer&lt;/li&gt;
&lt;li&gt;more interactive&lt;/li&gt;
&lt;li&gt;visually satisfying&lt;/li&gt;
&lt;li&gt;modern&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Something that could give apps a unique personality.&lt;/p&gt;

&lt;p&gt;That’s how &lt;strong&gt;Squishy&lt;/strong&gt; was created 🚀&lt;/p&gt;


&lt;h1&gt;
  
  
  ✨ What is Squishy?
&lt;/h1&gt;

&lt;p&gt;Squishy is a Flutter package that provides modern organic page transitions with simple APIs.&lt;/p&gt;

&lt;p&gt;Instead of boring default transitions, Squishy introduces effects like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🫠 Blob transitions&lt;/li&gt;
&lt;li&gt;🔥 Gooey liquid reveals&lt;/li&gt;
&lt;li&gt;✨ Elastic bounce animations&lt;/li&gt;
&lt;li&gt;🚀 Stretch/rubber transitions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Make navigation feel alive.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  🧠 The Idea Behind It
&lt;/h1&gt;

&lt;p&gt;Modern UI design is becoming more fluid and interactive.&lt;/p&gt;

&lt;p&gt;Apps today are moving toward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;liquid animations&lt;/li&gt;
&lt;li&gt;soft physics&lt;/li&gt;
&lt;li&gt;playful motion&lt;/li&gt;
&lt;li&gt;organic transitions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted to experiment with transitions that feel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;smooth like liquid&lt;/li&gt;
&lt;li&gt;stretchy like rubber&lt;/li&gt;
&lt;li&gt;soft like slime&lt;/li&gt;
&lt;li&gt;responsive like real-world motion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of creating another generic animation package, I focused on giving each effect its own identity.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Effect&lt;/th&gt;
&lt;th&gt;Feel&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Elastic&lt;/td&gt;
&lt;td&gt;Bouncy &amp;amp; playful&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blob&lt;/td&gt;
&lt;td&gt;Organic &amp;amp; fluid&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stretch&lt;/td&gt;
&lt;td&gt;Rubber-like reveal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gooey&lt;/td&gt;
&lt;td&gt;Sticky liquid motion&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h1&gt;
  
  
  🚀 Installation
&lt;/h1&gt;

&lt;p&gt;Add Squishy to your &lt;code&gt;pubspec.yaml&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```yaml id="z5wy4v"&lt;br&gt;
dependencies:&lt;br&gt;
  squishy: ^0.0.1&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


Then run:



```bash id="l7gf3g"
flutter pub get
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  ✨ Using Squishy
&lt;/h1&gt;

&lt;p&gt;Using the package is intentionally simple.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```dart id="cvb4ut"&lt;br&gt;
Navigator.of(context).push(&lt;br&gt;
  SquishyPageRoute(&lt;br&gt;
    page: const NextScreen(),&lt;br&gt;
    effect: SquishyEffect.blob,&lt;br&gt;
  ),&lt;br&gt;
);&lt;/p&gt;

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


That’s it.

---

# 🫠 Blob Transition

The Blob effect creates an organic liquid-like page reveal.

It was one of the first effects I built and instantly became the identity of the package.

The animation uses:

* custom clipping
* bezier curves
* animated reveal paths

to create a soft flowing transition.

---

# 🔥 Gooey Effect

The Gooey transition was designed to feel like sticky liquid separating between screens.

This effect was especially fun to experiment with because small curve adjustments completely changed the feel of the animation.

Creating smooth organic motion is much harder than traditional UI animations because:

* curves must feel natural
* motion must remain smooth
* performance must stay optimized

---

# 🚀 Stretch Transition

Stretch focuses more on rubber-like motion.

Instead of looking liquid, it feels like the page is stretching before opening.

This creates a more dramatic and playful interaction.

---

# 🎨 Designing the Demo App

I also wanted the demo app to look minimal and modern.

The showcase uses:

* off-white background
* bordered buttons
* clean spacing
* soft UI design

so the focus remains on the animations themselves.

---

# 🧩 Challenges During Development

One of the biggest challenges was making each effect feel different.

Many liquid effects can start looking too similar if:

* curves overlap
* reveal motion feels identical
* animation timing is the same

So a lot of time went into:

* tweaking bezier curves
* adjusting animation physics
* experimenting with reveal paths

to make every transition feel unique.

---

# 🌟 What I Learned

Building Squishy taught me a lot about:

* Flutter animations
* custom clippers
* animation curves
* package structure
* open source publishing
* documentation
* UI motion design

More importantly, it taught me how much small details matter in UI experiences.

Even subtle motion can completely change how an app feels.

---

# 🔮 Future Plans

Some future ideas for Squishy include:

* advanced liquid swipe transitions
* morphing page reveals
* gesture-driven animations
* customizable physics
* interactive transitions
* better performance optimizations

---

# 🌐 Links

## Pub.dev

[https://pub.dev/packages/squishy](https://pub.dev/packages/squishy)

## GitHub

[https://github.com/Sakshi-2508/squishy]
(https://github.com/Sakshi-2508/squishy)

---

# 💙 Final Thoughts

Publishing an open-source package feels amazing because it turns an idea into something developers around the world can actually use.

Squishy started as an experiment with page transitions, but it became a learning experience in animation design, package development, and creative UI engineering.

And honestly…

This is just the beginning 🚀

#Flutter #FlutterDev #OpenSource #Dart #Animation #MobileDevelopment #UIUX
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>flutter</category>
      <category>mobile</category>
      <category>showdev</category>
      <category>ui</category>
    </item>
    <item>
      <title>Build Beautiful Animated Toasts in Flutter with ToastLift ✨</title>
      <dc:creator>sakshi angre</dc:creator>
      <pubDate>Wed, 20 May 2026 09:59:04 +0000</pubDate>
      <link>https://forem.com/coderx06/build-beautiful-animated-toasts-in-flutter-with-toastlift-29g6</link>
      <guid>https://forem.com/coderx06/build-beautiful-animated-toasts-in-flutter-with-toastlift-29g6</guid>
      <description>&lt;h1&gt;
  
  
  🚀 Build Beautiful Animated Toasts in Flutter with ToastLift
&lt;/h1&gt;

&lt;p&gt;Toast notifications are one of the most common UI elements in mobile apps, but many default toasts feel outdated and lack customization.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;ToastLift&lt;/strong&gt; — a Flutter package for creating beautiful animated toast notifications with a modern UI.&lt;/p&gt;




&lt;h1&gt;
  
  
  ✨ Features
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;✅ Success Toast&lt;/li&gt;
&lt;li&gt;❌ Error Toast&lt;/li&gt;
&lt;li&gt;⚠️ Warning Toast&lt;/li&gt;
&lt;li&gt;ℹ️ Info Toast&lt;/li&gt;
&lt;li&gt;⏳ Loading Toast&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additional Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Smooth animations&lt;/li&gt;
&lt;li&gt;Modern minimal UI&lt;/li&gt;
&lt;li&gt;Multiple toast positions&lt;/li&gt;
&lt;li&gt;Lightweight package&lt;/li&gt;
&lt;li&gt;Easy integration&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  📦 Installation
&lt;/h1&gt;

&lt;p&gt;Add this to your &lt;code&gt;pubspec.yaml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```yaml id="j0vjlwm"&lt;br&gt;
dependencies:&lt;br&gt;
  toast_lift: ^1.0.0&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


Run:


```bash id="wq0txo"
flutter pub get
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  🚀 Usage
&lt;/h1&gt;

&lt;p&gt;Import package:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```dart id="g0i4nm"&lt;br&gt;
import 'package:toast_lift/toast_lift.dart';&lt;/p&gt;

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


Show success toast:


```dart id="q8u0th"
ToastLift.show(
  context,
  title: "Success",
  message: "Profile saved successfully!",
  type: ToastLiftType.success,
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  📍 Custom Positions
&lt;/h1&gt;



&lt;p&gt;```dart id="m4fht7"&lt;br&gt;
ToastLiftPosition.top&lt;br&gt;
ToastLiftPosition.center&lt;br&gt;
ToastLiftPosition.bottom&lt;/p&gt;

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


Example:


```dart id="vst9z0"
ToastLift.show(
  context,
  message: "New update available!",
  type: ToastLiftType.info,
  position: ToastLiftPosition.top,
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  📸 Preview
&lt;/h1&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%2F0gbmbuskeugm2y0d6di2.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%2F0gbmbuskeugm2y0d6di2.png" alt=" " width="800" height="1733"&gt;&lt;/a&gt;&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%2Ffban60gn5m37dtcfnvcp.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%2Ffban60gn5m37dtcfnvcp.png" alt=" " width="800" height="1733"&gt;&lt;/a&gt;&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%2F37ap10etabubvll4yv23.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%2F37ap10etabubvll4yv23.png" alt=" " width="800" height="1733"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  🛠 Challenges During Development
&lt;/h1&gt;

&lt;p&gt;While building this package, I learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flutter package structure&lt;/li&gt;
&lt;li&gt;Asset management&lt;/li&gt;
&lt;li&gt;Animations&lt;/li&gt;
&lt;li&gt;pub.dev publishing&lt;/li&gt;
&lt;li&gt;GitHub package management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One major issue I faced was animation asset loading inside the example project, which taught me how Flutter packages manage assets differently from normal apps.&lt;/p&gt;




&lt;h1&gt;
  
  
  🔗 Links
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Pub.dev
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://pub.dev/packages/toast_lift" rel="noopener noreferrer"&gt;ToastLift Package&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Sakshi-2508/toast_life" rel="noopener noreferrer"&gt;ToastLift Repository&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  🎉 Final Thoughts
&lt;/h1&gt;

&lt;p&gt;Publishing my first Flutter package was an amazing learning experience.&lt;/p&gt;

&lt;p&gt;If you are planning to create your first package, start simple and focus on creating something useful for developers.&lt;/p&gt;

&lt;p&gt;Thanks for reading 🚀&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sending love to all developers who continue learning, building, failing, improving, and never giving up 💫&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How I Built and Published My First Flutter Package on pub.dev</title>
      <dc:creator>sakshi angre</dc:creator>
      <pubDate>Mon, 18 May 2026 12:25:34 +0000</pubDate>
      <link>https://forem.com/coderx06/how-i-built-and-published-my-first-flutter-package-on-pubdev-133b</link>
      <guid>https://forem.com/coderx06/how-i-built-and-published-my-first-flutter-package-on-pubdev-133b</guid>
      <description>&lt;p&gt;Building apps is exciting, but creating something reusable for other developers feels completely different.&lt;/p&gt;

&lt;p&gt;Recently, I built and published my first Flutter package called &lt;strong&gt;Profile Lift&lt;/strong&gt; — a customizable profile UI package with editable profile support, settings screen, theme customization, image picker support, and smooth animations.&lt;/p&gt;

&lt;p&gt;In this article, I’ll share the complete journey from idea to publishing it on &lt;a href="https://pub.dev/packages/profile_lift?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;profile_lift on pub.dev&lt;/a&gt; 🚀&lt;/p&gt;




&lt;h1&gt;
  
  
  Why I Built Profile Lift
&lt;/h1&gt;

&lt;p&gt;Almost every mobile app has a profile screen.&lt;/p&gt;

&lt;p&gt;Whether it’s:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;social media apps&lt;/li&gt;
&lt;li&gt;e-commerce apps&lt;/li&gt;
&lt;li&gt;portfolio apps&lt;/li&gt;
&lt;li&gt;SaaS platforms&lt;/li&gt;
&lt;li&gt;productivity apps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;developers often rebuild the same profile UI from scratch.&lt;/p&gt;

&lt;p&gt;I wanted to create a reusable Flutter package that developers could plug directly into their projects with minimal setup.&lt;/p&gt;

&lt;p&gt;That idea became &lt;strong&gt;Profile Lift&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Features
&lt;/h1&gt;

&lt;p&gt;Profile Lift currently includes:&lt;/p&gt;

&lt;p&gt;✅ Editable profile screen&lt;br&gt;
✅ Settings screen&lt;br&gt;
✅ Light &amp;amp; dark mode&lt;br&gt;
✅ Theme customization&lt;br&gt;
✅ Profile image picker&lt;br&gt;
✅ Live image preview&lt;br&gt;
✅ Smooth fade &amp;amp; slide animations&lt;br&gt;
✅ Logout confirmation dialog&lt;br&gt;
✅ Reusable callback architecture&lt;/p&gt;


&lt;h1&gt;
  
  
  Screenshots
&lt;/h1&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%2F6vif9nunzq404n20kxbq.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%2F6vif9nunzq404n20kxbq.png" alt=" " width="387" height="859"&gt;&lt;/a&gt;&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%2Fxnh5r5uyo8481xkktos0.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%2Fxnh5r5uyo8481xkktos0.png" alt=" " width="385" height="868"&gt;&lt;/a&gt;&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%2Fn475mmzbzc3e5btksj0y.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%2Fn475mmzbzc3e5btksj0y.png" alt=" " width="383" height="866"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h1&gt;
  
  
  Installation
&lt;/h1&gt;

&lt;p&gt;Add this to your &lt;code&gt;pubspec.yaml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;dependencies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;profile_lift&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;^0.0.1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter pub get
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Usage Example
&lt;/h1&gt;



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

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

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyApp&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StatelessWidget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;MyApp&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BuildContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;MaterialApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;debugShowCheckedModeBanner:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

      &lt;span class="nl"&gt;home:&lt;/span&gt; &lt;span class="n"&gt;ProfileLiftScreen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;editable:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

        &lt;span class="nl"&gt;profile:&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;ProfileLiftModel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="nl"&gt;name:&lt;/span&gt; &lt;span class="s"&gt;"Christopher Baker"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nl"&gt;email:&lt;/span&gt; &lt;span class="s"&gt;"christopher@gmail.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nl"&gt;phone:&lt;/span&gt; &lt;span class="s"&gt;"+1 9876543210"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nl"&gt;address:&lt;/span&gt; &lt;span class="s"&gt;"New York, USA"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nl"&gt;bio:&lt;/span&gt; &lt;span class="s"&gt;"Flutter developer passionate about UI."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nl"&gt;imageUrl:&lt;/span&gt; &lt;span class="s"&gt;"https://i.pravatar.cc/300?img=12"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;

        &lt;span class="nl"&gt;onSaveProfile:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;updatedProfile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;updatedProfile&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;

        &lt;span class="nl"&gt;onSettings:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;

        &lt;span class="nl"&gt;onLogout:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
      &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Challenges I Faced
&lt;/h1&gt;

&lt;p&gt;While building and publishing the package, I faced several issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flutter package structure confusion&lt;/li&gt;
&lt;li&gt;README formatting problems&lt;/li&gt;
&lt;li&gt;Screenshot linking issues&lt;/li&gt;
&lt;li&gt;pub.dev publish warnings&lt;/li&gt;
&lt;li&gt;Theme management&lt;/li&gt;
&lt;li&gt;Animation integration&lt;/li&gt;
&lt;li&gt;Git ignored files during publishing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing I learned is that documentation matters a lot in open-source development.&lt;/p&gt;




&lt;h1&gt;
  
  
  Publishing on pub.dev
&lt;/h1&gt;

&lt;p&gt;Publishing involved multiple steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Creating package structure&lt;/li&gt;
&lt;li&gt;Writing README.md&lt;/li&gt;
&lt;li&gt;Adding screenshots&lt;/li&gt;
&lt;li&gt;Creating CHANGELOG.md&lt;/li&gt;
&lt;li&gt;Adding LICENSE&lt;/li&gt;
&lt;li&gt;Uploading to GitHub&lt;/li&gt;
&lt;li&gt;Running:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter pub publish &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Finally publishing to pub.dev&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Seeing the package go live was an amazing feeling.&lt;/p&gt;




&lt;h1&gt;
  
  
  What I Learned
&lt;/h1&gt;

&lt;p&gt;This project taught me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flutter package architecture&lt;/li&gt;
&lt;li&gt;reusable UI design&lt;/li&gt;
&lt;li&gt;pub.dev publishing workflow&lt;/li&gt;
&lt;li&gt;open-source practices&lt;/li&gt;
&lt;li&gt;documentation writing&lt;/li&gt;
&lt;li&gt;package maintenance basics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More importantly, it changed how I think about development — from just building apps to building reusable developer tools.&lt;/p&gt;




&lt;h1&gt;
  
  
  Future Improvements
&lt;/h1&gt;

&lt;p&gt;I plan to add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Glassmorphism UI&lt;/li&gt;
&lt;li&gt;Responsive web support&lt;/li&gt;
&lt;li&gt;More profile layouts&lt;/li&gt;
&lt;li&gt;Gradient themes&lt;/li&gt;
&lt;li&gt;Social media section&lt;/li&gt;
&lt;li&gt;Premium animations&lt;/li&gt;
&lt;li&gt;Firebase helper integration&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;Publishing my first Flutter package was a huge learning experience.&lt;/p&gt;

&lt;p&gt;If you’re thinking about building your own Flutter package, start small and focus on solving a real problem for developers.&lt;/p&gt;

&lt;p&gt;You can check out the package here:&lt;/p&gt;

&lt;p&gt;⭐ GitHub Repository:&lt;br&gt;
&lt;a href="https://github.com/Sakshi-2508/profile_lift" rel="noopener noreferrer"&gt;https://github.com/Sakshi-2508/profile_lift&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📦 pub.dev Package:&lt;br&gt;
&lt;a href="https://pub.dev/packages/profile_lift" rel="noopener noreferrer"&gt;https://pub.dev/packages/profile_lift&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading 🚀&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>opensource</category>
      <category>showdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
