// 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? _cache; Future> cargarCategorias() async { if (_cache != null) return _cache!; final raw = await rootBundle.loadString(_assetPath); final List 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, ); } }