import 'dart:developer'; import 'package:filesize/filesize.dart'; import 'package:flutter/material.dart'; import 'package:jiffy/jiffy.dart'; import 'package:marianum_mobile/api/marianumcloud/webdav/queries/listFiles/cacheableFile.dart'; import 'package:marianum_mobile/screen/pages/files/fileDownload.dart'; import 'package:marianum_mobile/widget/errorView.dart'; import 'package:provider/provider.dart'; import '../../../data/files/filesProps.dart'; class Files extends StatefulWidget { Function appBar; Files(this.appBar, {Key? key}) : super(key: key); @override State createState() => _FilesState(); } class _FilesState extends State { @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((timeStamp) { Provider.of(context, listen: false).run(); }); } void updateAppBar(FilesProps props) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) { widget.appBar(context, AppBar( leading: BackButton( onPressed: () { updateAppBar(props); props.popFolder(); }, ), title: Text(props.currentFolderName), )); }); } @override Widget build(BuildContext context) { return Consumer( builder: (context, value, child) { if(value.primaryLoading()) return const Center(child: CircularProgressIndicator()); if(value.listFilesResponse.files.isEmpty) { return const ErrorView(text: "Der Ordner ist leer", icon: Icons.folder_off_outlined); } return ListView.builder( itemCount: value.listFilesResponse.files.length, itemBuilder: (context, index) { CacheableFile file = value.listFilesResponse.files.skip(index).first; return ListTile( leading: Icon(file.isDirectory ? Icons.folder : Icons.file_open_outlined), title: Text(file.name), subtitle: file.isDirectory ? Text("geändert ${Jiffy(file.modifiedAt).fromNow()}") : Text("${filesize(file.size)}, ${Jiffy(file.modifiedAt).fromNow()}"), trailing: Icon(file.isDirectory ? Icons.arrow_right : Icons.open_in_new), onTap: () { FilesProps props = Provider.of(context, listen: false); updateAppBar(props); if(file.isDirectory) { props.enterFolder(file.name); } else { //TODO implement file download / view log(file.path); showDialog(context: context, builder: (context) { return FileDownload(file.path, file.name); }); } }, onLongPress: () { showModalBottomSheet( context: context, builder: (context) { return ListView( children: [ ListTile( leading: const Icon(Icons.delete), title: Text("'${file.name}' Löschen"), ), const ListTile( leading: Icon(Icons.share), title: Text("Teilen"), ) ], ); }, ); }, ); }, ); } ); } }