Feature #2: Fluttery Framework - Base Essentials #7

Merged
boom merged 13 commits from fluttery-framework into dev 2025-09-23 21:01:19 +02:00
5 changed files with 26 additions and 13 deletions
Showing only changes of commit 64343bbb80 - Show all commits

View File

@@ -9,7 +9,7 @@ Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
// any services // any services
await App.registerDefaultServices(); App.registerDefaultServices();
final logger = App.service<Logger>(); final logger = App.service<Logger>();
logger.debug("[MAIN] Registered all default services"); logger.debug("[MAIN] Registered all default services");

View File

@@ -9,7 +9,6 @@ import 'package:fluttery/src/storage/secure/secure_storage_impl.dart';
import 'package:fluttery/src/system/worker/worker_impl.dart'; import 'package:fluttery/src/system/worker/worker_impl.dart';
import 'package:fluttery/worker.dart'; import 'package:fluttery/worker.dart';
import 'package:kiwi/kiwi.dart'; import 'package:kiwi/kiwi.dart';
import 'package:shared_preferences/shared_preferences.dart';
/// A class to manage services. /// A class to manage services.
class App { class App {
@@ -32,11 +31,9 @@ class App {
} }
/// Registers the default services required by the application. /// Registers the default services required by the application.
static Future<void> registerDefaultServices() async { static void registerDefaultServices() {
final prefs = await SharedPreferences.getInstance();
registerService<Logger>(() => LoggerImpl()); registerService<Logger>(() => LoggerImpl());
registerService<Preferences>(() => PreferencesImpl(instance: prefs)); registerService<Preferences>(() => PreferencesImpl());
registerService<SecureStorage>(() => SecureStorageImpl()); registerService<SecureStorage>(() => SecureStorageImpl());
registerService<Worker>(() => WorkerImpl()); registerService<Worker>(() => WorkerImpl());
} }

View File

@@ -2,68 +2,85 @@ import 'package:fluttery/preferences.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
class PreferencesImpl implements Preferences { class PreferencesImpl implements Preferences {
final SharedPreferences _prefs; late final SharedPreferences _prefs;
bool _initialized = false;
/// Constructor Future<void> _ensureInitialized() async {
PreferencesImpl({required SharedPreferences instance}) : _prefs = instance; if (!_initialized) {
_prefs = await SharedPreferences.getInstance();
_initialized = true;
}
}
@override @override
Future<void> setString(String key, String value) async { Future<void> setString(String key, String value) async {
await _ensureInitialized();
await _prefs.setString(key, value); await _prefs.setString(key, value);
} }
@override @override
Future<String?> getString(String key) async { Future<String?> getString(String key) async {
await _ensureInitialized();
return _prefs.getString(key); return _prefs.getString(key);
} }
@override @override
Future<void> setInt(String key, int value) async { Future<void> setInt(String key, int value) async {
await _ensureInitialized();
await _prefs.setInt(key, value); await _prefs.setInt(key, value);
} }
@override @override
Future<int?> getInt(String key) async { Future<int?> getInt(String key) async {
await _ensureInitialized();
return _prefs.getInt(key); return _prefs.getInt(key);
} }
@override @override
Future<void> setBool(String key, bool value) async { Future<void> setBool(String key, bool value) async {
await _ensureInitialized();
await _prefs.setBool(key, value); await _prefs.setBool(key, value);
} }
@override @override
Future<bool?> getBool(String key) async { Future<bool?> getBool(String key) async {
await _ensureInitialized();
return _prefs.getBool(key); return _prefs.getBool(key);
} }
@override @override
Future<void> setDouble(String key, double value) async { Future<void> setDouble(String key, double value) async {
await _ensureInitialized();
await _prefs.setDouble(key, value); await _prefs.setDouble(key, value);
} }
@override @override
Future<double?> getDouble(String key) async { Future<double?> getDouble(String key) async {
await _ensureInitialized();
return _prefs.getDouble(key); return _prefs.getDouble(key);
} }
@override @override
Future<void> setStringList(String key, List<String> value) async { Future<void> setStringList(String key, List<String> value) async {
await _ensureInitialized();
await _prefs.setStringList(key, value); await _prefs.setStringList(key, value);
} }
@override @override
Future<List<String>?> getStringList(String key) async { Future<List<String>?> getStringList(String key) async {
await _ensureInitialized();
return _prefs.getStringList(key); return _prefs.getStringList(key);
} }
@override @override
Future<void> remove(String key) async { Future<void> remove(String key) async {
await _ensureInitialized();
await _prefs.remove(key); await _prefs.remove(key);
} }
@override @override
Future<void> clear() async { Future<void> clear() async {
await _ensureInitialized();
await _prefs.clear(); await _prefs.clear();
} }
} }

View File

@@ -53,7 +53,7 @@ class WorkerImpl implements Worker {
} }
// Now it's safe to touch plugins (e.g., SharedPreferences). // Now it's safe to touch plugins (e.g., SharedPreferences).
await App.registerDefaultServices(); App.registerDefaultServices();
preTask?.call(); preTask?.call();

View File

@@ -11,8 +11,7 @@ void main() {
// Create preferences instance that will use the real SharedPreferences // Create preferences instance that will use the real SharedPreferences
// but with in-memory storage for testing // but with in-memory storage for testing
final sharedInstance = await SharedPreferences.getInstance(); preferences = PreferencesImpl();
preferences = PreferencesImpl(instance: sharedInstance);
// Give time for initialization // Give time for initialization
await Future.delayed(Duration.zero); await Future.delayed(Duration.zero);