better_shared_preferences 0.0.1
better_shared_preferences: ^0.0.1 copied to clipboard
Typed reactive wrapper around shared_preferences for primitives, lists, and JSON objects.
import 'package:better_shared_preferences/better_shared_preferences.dart';
import 'package:flutter/material.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(const ExampleApp());
}
class ExampleApp extends StatelessWidget {
const ExampleApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'better_shared_preferences example',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const CounterDemo(),
);
}
}
class CounterDemo extends StatefulWidget {
const CounterDemo({super.key});
@override
State<CounterDemo> createState() => _CounterDemoState();
}
class _CounterDemoState extends State<CounterDemo> {
BetterPrefs? _prefs;
@override
void initState() {
super.initState();
BetterPrefs.init().then((prefs) {
if (!mounted) {
prefs.dispose();
return;
}
setState(() => _prefs = prefs);
});
}
@override
void dispose() {
_prefs?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final prefs = _prefs;
return Scaffold(
appBar: AppBar(title: const Text('BetterPrefs')),
body: Center(
child: prefs == null
? const CircularProgressIndicator()
: _CounterBody(prefs: prefs),
),
);
}
}
class _CounterBody extends StatelessWidget {
const _CounterBody({required this.prefs});
final BetterPrefs prefs;
@override
Widget build(BuildContext context) {
final counter = prefs.value<int>('counter', defaultValue: 0);
return Padding(
padding: const EdgeInsets.all(24),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
StreamBuilder<int>(
stream: counter.watch(),
builder: (context, snapshot) {
final value = snapshot.data ?? counter.get();
return Text(
'$value',
style: Theme.of(context).textTheme.displayMedium,
);
},
),
const SizedBox(height: 24),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
FilledButton(
onPressed: () async {
await counter.set(counter.get() + 1);
},
child: const Text('Increment'),
),
const SizedBox(width: 12),
OutlinedButton(
onPressed: counter.remove,
child: const Text('Reset'),
),
],
),
],
),
);
}
}