feat: integrate persona D (recycling guide) and routes modules

This commit is contained in:
Alan Alonso
2026-05-23 01:00:02 -06:00
parent a38ca14f38
commit 6d1845c09d
21 changed files with 2074 additions and 99 deletions

View File

@@ -0,0 +1,46 @@
// 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,
);
}
}