<?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: Júlio César Ködel</title>
    <description>The latest articles on DEV Community by Júlio César Ködel (@jlio_csarkdel_6c306c2).</description>
    <link>https://dev.to/jlio_csarkdel_6c306c2</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%2F2731082%2F2adb88be-d6b0-4782-975c-9c7548c6b2bb.png</url>
      <title>DEV Community: Júlio César Ködel</title>
      <link>https://dev.to/jlio_csarkdel_6c306c2</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jlio_csarkdel_6c306c2"/>
    <language>en</language>
    <item>
      <title>AI Didn't Kill Software Engineering. It Made It More Valuable Than Ever.</title>
      <dc:creator>Júlio César Ködel</dc:creator>
      <pubDate>Tue, 21 Jul 2026 21:50:29 +0000</pubDate>
      <link>https://dev.to/jlio_csarkdel_6c306c2/ai-didnt-kill-software-engineering-it-made-it-more-valuable-than-ever-4o9n</link>
      <guid>https://dev.to/jlio_csarkdel_6c306c2/ai-didnt-kill-software-engineering-it-made-it-more-valuable-than-ever-4o9n</guid>
      <description>&lt;h2&gt;
  
  
  We've Been Asking the Wrong Question
&lt;/h2&gt;

&lt;p&gt;For years the industry asked:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Will AI replace software developers?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now we know that isn't the right question.&lt;/p&gt;

&lt;p&gt;The better question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What becomes valuable when writing code is no longer expensive?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That single shift changes software engineering.&lt;/p&gt;

&lt;p&gt;For decades every major methodology---from Waterfall to Agile, DDD and&lt;br&gt;
Clean Architecture---evolved in a world where writing software was&lt;br&gt;
expensive. Documentation aged quickly because updating it was costly.&lt;br&gt;
Specifications were abandoned because implementation consumed weeks.&lt;/p&gt;

&lt;p&gt;Generative AI changed that assumption.&lt;/p&gt;

&lt;p&gt;Writing code is now almost free.&lt;/p&gt;

&lt;p&gt;Value moved elsewhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code Is Cheap. Judgment Isn't.
&lt;/h2&gt;

&lt;p&gt;Modern LLMs generate hundreds of lines of code in seconds.&lt;/p&gt;

&lt;p&gt;They do not decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  what should be built;&lt;/li&gt;
&lt;li&gt;  which business rules matter;&lt;/li&gt;
&lt;li&gt;  which edge cases deserve attention;&lt;/li&gt;
&lt;li&gt;  what architectural trade-offs should survive for years.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those remain engineering decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottleneck Has Moved
&lt;/h2&gt;

&lt;p&gt;Typing is no longer the bottleneck.&lt;/p&gt;

&lt;p&gt;Thinking is.&lt;/p&gt;

&lt;p&gt;Specifications.&lt;/p&gt;

&lt;p&gt;Architecture.&lt;/p&gt;

&lt;p&gt;Acceptance criteria.&lt;/p&gt;

&lt;p&gt;Code review.&lt;/p&gt;

&lt;p&gt;Engineering has become less about producing code and more about&lt;br&gt;
producing clarity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Vibe Coding Doesn't Scale
&lt;/h2&gt;

&lt;p&gt;Chats are a poor long-term source of truth.&lt;/p&gt;

&lt;p&gt;Every prompt expands the context window.&lt;/p&gt;

&lt;p&gt;Every correction burns more tokens.&lt;/p&gt;

&lt;p&gt;Eventually the model reasons about the conversation rather than the&lt;br&gt;
software.&lt;/p&gt;

&lt;p&gt;That is the hidden cost of vibe coding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Specifications Become the Project Memory
&lt;/h2&gt;

&lt;p&gt;That realization led me to write &lt;strong&gt;Spec Driven Development&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of relying on conversations, every feature starts with a&lt;br&gt;
specification, evolves into a plan, becomes executable tasks and only&lt;br&gt;
then turns into code.&lt;/p&gt;

&lt;p&gt;The outcome is straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  fewer ambiguities;&lt;/li&gt;
&lt;li&gt;  fewer tokens;&lt;/li&gt;
&lt;li&gt;  less rework;&lt;/li&gt;
&lt;li&gt;  more predictable software.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://books.kodel.com.br/en/books/sdd/" rel="noopener noreferrer"&gt;https://books.kodel.com.br/en/books/sdd/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  But Specifications Need Architecture
&lt;/h2&gt;

