| 
						
						
						
					 | 
					 | 
					@ -1,7 +1,9 @@ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import 'package:filesize/filesize.dart'; | 
					 | 
					 | 
					 | 
					import 'package:filesize/filesize.dart'; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import 'package:flutter/material.dart'; | 
					 | 
					 | 
					 | 
					import 'package:flutter/material.dart'; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; | 
					 | 
					 | 
					 | 
					import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					import 'package:neon/utils.dart'; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import 'package:neon/widgets.dart'; | 
					 | 
					 | 
					 | 
					import 'package:neon/widgets.dart'; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					import 'package:neon_files/l10n/localizations.dart'; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import 'package:neon_files/neon_files.dart'; | 
					 | 
					 | 
					 | 
					import 'package:neon_files/neon_files.dart'; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					import 'package:neon_files/widgets/actions.dart'; | 
					 | 
					 | 
					 | 
					import 'package:neon_files/widgets/actions.dart'; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -10,32 +12,39 @@ class FileListTile extends StatelessWidget { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    required this.bloc, | 
					 | 
					 | 
					 | 
					    required this.bloc, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    required this.browserBloc, | 
					 | 
					 | 
					 | 
					    required this.browserBloc, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    required this.details, | 
					 | 
					 | 
					 | 
					    required this.details, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    this.enableFileActions = true, | 
					 | 
					 | 
					 | 
					    this.mode = FilesBrowserMode.browser, | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    this.onPickFile, | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    super.key, | 
					 | 
					 | 
					 | 
					    super.key, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  }); | 
					 | 
					 | 
					 | 
					  }); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  final FilesBloc bloc; | 
					 | 
					 | 
					 | 
					  final FilesBloc bloc; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  final FilesBrowserBloc browserBloc; | 
					 | 
					 | 
					 | 
					  final FilesBrowserBloc browserBloc; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  final FileDetails details; | 
					 | 
					 | 
					 | 
					  final FileDetails details; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  final bool enableFileActions; | 
					 | 
					 | 
					 | 
					  final FilesBrowserMode mode; | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  final Function(FileDetails)? onPickFile; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  @override | 
					 | 
					 | 
					 | 
					  Future<void> _onTap(final BuildContext context, final FileDetails details) async { | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  Widget build(final BuildContext context) { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    // When the ETag is null it means we are uploading this file right now | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    final onTap = details.isDirectory || details.etag != null | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        ? () { | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (details.isDirectory) { | 
					 | 
					 | 
					 | 
					    if (details.isDirectory) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      browserBloc.setPath(details.path); | 
					 | 
					 | 
					 | 
					      browserBloc.setPath(details.path); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            } else { | 
					 | 
					 | 
					 | 
					    } else if (mode == FilesBrowserMode.browser) { | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					              onPickFile?.call(details); | 
					 | 
					 | 
					 | 
					      final sizeWarning = bloc.options.downloadSizeWarning.value; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      if (sizeWarning != null && details.size != null && details.size! > sizeWarning) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        if (!(await showConfirmationDialog( | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					          context, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					          AppLocalizations.of(context).downloadConfirmSizeWarning( | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            filesize(sizeWarning), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            filesize(details.size), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					          ), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        ))) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					          return; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					      bloc.openFile(details.path, details.etag!, details.mimeType); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					  } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        : null; | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    return ListTile( | 
					 | 
					 | 
					 | 
					  @override | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      onTap: onTap, | 
					 | 
					 | 
					 | 
					  Widget build(final BuildContext context) => ListTile( | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        // When the ETag is null it means we are uploading this file right now | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        onTap: details.isDirectory || details.etag != null ? () async => _onTap(context, details) : null, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        title: Text( | 
					 | 
					 | 
					 | 
					        title: Text( | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          details.name, | 
					 | 
					 | 
					 | 
					          details.name, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          overflow: TextOverflow.ellipsis, | 
					 | 
					 | 
					 | 
					          overflow: TextOverflow.ellipsis, | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -63,13 +72,12 @@ class FileListTile extends StatelessWidget { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          details: details, | 
					 | 
					 | 
					 | 
					          details: details, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					          bloc: bloc, | 
					 | 
					 | 
					 | 
					          bloc: bloc, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        ), | 
					 | 
					 | 
					 | 
					        ), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      trailing: !details.hasTask && enableFileActions | 
					 | 
					 | 
					 | 
					        trailing: !details.hasTask && mode != FilesBrowserMode.noActions | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            ? FileActions(details: details) | 
					 | 
					 | 
					 | 
					            ? FileActions(details: details) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            : const SizedBox.square( | 
					 | 
					 | 
					 | 
					            : const SizedBox.square( | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                dimension: 48, | 
					 | 
					 | 
					 | 
					                dimension: 48, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					              ), | 
					 | 
					 | 
					 | 
					              ), | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					      ); | 
					 | 
					 | 
					 | 
					      ); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  } | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					} | 
					 | 
					 | 
					 | 
					} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					class _FileIcon extends StatelessWidget { | 
					 | 
					 | 
					 | 
					class _FileIcon extends StatelessWidget { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |