O Reactive é um gerenciador de estado dinâmico fundamentado em Singleton que permite o gerenciamento de variáveis de forma global, orientada a condições, orientada a estados e principalmente de forma reativa. A curva de aprendizado é muitocurta assim como a implementação, mas ainda assim é possível realizar implementações mais robutas que resultam em um maior controle e em uma maior performance.
Features
refresh(dynamic dependency): Notifica um ouvinte específico para atualizar seu estado.
statusOf(String key): Retorna o status de um Worker.
setStatus(String key, dynamic status): Define o status de um Worker.
Getting started
O Reactive não necessita de setup apenas instale o package e use onde precisar! :)
Usage
enum ExampleStatus {
loading,
sucess,
fail,
}
class MyController {
List<String> myExamples = [];
int counter = 0;
myFunction() {
setStatus(ExampleStatus.loading);
return http.get("/examples")
.then((examples) {
myExamples = examples;
refreshStatus(ExampleStatus.sucess); //status da requisição alterado para sucesso e atualiza os componentes de tela reativos
}).catchError((err) {
refreshStatus(ExampleStatus.fail); //status da requisição alterado para falha e atualiza os componentes de tela reativos
});
}
count() {
counter++;
refresh(); //atualiza os componentes de tela reativos
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
MyController myController = MyController();
@override
void initState() {
super.initState();
myController.myFunction();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Reactive(() => Text("Counter: ${myController.counter}")), // deixa o texto reativo
),
body: ReactiveStatus<ExampleStatus>(// pertime que a tela seja reativa e que altere seus componentes com base no status
{
ExampleStatus.sucess: () => ExampleListView(items: myController.myExamples),// mostra a lista caso seja sucess
ExampleStatus.fail: () => const Text(" fail :( "),// mostra a erro caso seja fail
ExampleStatus.loading: () => const CircularProgressIndicator(),// mostra um ProgressIndicator caso seja loading
},
),
floatingActionButton: FloatingActionButton(
onPressed: myController.count,
child: const Icon(Icons.add),
),
);
}
}
Additional information
Me chamo Felipe Kaian, sou o autor deste pacote, vocês podem me econtrar no LinkedIn ou através do email felipekaianmutti@gmail.com, podem trazer melhorias, sugestões e feedbacks, quanto mais melhor, espero que esse pacote ajude nossa comunidade Flutter a crescer cada vez mais!