&lt;p&gt;Great specifications cannot rescue a chaotic codebase.&lt;/p&gt;

&lt;p&gt;Architecture exists to answer one question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Where does this belong?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question inspired &lt;strong&gt;FOCUS Architecture&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Rather than multiplying layers, it organizes software around four&lt;br&gt;
responsibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  View&lt;/li&gt;
&lt;li&gt;  Orchestrator&lt;/li&gt;
&lt;li&gt;  Use Cases&lt;/li&gt;
&lt;li&gt;  Repository&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Its purpose isn't novelty.&lt;/p&gt;

&lt;p&gt;Its purpose is lowering the cost of change.&lt;/p&gt;

&lt;p&gt;In the AI era that also means smaller context windows, fewer tokens and&lt;br&gt;
fewer unintended modifications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://books.kodel.com.br/en/books/focus/" rel="noopener noreferrer"&gt;https://books.kodel.com.br/en/books/focus/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Standing on Giants
&lt;/h2&gt;

&lt;p&gt;Neither book claims to reinvent software engineering.&lt;/p&gt;

&lt;p&gt;Both synthesize decades of work from Martin Fowler, Kent Beck, Eric&lt;br&gt;
Evans, Bertrand Meyer, Robert C. Martin, Andrew Hunt, David Thomas and&lt;br&gt;
many others, reinterpreting timeless ideas for AI-assisted development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two Books. One Goal.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Spec Driven Development&lt;/strong&gt; structures engineering thinking.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FOCUS Architecture&lt;/strong&gt; structures engineering systems.&lt;/p&gt;

&lt;p&gt;One answers &lt;strong&gt;what should be built&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The other answers &lt;strong&gt;where it belongs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Together they help human engineers and AI agents build software that&lt;br&gt;
remains understandable years after it ships.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;AI made code inexpensive.&lt;/p&gt;

&lt;p&gt;Engineering became even more valuable.&lt;/p&gt;

&lt;p&gt;The future won't belong to teams with the best AI.&lt;/p&gt;

&lt;p&gt;It will belong to teams with the best engineering discipline.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>A IA não matou a Engenharia de Software. Ela a tornou mais importante do que nunca.</title>
      <dc:creator>Júlio César Ködel</dc:creator>
      <pubDate>Tue, 21 Jul 2026 21:50:03 +0000</pubDate>
      <link>https://dev.to/jlio_csarkdel_6c306c2/a-ia-nao-matou-a-engenharia-de-software-ela-a-tornou-mais-importante-do-que-nunca-295p</link>
      <guid>https://dev.to/jlio_csarkdel_6c306c2/a-ia-nao-matou-a-engenharia-de-software-ela-a-tornou-mais-importante-do-que-nunca-295p</guid>
      <description>&lt;h2&gt;
  
  
  Durante anos fizemos a pergunta errada
&lt;/h2&gt;

&lt;p&gt;"Será que a IA vai substituir os desenvolvedores?"&lt;/p&gt;

&lt;p&gt;Hoje sabemos que essa não era a pergunta correta.&lt;/p&gt;

&lt;p&gt;A pergunta correta é:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;O que passa a ter valor quando escrever código deixa de ser caro?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Isso muda completamente a engenharia de software.&lt;/p&gt;

&lt;p&gt;Por décadas, metodologias como Waterfall, Scrum, XP, DDD e Clean&lt;br&gt;
Architecture nasceram em um mundo onde escrever código era caro.&lt;br&gt;
Documentação envelhecia rapidamente porque reescrevê-la custava caro.&lt;br&gt;
Especificações eram abandonadas porque implementar consumia semanas.&lt;/p&gt;

&lt;p&gt;Então surgiu a IA.&lt;/p&gt;

&lt;p&gt;Pela primeira vez na história, produzir código ficou quase gratuito.&lt;/p&gt;

&lt;p&gt;O valor migrou.&lt;/p&gt;

&lt;h2&gt;
  
  
  Código ficou barato. Julgamento não.
&lt;/h2&gt;

