bloc_storage 1.0.1
bloc_storage: ^1.0.1 copied to clipboard
A package for storing and retrieving BLoC instances globally.
example/lib/main.dart
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:bloc_storage/bloc_storage.dart';
void main() {
runApp(const ExampleApp());
}
class CounterCubit extends Cubit<int> {
CounterCubit() : super(0);
void increment() => emit(state + 1);
}
class ExampleApp extends StatelessWidget {
const ExampleApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(home: HomePage());
}
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
return BlocProvider<CounterCubit>(
create: (_) => CounterCubit(),
child: BlocBuilder<CounterCubit, int>(
builder: (context, count) {
return Scaffold(
appBar: AppBar(title: const Text("Home Page")),
body: Center(
child: Text(
"Count: $count",
style: const TextStyle(fontSize: 32),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
context.read<CounterCubit>().increment();
},
tooltip: "Increment",
child: const Icon(Icons.add),
),
persistentFooterButtons: [
ElevatedButton(
onPressed: () {
final counterCubit = context.read<CounterCubit>();
/// Store the cubit instance before navigating
BlocStorage.store<CounterCubit>(counterCubit);
Navigator.of(
context,
).push(MaterialPageRoute(builder: (_) => SecondPage()));
},
child: const Text("Go to Second Page"),
),
],
);
},
),
);
}
}
class SecondPage extends StatefulWidget {
const SecondPage({super.key});
@override
State<SecondPage> createState() => _SecondPageState();
}
class _SecondPageState extends State<SecondPage> {
/// retrieve the stored cubit instance
final counterCubit = BlocStorage.retrieve<CounterCubit>();
@override
void dispose() {
/// if you want to clear the stored cubit after use
BlocStorage.clear<CounterCubit>();
/// if you want to clear all stored cubit
BlocStorage.clearAll();
super.dispose();
}
@override
Widget build(BuildContext context) {
return BlocProvider.value(
value: counterCubit,
child: Scaffold(
appBar: AppBar(title: const Text("Second Page")),
body: Center(
child: BlocBuilder<CounterCubit, int>(
builder: (context, count) {
return Text(
"Second Page Count: $count",
style: const TextStyle(fontSize: 32),
);
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
counterCubit.increment();
},
tooltip: "Increment",
child: const Icon(Icons.add),
),
),
);
}
}