flutter_clean_storage 0.0.1
flutter_clean_storage: ^0.0.1 copied to clipboard
A type-safe, clean architecture storage solution for Flutter applications that supports both secure and non-secure storage with built-in parsers for common types.
import 'package:flutter/material.dart';
import 'package:flutter_clean_storage/flutter_clean_storage.dart';
import 'storage/app_storage.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await AppStorage.initialize();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Clean Storage Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const StorageDemo(),
);
}
}
class StorageDemo extends StatefulWidget {
const StorageDemo({super.key});
@override
State<StorageDemo> createState() => _StorageDemoState();
}
class _StorageDemoState extends State<StorageDemo> {
// Define storage items
final counterStorage = 'counter'.asIntStorage();
final nameStorage = 'username'.asStorage(isSecure: true);
final lastUpdateStorage = 'lastUpdate'.asDateTimeStorage();
final settingsStorage = 'isDarkMode'.asBoolStorage();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Clean Storage Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
FutureBuilder<int>(
future: counterStorage.get(),
builder: (context, snapshot) {
return Text(
'Counter: ${snapshot.data ?? 0}',
style: Theme.of(context).textTheme.headlineMedium,
);
},
),
const SizedBox(height: 20),
FutureBuilder<String>(
future: nameStorage.get(),
builder: (context, snapshot) {
return Text(
'Secure Name: ${snapshot.data ?? "Not set"}',
style: Theme.of(context).textTheme.titleLarge,
);
},
),
const SizedBox(height: 20),
FutureBuilder<DateTime>(
future: lastUpdateStorage.get(),
builder: (context, snapshot) {
return Text(
'Last Update: ${snapshot.data?.toIso8601String() ?? "Never"}',
);
},
),
const SizedBox(height: 20),
FutureBuilder<bool>(
future: settingsStorage.get(),
builder: (context, snapshot) {
return Text(
'Dark Mode: ${snapshot.data ?? false}',
);
},
),
],
),
),
floatingActionButton: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FloatingActionButton(
onPressed: () async {
final current = await counterStorage.get();
await counterStorage.set(current + 1);
await lastUpdateStorage.set(DateTime.now());
setState(() {});
},
child: const Icon(Icons.add),
),
const SizedBox(height: 10),
FloatingActionButton(
onPressed: () async {
await nameStorage.set('John Doe');
await settingsStorage.set(true);
setState(() {});
},
child: const Icon(Icons.person),
),
const SizedBox(height: 10),
FloatingActionButton(
onPressed: () async {
await CleanStorageService.instance.clearEverything();
setState(() {});
},
child: const Icon(Icons.delete),
),
],
),
);
}
}