-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Hi @SPiercer ππ»
Thank you for creating this excellent package! I think this enhancement would make it even more convenient to use ππ»
π€ Problem
Currently, every Saveable value requires passing the storage parameter:
final counter = Saveable<int>(
key: 'counter',
storage: myStorage, // β Repetitive π
defaultValue: 0,
);
final username = Saveable<String>(
key: 'username',
storage: myStorage, // β Repetitive π
defaultValue: '',
);
final isLoggedIn = Saveable<bool>(
key: 'is_logged_in',
storage: myStorage, // β Repetitive π
defaultValue: false,
);This becomes verbose and repetitive in apps with many saveable values.
π‘ Proposed Solution
Configure a default storage once at app startup, while keeping it optional for value-specific overrides:
// Configure once at startup βοΈ
void main() async {
final prefs = await SharedPreferences.getInstance();
final storage = SharedPreferencesStorage(prefs);
Saveable.setDefaultStorage(storage); // β Global configuration β¨
runApp(MyApp());
}
// Use without storage parameter π
final counter = Saveable<int>(
key: 'counter',
defaultValue: 0,
// storage automatically uses default
);
final username = Saveable<String>(
key: 'username',
defaultValue: '',
);
// Override for specific values when needed π
final secureToken = Saveable<String>(
key: 'auth_token',
storage: secureStorage, // β Optional override for sensitive data
);π― Benefits
- Less boilerplate π: No need to pass
storagefor every value - Cleaner code β¨: Focus on the value configuration, not storage plumbing
- Flexible π: Can still override storage for specific values (e.g., secure storage for tokens)
- Easier refactoring π οΈ: Change default storage in one place
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels