better_shared_preferences 0.0.1 copy "better_shared_preferences: ^0.0.1" to clipboard
better_shared_preferences: ^0.0.1 copied to clipboard

Typed reactive wrapper around shared_preferences for primitives, lists, and JSON objects.

example/lib/main.dart

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'),
              ),
            ],
          ),
        ],
      ),
    );
  }
}
2
likes
150
points
110
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

Typed reactive wrapper around shared_preferences for primitives, lists, and JSON objects.

Repository (GitHub)
View/report issues

License

BSD-3-Clause (license)

Dependencies

flutter, shared_preferences

More

Packages that depend on better_shared_preferences