&lt;p&gt;Hoje qualquer LLM produz centenas de linhas de código em segundos.&lt;/p&gt;

&lt;p&gt;Mas ela não decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  qual problema resolver;&lt;/li&gt;
&lt;li&gt;  quais regras de negócio existem;&lt;/li&gt;
&lt;li&gt;  quais exceções importam;&lt;/li&gt;
&lt;li&gt;  quais compromissos arquiteturais devem permanecer pelos próximos
cinco anos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essas continuam sendo responsabilidades humanas.&lt;/p&gt;

&lt;h2&gt;
  
  
  O gargalo mudou
&lt;/h2&gt;

&lt;p&gt;Antes, escrevíamos código.&lt;/p&gt;

&lt;p&gt;Agora escrevemos decisões.&lt;/p&gt;

&lt;p&gt;Especificações.&lt;/p&gt;

&lt;p&gt;Arquiteturas.&lt;/p&gt;

&lt;p&gt;Critérios de aceitação.&lt;/p&gt;

&lt;p&gt;Revisões.&lt;/p&gt;

&lt;p&gt;A vantagem competitiva deixou de ser velocidade de digitação.&lt;/p&gt;

&lt;p&gt;Passou a ser clareza de pensamento.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que o vibe coding não escala
&lt;/h2&gt;

&lt;p&gt;Conversas são uma péssima fonte de verdade.&lt;/p&gt;

&lt;p&gt;Cada prompt aumenta o contexto.&lt;/p&gt;

&lt;p&gt;Cada correção adiciona mais tokens.&lt;/p&gt;

&lt;p&gt;Cada interação obriga a IA a reconstruir sua intenção.&lt;/p&gt;

&lt;p&gt;Em algum momento ela deixa de raciocinar sobre o sistema e passa a&lt;br&gt;
raciocinar sobre a conversa.&lt;/p&gt;

&lt;p&gt;Esse é o verdadeiro custo escondido do vibe coding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Especificações passam a ser o centro do projeto
&lt;/h2&gt;

&lt;p&gt;Foi essa percepção que originou o &lt;strong&gt;Spec Driven Development&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A ideia é simples:&lt;/p&gt;

&lt;p&gt;A conversa deixa de ser a memória do projeto.&lt;/p&gt;

&lt;p&gt;A especificação passa a ser.&lt;/p&gt;

&lt;p&gt;Cada funcionalidade nasce de uma spec, evolui para um plano,&lt;br&gt;
transforma-se em tarefas e somente depois é implementada.&lt;/p&gt;

&lt;p&gt;O resultado é previsibilidade.&lt;/p&gt;

&lt;p&gt;Menos retrabalho.&lt;/p&gt;

&lt;p&gt;Menos tokens.&lt;/p&gt;

&lt;p&gt;Menos ambiguidades.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://books.kodel.com.br/pt-br/livros/sdd/" rel="noopener noreferrer"&gt;https://books.kodel.com.br/pt-br/livros/sdd/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mas especificação não resolve arquitetura
&lt;/h2&gt;

&lt;p&gt;Mesmo boas especificações falham quando o projeto é caótico.&lt;/p&gt;

&lt;p&gt;Arquitetura existe para responder apenas uma pergunta:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Onde isso pertence?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Essa pergunta originou o segundo livro: &lt;strong&gt;FOCUS Architecture&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Em vez de dezenas de camadas, a proposta reduz responsabilidades para&lt;br&gt;
quatro peças bem definidas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  View&lt;/li&gt;
&lt;li&gt;  Orchestrator&lt;/li&gt;
&lt;li&gt;  Use Cases&lt;/li&gt;
&lt;li&gt;  Repository&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O objetivo nunca foi criar uma arquitetura nova.&lt;/p&gt;

&lt;p&gt;Foi reduzir custo de mudança.&lt;/p&gt;

&lt;p&gt;Na era da IA isso significa também reduzir contexto, consumo de tokens e&lt;br&gt;
risco de alterações inesperadas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://books.kodel.com.br/pt-br/livros/focus/" rel="noopener noreferrer"&gt;https://books.kodel.com.br/pt-br/livros/focus/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sobre os ombros de gigantes
&lt;/h2&gt;

&lt;p&gt;Esses livros não reinventam a engenharia.&lt;/p&gt;

