Widgets de lista flexibilizados para evitar overflows

parent 86fb3301
......@@ -17,16 +17,20 @@ class Carpeta extends ElementoSeleccionable{
bool get isOpen => _open;
bool get incluyeSubcarpetas => _incluirSubcarpetas;
Carpeta({required super.id, required Directory directory, required Map<Formato, bool> formatos}):
Carpeta({required super.id, required Directory directory}):
_directory = directory,
super(nombre: directory.path.split('/').last, icon: const Icon(Icons.folder_outlined))
{
_formatos = [];
for(var f in formatos.entries) {
final archivos = directory.listSync(recursive: true, followLinks: false);
for(var a in archivos) {
Formato? f = Formato.fromExtension(a.path.split(".").last);
if(f != null){
_formatos.add(InfoFormato(
formato: f.key,
formato: f,
nombreCarpeta: directory.path.split('/').last,
subCarpeta: f.value));
subCarpeta: false));
}
}
}
......
......@@ -27,10 +27,18 @@ class ListaSeleccionables extends ChangeNotifier {
}
void addCarpeta(Directory directory){
_seleccionables.add(Carpeta(id: const Uuid().v1(),
directory: directory, formatos: <Formato, bool>{Formato.mp4: false, Formato.mp3: true}));
final newCarpeta = Carpeta(
id: const Uuid().v1(),
directory: directory
);
if(newCarpeta.formatos.isNotEmpty){
_seleccionables.add(Carpeta(
id: const Uuid().v1(),
directory: directory
));
notifyListeners();
}
}
void reinsertar(int index, ElementoSeleccionable element){
_seleccionables.insert(index, element);
......
......@@ -31,10 +31,12 @@ class _PaginaConfiguracionState extends State<PaginaConfiguracion> {
return Scaffold(
appBar: AppBar(
title: RichText(
maxLines: 1,
overflow: TextOverflow.ellipsis,
text: TextSpan(
children: [
WidgetSpan(
child: Icon(_getIcon())
child: _getIcon()
),
TextSpan(
text: _getShownName(),
......@@ -49,14 +51,17 @@ class _PaginaConfiguracionState extends State<PaginaConfiguracion> {
);
}
IconData _getIcon(){
Icon _getIcon(){
if(widget._elementoAsociado is Carpeta){
return Icons.folder;
return Icon(Icons.folder);
}
if(widget._elementoAsociado is Enlace){
return Icons.link;
return Icon(Icons.link);
}
return Icons.insert_drive_file;
if(widget._elementoAsociado is Convertible){
return (widget._elementoAsociado as Convertible).formatoOriginal.tipoMultimedia.icono;
}
return Icon(Icons.insert_drive_file);
}
String _getShownName() {
......
......@@ -74,20 +74,28 @@ class _CarpetaWidgetState extends State<CarpetaWidget>
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
widget.carpeta.icono,
const SizedBox(width: 10),
Expanded(
Flexible(flex:1, child: widget.carpeta.icono),
Flexible(flex: 1, child: const SizedBox(width: 20)),
Flexible(
flex: 15,
child: SizedBox.expand(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
Flexible(
flex: 1,
child: Text(
widget.carpeta.nombre,
style: Theme.of(context).textTheme.bodyLarge?.copyWith(
fontWeight: FontWeight.bold
)
),
Text(
overflow: TextOverflow.ellipsis,
),
),
Flexible(
flex: 1,
child: Text(
(seleccionados.length > 0)?
'${seleccionados.length} formato$s seleccionado$s'
: 'Ningún formato seleccionado',
......@@ -95,10 +103,15 @@ class _CarpetaWidgetState extends State<CarpetaWidget>
color: (seleccionados.length > 0)? null : Colors.red
)
),
),
],
)
),
Transform.rotate(
),
Flexible(
flex: 3,
fit: FlexFit.loose,
child: Transform.rotate(
angle: rotAngle,
child: IconButton(
icon: Icon(
......@@ -115,7 +128,10 @@ class _CarpetaWidgetState extends State<CarpetaWidget>
}
),
),
IconButton(
),
Flexible(
flex: 3,
child: IconButton(
icon: const Icon(Icons.edit),
onPressed: () {
Navigator.push(context,
......@@ -127,6 +143,7 @@ class _CarpetaWidgetState extends State<CarpetaWidget>
);
}));
},
),
)
]
),
......@@ -174,7 +191,7 @@ class _CarpetaWidgetState extends State<CarpetaWidget>
widget.lista.actualizaSeleccionable(widget.indice, widget.carpeta);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('${elemento.formatoOriginal.name.toUpperCase()} excluido de ${widget.carpeta}'),
content: Text('${elemento.formatoOriginal.name.toUpperCase()} excluido de ${widget.carpeta.nombre}'),
action: SnackBarAction(
label: 'Deshacer',
onPressed: () {
......@@ -194,29 +211,41 @@ class _CarpetaWidgetState extends State<CarpetaWidget>
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Icon(Icons.find_in_page_outlined),
const SizedBox(width: 10),
Expanded(
Flexible(flex: 1, child: Icon(Icons.find_in_page_outlined)),
Flexible(flex: 1, child: const SizedBox(width: 10)),
Flexible(
flex: 13,
child: SizedBox.expand(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
Flexible(
flex: 1,
child: Text(
widget.carpeta.nombre,
style: Theme.of(context).textTheme.bodyLarge?.copyWith(
fontWeight: FontWeight.bold
)
),
Text(
overflow: TextOverflow.ellipsis
),
),
Flexible(
flex: 1,
child: Text(
texto,
style: Theme.of(context).textTheme.bodyLarge?.copyWith(
fontWeight: FontWeight.bold
)
),
),
],
)
),
IconButton(
),
Flexible(
flex: 2,
child: IconButton(
icon: const Icon(Icons.edit),
onPressed: () {
Navigator.push(context,
......@@ -230,6 +259,7 @@ class _CarpetaWidgetState extends State<CarpetaWidget>
}
));
},
),
)
]
),
......
......@@ -150,7 +150,6 @@ class _ConVertexFabBarState extends State<ConVertexFabBar> {
onPressed: () async {
String? path = await FilePicker.platform.getDirectoryPath();
if (path != null) {
// TODO: AÑADIR POSIBILIDAD RECURSIVIDAD
var directory = Directory(path);
manager.addCarpeta(directory);
}
......
......@@ -28,28 +28,39 @@ class SeleccionableWidget extends StatelessWidget {
Convertible arch = (seleccionable as Convertible);
String texto = arch.formatoOriginal.name.toUpperCase();
if(arch.formatoDestino != null) texto += " > ${arch.formatoDestino!.name.toUpperCase()}";
formatoOrig = Text(texto);
formatoOrig = Flexible(flex:1, child: Text(texto));
}
return Row(
return SizedBox(
height: 60,
width: MediaQuery.of(context).size.width,
child: Row(
children: <Widget>[
seleccionable.icono,
const SizedBox(width: 10),
Expanded(
Flexible(flex: 1, child: seleccionable.icono),
Flexible(flex: 1, child: const SizedBox(width: 15)),
Flexible(
flex: 16,
child: SizedBox.expand(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
Flexible(
flex: 1,
child: Text(
visible,
style: Theme.of(context).textTheme.bodyLarge?.copyWith(
fontWeight: FontWeight.bold
)
),
),
if(formatoOrig != null) formatoOrig
],
)
),
IconButton(
),
Flexible(
flex: 2,
child: IconButton(
icon: const Icon(Icons.edit),
onPressed: () {
Navigator.push(context,
......@@ -57,8 +68,10 @@ class SeleccionableWidget extends StatelessWidget {
return PaginaConfiguracion(indice: indice, elemento: seleccionable, lista: lista);
}));
},
),
)
]
)
);
}
}
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