
Ontem, meu amigo disse algo como "Estou escrevendo um aplicativo offline simples, não preciso dessas transmissões e de todo esse jazz". Eu estava confuso, mas pensei, que pode haver outros codificadores nessa ilusão.
Abaixo, literalmente, em 50 linhas, mostrarei, em exemplo conhecido, que reatividade é:
a) não sobre offline / online
b) muito fácil
c) muito bom para simplificar quase qualquer código
Para meus críticos precipitados ,
que correm para a batalha sem olhar para trás, supondo que o BlocProvider - seja um provedor , eu recomendei ler primeiro o artigo básico para o desenvolvimento geral. A referência a um artigo está na página de flutter_bloc , na primeira linha da descrição.
Um exemplo conhecido de todos é "Um contador", que é gerado quando o projeto Flutter é criado, é o bom ponto de partida para demonstrar muitas práticas. Portanto, ele contém MyHomePage extends StatefulWidget , método _incrementCounter para o comando do incremento e setState para redesenhar toda a hierarquia de widgets.
Vamos apresentar a reatividade com a ajuda da biblioteca rxdart e algumas etapas fáceis:
Vamos adicionar uma biblioteca em pubspec.yaml
 dependencies: ... rxdart: 0.22.2 
Vamos mudar a arquitetura de um contador e adicionar evento
 class _Counter { int _count; int get count => _count; _Counter(this._count) : this.onCounterUpd = BehaviorSubject<int>.seeded(_count);  
 class MyHomeRxPage extends StatelessWidget { final title;  
  StreamBuilder<int>( stream: _counter.onCounterUpd, builder: (context, snapshot) { return Text( '${snapshot.data}', style: Theme.of(context).textTheme.display1, ); }), ... floatingActionButton: FloatingActionButton( onPressed: _counter.incrementCounter, ... 
Só isso. Na íntegra, é assim:
 import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:rxdart/rxdart.dart'; class _Counter { int _count; int get count => _count; _Counter(this._count) : this.onCounterUpd = BehaviorSubject<int>.seeded(_count);  
Agora, o código é reativo, lacônico, livre de redesenhos desnecessários e facilmente extensível. Por exemplo, se for necessário alterar o texto de outro widget, quando o contador estiver mudando, basta fazer o seguinte:
  StreamBuilder<int>( stream: onCounterUpd, builder: (context, snapshot) { return Text( 'You have pushed the button ${snapshot.data} times:', ); }),  
e pronto!

Para comparação, tente fazer isso com InheritedWidget ou com outro padrão.
Então, espero, mostrei que
- A reatividade é muito fácil. Muito mais fácil do que InheritedWidgets,BlocProvider, etc.
- A reatividade não é offline / online. É sobre arquitetura. Em alguns casos simples, não é necessário inserir classes adicionais para usá-lo.
- A reatividade é uma interface de usuário simpática, um rápido funcionamento funcional e uma elegante divisão de código em camadas de todos os tipos: MVC, MVP, MVI, MVVM, MVU- o que você quiser.
→ Código: (ramo iter_0004_rxdart )
Boa sorte na codificação.