&lt;p&gt;Eles sintetizam décadas de ideias de Martin Fowler, Kent Beck, Eric&lt;br&gt;
Evans, Bertrand Meyer, Robert C. Martin, Andrew Hunt, David Thomas e&lt;br&gt;
muitos outros, reinterpretadas para uma realidade em que agentes de IA&lt;br&gt;
escrevem boa parte do código.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dois livros. Um objetivo.
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Spec Driven Development&lt;/strong&gt; organiza o pensamento.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FOCUS Architecture&lt;/strong&gt; organiza o código.&lt;/p&gt;

&lt;p&gt;Um responde &lt;strong&gt;o que construir&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O outro responde &lt;strong&gt;onde construir&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Juntos ajudam equipes humanas e agentes de IA a produzir software&lt;br&gt;
previsível, legível e sustentável.&lt;/p&gt;

&lt;h2&gt;
  
  
  Considerações finais
&lt;/h2&gt;

&lt;p&gt;A IA tornou código barato.&lt;/p&gt;

&lt;p&gt;Mas tornou engenharia ainda mais valiosa.&lt;/p&gt;

&lt;p&gt;O futuro não pertence às equipes que possuem a melhor IA.&lt;/p&gt;

&lt;p&gt;Pertence às equipes que pensam melhor.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>architecture</category>
      <category>software</category>
    </item>
    <item>
      <title>streamline 1.0.0</title>
      <dc:creator>Júlio César Ködel</dc:creator>
      <pubDate>Fri, 17 Jan 2025 21:03:29 +0000</pubDate>
      <link>https://dev.to/jlio_csarkdel_6c306c2/streamline-100-50eo</link>
      <guid>https://dev.to/jlio_csarkdel_6c306c2/streamline-100-50eo</guid>
      <description>&lt;p&gt;&lt;a href="https://pub.dev/packages/streamline" rel="noopener noreferrer"&gt;https://pub.dev/packages/streamline&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Streamline
&lt;/h1&gt;

&lt;h3&gt;
  
  
  CQRS/Mediator Pattern for Flutter - The Simple Way! 🚀
&lt;/h3&gt;

&lt;p&gt;Streamline is a lightweight library that brings enterprise-grade application architecture to Flutter, making it super easy to understand and implement - even if you're new to professional software development!&lt;/p&gt;

&lt;h2&gt;
  
  
  What's This All About? 🤔
&lt;/h2&gt;

&lt;p&gt;Think of Streamline as a smart messenger for your app. Instead of components talking directly to each other (which can get messy), they send messages through a central hub. It's like having a super-organized assistant managing all communication in your app!&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Concepts Made Simple 📚
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Commands &amp;amp; Queries
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Commands&lt;/strong&gt;: Actions that change things (like "CreateUser" or "UpdateProfile")&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Queries&lt;/strong&gt;: Questions that just get information (like "GetUserProfile" or "GetTodoList")&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Events
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Think of these as announcements about things that happened&lt;/li&gt;
&lt;li&gt;Example: "UserSignedIn", "ProfileUpdated", "TodoCreated"&lt;/li&gt;
&lt;li&gt;Great for updating different parts of your app when something important happens&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Aggregators
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Special queries that collect information from multiple sources&lt;/li&gt;
&lt;li&gt;Perfect for features like calendars where you need to gather events from different parts of your app. "GetAllCalendarEvents" might collect meetings, tasks, and reminders to show them all on one calendar UI.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Flutter Widgets That Make Life Easier 🎯
&lt;/h2&gt;

&lt;h3&gt;
  
  
  QueryBuilder
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Simple usage&lt;/span&gt;
&lt;span class="n"&gt;QueryBuilder&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;UserProfile&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;
  &lt;span class="nl"&gt;query:&lt;/span&gt; &lt;span class="n"&gt;GetUserProfileQuery&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="nl"&gt;builder:&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="n"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;profile&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="c1"&gt;// With event observers to auto-refresh&lt;/span&gt;
&lt;span class="n"&gt;QueryBuilder&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;UserProfile&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;
  &lt;span class="nl"&gt;query:&lt;/span&gt; &lt;span class="n"&gt;GetUserProfileQuery&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="nl"&gt;builder:&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="n"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;profile&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="nl"&gt;eventObservers:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="c1"&gt;// Refresh when user updates their profile&lt;/span&gt;
    &lt;span class="n"&gt;Mediator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;events&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getStream&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;UserProfileUpdated&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(),&lt;/span&gt;
    &lt;span class="c1"&gt;// Also refresh when user changes their settings&lt;/span&gt;
    &lt;span class="n"&gt;Mediator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;events&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getStream&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;UserSettingsChanged&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(),&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="c1"&gt;// Optional loading widget&lt;/span&gt;
  &lt;span class="nl"&gt;waiterBuilder:&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="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;CircularProgressIndicator&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="c1"&gt;// Optional error handler&lt;/span&gt;
  &lt;span class="nl"&gt;errorBuilder:&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="n"&gt;error&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;stackTrace&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Oops! &lt;/span&gt;&lt;span class="si"&gt;$error&lt;/span&gt;&lt;span class="s"&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;h2&gt;
  
  
  Why Should You Use Streamline? ✨
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Keep Things Organized:&lt;/strong&gt; Each piece of your app has a clear job&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Easy to Test:&lt;/strong&gt; Commands and queries are isolated and simple to test&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexible:&lt;/strong&gt; Need to add new features? Just add new commands/queries!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flutter-Friendly:&lt;/strong&gt; Built specifically for Flutter developers&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beginner-Friendly:&lt;/strong&gt; No PhD in software architecture required!&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started 🚀
&lt;/h2&gt;

&lt;p&gt;Add to your pubspec.yaml:&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;streamline&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;^1.0.0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Import and start using:&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="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:streamline/streamline.dart'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Examples 📱
&lt;/h3&gt;

&lt;p&gt;Check the &lt;a href="https://github.com/JCKodel/streamline/tree/main/example" rel="noopener noreferrer"&gt;examples folder&lt;/a&gt; for a ToDo list app using this architecture!&lt;/p&gt;

&lt;h3&gt;
  
  
  Dependencies 📦
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://pub.dev/packages/dart_mappable" rel="noopener noreferrer"&gt;dart_mappable&lt;/a&gt; Dart Mappable is a very good library that implements value equality, copyWith, pretty toString and JSON serialization for your models and messages.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️⚠️⚠️ IMPORTANT: ⚠️⚠️⚠️: All your commands, queries, events and aggregators must use dart_mappable (we are requesting an specific interface (&lt;code&gt;IAction&amp;lt;TResult&amp;gt;&lt;/code&gt;, with &lt;code&gt;toJson&lt;/code&gt; and &lt;code&gt;toMap&lt;/code&gt; methods) for you to remember this). This is important to avoid unnecessary rebuilds both in events and queries.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://pub.dev/packages/rxdart" rel="noopener noreferrer"&gt;rxdart&lt;/a&gt; RxDart is a reactive programming library for Dart and Flutter. We use the Behavior Subject stream implementation to keep track of the last emitted event, so you don't need to store the last state.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Need Help? 🆘
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/JCKodel/streamline/issues" rel="noopener noreferrer"&gt;Issue Tracker&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Contributing 🤝
&lt;/h3&gt;

&lt;p&gt;We love contributions! Whether it's:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reporting bugs&lt;/li&gt;
&lt;li&gt;Improving documentation&lt;/li&gt;
&lt;li&gt;Adding new features&lt;/li&gt;
&lt;li&gt;Fixing bugs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Feel free to open an issue or submit a pull request!&lt;/p&gt;

&lt;h3&gt;
  
  
  License
&lt;/h3&gt;

&lt;p&gt;This package is licensed under the GNU AGPL v3 license.&lt;/p&gt;

&lt;p&gt;Important licensing notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;👉 &lt;strong&gt;You can freely use this package in your applications (commercial or non-commercial) without having to license your entire application under AGPL&lt;/strong&gt; 👈&lt;/li&gt;
&lt;li&gt;The AGPL license only applies if you modify &lt;strong&gt;THIS&lt;/strong&gt; package's source code&lt;/li&gt;
&lt;li&gt;If you modify this package's source code and distribute it (either directly or as part of a network service), you must make your modifications available under AGPL v3&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>flutter</category>
      <category>dart</category>
      <category>cqrs</category>
      <category>mediator</category>
    </item>
  </channel>
</rss>
