Fusionada la adición de archivos con la interfaz de configuración

parent 11223e47
......@@ -16,5 +16,5 @@ class Archivo extends Convertible{
super(id: id,
nombre: file.path.split('/').last,
formatoOriginal: ClaseFormato.fromExtension(file.path.split('/').last.split('.').last),
icon: Icon(Icons.insert_drive_file_outlined));
icon: ClaseFormato.fromExtension(file.path.split('/').last.split('.').last).tipoMultimedia.icono);
}
\ No newline at end of file
......@@ -7,14 +7,16 @@ import './elemento_seleccionable.dart';
import 'formato.dart';
class Carpeta extends ElementoSeleccionable{
final Directory _directory;
bool _incluirSubcarpetas = false;
final List<InfoFormato> _formatos;
Directory get directory => _directory;
List<InfoFormato> get formatos => List.unmodifiable(_formatos);
Carpeta({required id, required nombre}):
_formatos = [],
super(id: id, nombre: nombre, icon: const Icon(Icons.folder_outlined));
Carpeta({required String id, required Directory directory}):
_directory = directory, _formatos = [],
super(id: id, nombre: directory.path.split('/').last, icon: const Icon(Icons.folder_outlined));
@override
void convertir() {
......
......@@ -3,16 +3,16 @@ import 'package:flutter/material.dart';
abstract class ElementoSeleccionable{
final String _id;
final String _nombre;
final Icon _icon;
final Icon _icono;
String get id => this._id;
String get nombre => this._nombre;
Icon get icon => this._icon;
Icon get icono => this._icono;
ElementoSeleccionable({required String id,
required String nombre,
required Icon icon}):
_id = id, _nombre = nombre, _icon = icon;
_id = id, _nombre = nombre, _icono = icon;
void convertir();
}
\ No newline at end of file
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:prueba_multimedia/modelo/seleccionables.dart';
import 'package:prueba_multimedia/modelo/carpeta.dart';
import 'package:prueba_multimedia/modelo/elemento_seleccionable.dart';
import 'package:prueba_multimedia/modelo/archivo.dart';
import 'package:uuid/uuid.dart';
class ListaSeleccionables extends ChangeNotifier {
final _seleccionables = <Seleccionable>[];
List<Seleccionable> get seleccionables => List.unmodifiable(_seleccionables);
final _seleccionables = <ElementoSeleccionable>[];
List<ElementoSeleccionable> get seleccionables => List.unmodifiable(_seleccionables);
void borraSeleccionable(int indice) {
_seleccionables.removeAt(indice);
notifyListeners();
}
void addSeleccionable(Seleccionable item) {
_seleccionables.add(item);
void addArchivo(File file) {
_seleccionables.add(Archivo(id: "Archivo",
file: file));
notifyListeners();
}
void addCarpeta(Directory directory){
_seleccionables.add(Carpeta(id: const Uuid().v1(),
directory: directory));
notifyListeners();
}
}
\ No newline at end of file
import 'dart:io';
import 'package:flutter/material.dart';
/// Representa un item que se puede añadir a la lista
/// de conversión.
class Seleccionable {
final String nombre;
final Icon icono;
Seleccionable({required this.nombre, required this.icono});
}
/// Las carpetas son seleccionables que contienen otros seleccionables
class Carpeta extends Seleccionable {
final Directory directory;
final listaConvertibles = <Seleccionable>[];
final bool recursiva;
Carpeta(this.directory, this.recursiva): super(
nombre: directory.path.split('/').last,
icono: const Icon(Icons.folder)
)
{
// TODO: mirar recursividad y Link objects
var listaCarpeta = directory.list(recursive: recursiva);
listaCarpeta.forEach( (entity) {
if (entity is File) {
listaConvertibles.add(Archivo(entity));
}
else if (entity is Directory) {
listaConvertibles.add(Carpeta(directory, false));
}
});
}
}
/// Seleccionables que pueden pasar por un proceso de conversion de formatos
class Convertible extends Seleccionable {
final String formatoInicial;
final String? formatoFinal;
Convertible({required super.nombre, required super.icono,
required this.formatoInicial, this.formatoFinal});
}
class Archivo extends Convertible {
final File file;
Archivo(this.file): super(
nombre: file.path.split('/').last,
icono: Icon(Icons.description_outlined),
formatoInicial: file.path.split('.').last,
formatoFinal: null
);
}
class Enlace extends Convertible {
final String enlace;
Enlace(this.enlace): super(
nombre: enlace,
icono: Icon(Icons.link_outlined),
formatoInicial: enlace,
formatoFinal: null
);
}
import 'package:flutter/material.dart';
import 'package:prueba_multimedia/modelo/lista_seleccionables.dart';
import 'package:prueba_multimedia/modelo/seleccionables.dart';
import 'package:prueba_multimedia/widget/seleccionable_widget.dart';
class PaginaPrincipalLlena extends StatelessWidget {
......
......@@ -22,16 +22,6 @@ class PaginaPrincipalVacia extends StatelessWidget {
Text(
'Pulsa el botón + para agregarlos',
style: Theme.of(context).textTheme.bodyLarge,
),
TextButton(
onPressed: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) {
return PaginaConfiguracion(elementoAsociado: Carpeta(id: "1", nombre: 'miCarpeta'));
}
));
},
child: Text('Pulsá')
)
],
),
......
......@@ -4,7 +4,8 @@ import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:prueba_multimedia/modelo/lista_seleccionables.dart';
import 'package:prueba_multimedia/modelo/seleccionables.dart';
import 'package:prueba_multimedia/modelo/carpeta.dart';
import 'package:prueba_multimedia/modelo/archivo.dart';
import 'action_button.dart';
import 'expandable_fab.dart';
......@@ -156,7 +157,7 @@ class _ConVertexFabBarState extends State<ConVertexFabBar> {
if (path != null) {
// TODO: AÑADIR POSIBILIDAD RECURSIVIDAD
var directory = Directory(path);
manager.addSeleccionable(Carpeta(directory, false));
manager.addCarpeta(directory);
}
}
),
......@@ -166,7 +167,7 @@ class _ConVertexFabBarState extends State<ConVertexFabBar> {
FilePickerResult? result = await FilePicker.platform.pickFiles();
if (result != null) {
File file = File(result.files.first.path!);
manager.addSeleccionable(Archivo(file));
manager.addArchivo(file);
} else {
//
}
......
import 'package:flutter/material.dart';
import 'package:prueba_multimedia/modelo/seleccionables.dart';
import 'package:prueba_multimedia/paginas/pagina_configuracion.dart';
import '../modelo/carpeta.dart';
import '../modelo/elemento_seleccionable.dart';
class SeleccionableWidget extends StatelessWidget {
final Seleccionable seleccionable;
final ElementoSeleccionable seleccionable;
const SeleccionableWidget({super.key, required this.seleccionable});
......@@ -28,7 +30,12 @@ class SeleccionableWidget extends StatelessWidget {
IconButton(onPressed: () {}, icon: Icon(Icons.menu)),
IconButton(
icon: const Icon(Icons.edit),
onPressed: () {},
onPressed: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) {
return PaginaConfiguracion(elementoAsociado: seleccionable);
}));
},
)
],
);
......
......@@ -49,6 +49,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.3.4+2"
crypto:
dependency: transitive
description:
name: crypto
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
url: "https://pub.dev"
source: hosted
version: "3.0.6"
cupertino_icons:
dependency: "direct main"
description:
......@@ -81,6 +89,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "9.0.2"
fixnum:
dependency: transitive
description:
name: fixnum
sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
url: "https://pub.dev"
source: hosted
version: "1.1.1"
flutter:
dependency: "direct main"
description: flutter
......@@ -213,6 +229,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.10.1"
sprintf:
dependency: transitive
description:
name: sprintf
sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
url: "https://pub.dev"
source: hosted
version: "7.0.0"
stack_trace:
dependency: transitive
description:
......@@ -253,6 +277,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.7.4"
typed_data:
dependency: transitive
description:
name: typed_data
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
url: "https://pub.dev"
source: hosted
version: "1.4.0"
uuid:
dependency: "direct main"
description:
name: uuid
sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
url: "https://pub.dev"
source: hosted
version: "4.5.1"
vector_math:
dependency: transitive
description:
......
......@@ -36,6 +36,7 @@ dependencies:
cupertino_icons: ^1.0.8
provider: ^6.1.2
file_picker: ^9.0.2
uuid: ^4.5.1
dev_dependencies:
flutter_test:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment