import 'dart:convert'; import 'package:injectable/injectable.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../../../common/constant/local_storage_key.dart'; import '../unit_dtos.dart'; /// Satuan berjumlah sedikit dan jarang berubah, jadi cukup disimpan sebagai /// satu blob JSON di SharedPreferences — tidak perlu tabel sqflite sendiri. @injectable class UnitLocalDataProvider { final SharedPreferences _sharedPreferences; UnitLocalDataProvider(this._sharedPreferences); Future saveUnits(List units) async { final jsonString = jsonEncode(units.map((e) => e.toJson()).toList()); await _sharedPreferences.setString(LocalStorageKey.units, jsonString); } List getUnits() { final jsonString = _sharedPreferences.getString(LocalStorageKey.units); if (jsonString == null || jsonString.isEmpty) return const []; final decoded = jsonDecode(jsonString); if (decoded is! List) return const []; return decoded .whereType>() .map(UnitDto.fromJson) .toList(); } Future clearUnits() async { await _sharedPreferences.remove(LocalStorageKey.units); } }