<?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: Awais Rehman</title>
    <description>The latest articles on DEV Community by Awais Rehman (@awais_rehman_4cf9db345c62).</description>
    <link>https://dev.to/awais_rehman_4cf9db345c62</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4186209%2F65b3e8b2-d575-4533-a76d-71b9b0effabd.jpg</url>
      <title>DEV Community: Awais Rehman</title>
      <link>https://dev.to/awais_rehman_4cf9db345c62</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/awais_rehman_4cf9db345c62"/>
    <language>en</language>
    <item>
      <title>I replaced 4 discontinued Flutter packages. Here's what I learned.</title>
      <dc:creator>Awais Rehman</dc:creator>
      <pubDate>Thu, 22 Oct 2026 13:53:55 +0000</pubDate>
      <link>https://dev.to/awais_rehman_4cf9db345c62/i-replaced-4-discontinued-flutter-packages-heres-what-i-learned-dgd</link>
      <guid>https://dev.to/awais_rehman_4cf9db345c62/i-replaced-4-discontinued-flutter-packages-heres-what-i-learned-dgd</guid>
      <description>&lt;p&gt;When the Flutter team announced they were discontinuing six first-party&lt;br&gt;
packages (flutter_markdown, palette_generator, flutter_adaptive_scaffold,&lt;br&gt;
flutter_image, ios_platform_images, css_colors), they left the community a&lt;br&gt;
single sentence: "we encourage members of the community to coordinate on&lt;br&gt;
establishing forks."&lt;/p&gt;

&lt;p&gt;Six packages. Millions of combined downloads. And no plan.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I did about it
&lt;/h2&gt;

&lt;p&gt;I didn't set out to maintain replacements. I set out to fix my own problem —&lt;br&gt;
I needed markdown rendering after flutter_markdown died. But once I shipped&lt;br&gt;
one replacement and watched the issue threads fill up with "so what do we use&lt;br&gt;
now?", the pattern became obvious: &lt;strong&gt;every discontinued package leaves behind&lt;br&gt;
a large, orphaned user base with nowhere to go.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So I built the Prism family — 15 pure-Flutter packages, no platform channels,&lt;br&gt;
all six platforms. Four of them replace discontinued packages directly:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Discontinued&lt;/th&gt;
&lt;th&gt;My replacement&lt;/th&gt;
&lt;th&gt;Orphaned likes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;flutter_markdown&lt;/td&gt;
&lt;td&gt;prism_markdown&lt;/td&gt;
&lt;td&gt;~330+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;palette_generator&lt;/td&gt;
&lt;td&gt;prism_palette&lt;/td&gt;
&lt;td&gt;678&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;flutter_adaptive_scaffold&lt;/td&gt;
&lt;td&gt;prism_adaptive_scaffold&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;flutter_image&lt;/td&gt;
&lt;td&gt;prism_image&lt;/td&gt;
&lt;td&gt;102&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. The issue threads are a product roadmap.&lt;/strong&gt;&lt;br&gt;
When flutter_markdown was discontinued, the old backlog was full of&lt;br&gt;
years-old feature requests with hundreds of reactions. The top one —&lt;br&gt;
maxLines/overflow truncation — had 59 upvotes and was never implemented.&lt;br&gt;
I shipped it in my first replacement release. That's not feature planning,&lt;br&gt;
that's just listening.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Maintainability beats features.&lt;/strong&gt;&lt;br&gt;
When palette_generator died, Flutter's own team pointed people at&lt;br&gt;
material_color_utilities — the pro-grade color science library bundled&lt;br&gt;
with Flutter. Instead of copying the old code, I built my replacement on&lt;br&gt;
that foundation. The existing community forks copied first; the ones&lt;br&gt;
built on better foundations are the ones that keep working.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Testing discontinued-package replacements is hard — but not optional.&lt;/strong&gt;&lt;br&gt;
The old packages were battle-tested by years of production use. My&lt;br&gt;
replacements start from zero. For prism_image, that meant spinning up a&lt;br&gt;
real local HTTP server in the test suite and verifying retry behavior&lt;br&gt;
against actual failures — not mocked promises. Two tests are still skipped&lt;br&gt;
pending on-device verification, and I say so publicly rather than pretend&lt;br&gt;
the coverage is complete.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Open source feedback loops are fast — when you're responsive.&lt;/strong&gt;&lt;br&gt;
A maintainer on one of my other PRs suggested a better approach I hadn't&lt;br&gt;
considered (parsing data from a URL instead of hardcoding it). Implementing&lt;br&gt;
his suggestion within a day turned a "requested changes" review into&lt;br&gt;
approval-ready. Responsiveness is the cheapest credibility there is.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;The family now includes AI tooling too — a lean streaming client for LLM&lt;br&gt;
chat completions that works with OpenAI, Ollama, Groq, DeepSeek and any&lt;br&gt;
OpenAI-compatible endpoint, with typed events instead of heavyweight&lt;br&gt;
frameworks. It pairs with prism_markdown for live-rendering AI responses.&lt;/p&gt;

&lt;p&gt;If you're one of the developers displaced by the discontinuation wave:&lt;br&gt;
the migration guides are in each package's README, and issues are open —&lt;br&gt;
they're the fastest way these packages improve.&lt;/p&gt;

&lt;p&gt;All 15 packages are MIT licensed and linked from&lt;br&gt;
&lt;a href="https://github.com/awaisdev5765" rel="noopener noreferrer"&gt;my profile&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>dart</category>
      <category>opensource</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
