import 'dart:io'; import 'package:flutter/material.dart'; import 'package:path/path.dart' as p; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Sheetless', theme: ThemeData( useMaterial3: true, primarySwatch: Colors.blue, ), home: const MyHomePage(title: 'Sheetless'), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({super.key, required this.title}); final String title; @override State createState() => _MyHomePageState(); } class Sheet { final String author; final String name; Sheet(this.author, this.name); } class _MyHomePageState extends State { Future> loadSheets() async { print("LOADING SHEETS!!! ###############################"); // TODO: Handle directory not found var dir = Directory("/home/julian/Nextcloud/jhome/Klavier-Noten/"); final List sheets = List.empty(growable: true); if (dir.existsSync()) { await for (final FileSystemEntity x in dir.list()) { if (x is Directory) { var y = x; var authorName = p.basename(y.path); await for (final FileSystemEntity a in y.list()) { if (a is File) { var sheetName = p.basenameWithoutExtension(a.path); sheets.add(Sheet(authorName, sheetName)); } } } } } return sheets; } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), // body: Center( // child: Column( // mainAxisAlignment: MainAxisAlignment.center, // children: [ body: FutureBuilder( future: loadSheets(), builder: (BuildContext context, AsyncSnapshot> snapshot) { if (snapshot.hasData) { return SheetsWidget(sheets: snapshot.data!); } else if (snapshot.hasError) { return const Icon(Icons.error); } else { return const CircularProgressIndicator(); } }), // const Text( // 'You have pushed the button this many times:', // ), // Text( // '$_counter', // style: Theme.of(context).textTheme.headlineMedium, // ), // ], // ), // ), ); } } class SheetsWidget extends StatelessWidget { final List sheets; const SheetsWidget({super.key, required this.sheets}); @override Widget build(context) { return ListView.builder( itemCount: sheets.length, itemBuilder: (context, index) { var sheet = sheets[index]; return ListTile( title: Text(sheet.name), subtitle: Text(sheet.author), ); }); } }