- Remove duplicate features structure from basura_app - Migrate recycling_guide feature to lib/ - Update main.dart to use new architecture - Clean up old views structure - Remove temporary directories (basura_app, basura_backend, wiki_hackathon)
47 lines
1.4 KiB
Dart
47 lines
1.4 KiB
Dart
// lib/features/recycling_guide/data/datasources/recycling_local_datasource.dart
|
|
// Único archivo que sabe que los datos vienen de un JSON en assets.
|
|
// Funciona sin conexión a internet.
|
|
|
|
import 'dart:convert';
|
|
import 'package:flutter/services.dart';
|
|
import '../../domain/entities/recycling_category.dart';
|
|
|
|
class RecyclingLocalDatasource {
|
|
static const _assetPath = 'assets/recycling_guide.json';
|
|
|
|
// Cache en memoria — se carga una sola vez durante la sesión
|
|
List<RecyclingCategory>? _cache;
|
|
|
|
Future<List<RecyclingCategory>> cargarCategorias() async {
|
|
if (_cache != null) return _cache!;
|
|
|
|
final raw = await rootBundle.loadString(_assetPath);
|
|
final List<dynamic> json = jsonDecode(raw);
|
|
|
|
_cache = json.map(_mapearCategoria).toList();
|
|
return _cache!;
|
|
}
|
|
|
|
RecyclingCategory _mapearCategoria(dynamic json) {
|
|
final items = (json['items'] as List)
|
|
.map(
|
|
(i) => RecyclingItem(
|
|
nombre: i['nombre'] as String,
|
|
ejemplos: i['ejemplos'] as String,
|
|
acepta: i['acepta'] as bool,
|
|
),
|
|
)
|
|
.toList();
|
|
|
|
return RecyclingCategory(
|
|
id: json['id'] as String,
|
|
nombre: json['nombre'] as String,
|
|
descripcion: json['descripcion'] as String,
|
|
colorHex: json['color'] as String,
|
|
icono: json['icono'] as String,
|
|
consejo: json['consejo'] as String,
|
|
items: items,
|
|
);
|
|
}
|
|
}
|