Skip to content

ali2236/prefman

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PrefMan

Pub Version

A structured way to manage Preferences.

Preference Class

var settings = AppPreferences();

class AppPreferences extends SettingManifest {
  final theme = Preference<String>.options(
    key: 'theme',
    defaultValue: 'blue',
    options: [
      Option('blue'),
      Option('red'),
      Option('orange'),
    ],
  );

  final username = Preference<String>.any(
    key: 'username',
    defaultValue: 'user',
  );

  final volume = Preference.integer(
    key: 'volume',
    defaultValue: 10,
    min: 0,
    max: 15,
  );

  final askAgain = Preference.boolean(
    key: 'ask_again',
    defaultValue: true,
  );

  List<Preference> get preferences => [theme, username, volume, askAgain];
}

Use

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await PrefMan.initialize();
  // ...
}
 var username = settings.username.get();
  settings.username.setValue('new username');

Persistent Variables

You don't have to declare your preferences in a SettingManifest, you can use them as persistent variables.

  final count = Preference.integer(key: 'counter', defaultValue: 0);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text(count.get().toString()),
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: () async {
          await count.setValue(count.get() + 1);
          setState(() {});
        },
      ),
    );
  }

The count will persist between runs!

Observability

The Preference class implements the Listenable interface, so you can use it with AnimatedBuilder or other means of reacting to its changes.

  final count = Preference.integer(key: 'counter', defaultValue: 0);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: AnimatedBuilder(
          animation: count,
          builder: (context, _) => Text(count.get().toString()),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: () => count.setValue(count.get() + 1),
      ),
    );
  }

Releases

No releases published

Packages

No packages published

Languages