import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:sheetless/sheetview.dart'; import 'sheet.dart'; 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(), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({super.key}); @override State createState() => _MyHomePageState(); } class _MyHomePageState extends State { Future getSavedSheetsPath() async { final prefs = await SharedPreferences.getInstance(); return prefs.getString("sheets-path"); } Future saveSheetsPath(String path) async { final prefs = await SharedPreferences.getInstance(); prefs.setString("sheets-path", path); } Future askForSheetsPath() async { return await FilePicker.platform.getDirectoryPath(); } Future findAndSaveSheetsPath() async { String? savedSheetsPath = await getSavedSheetsPath(); if (savedSheetsPath != null) { return savedSheetsPath; } String? selectedSheetsPath = await askForSheetsPath(); if (selectedSheetsPath != null) { await saveSheetsPath(selectedSheetsPath); return selectedSheetsPath; } return "No path selected"; } Future> acquireSheets() async { var sheetsPath = await findAndSaveSheetsPath(); return loadSheetsSorted(sheetsPath); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text("My Sheets"), ), body: FutureBuilder( future: acquireSheets(), builder: (BuildContext context, AsyncSnapshot> snapshot) { if (snapshot.hasData) { return SheetsWidget( sheets: snapshot.data!, callback: (sheet) => Navigator.push( context, MaterialPageRoute( builder: (context) => SheetViewerPage(sheet: sheet), ), ), ); } else if (snapshot.hasError) { return Text(snapshot.error.toString()); } else { return const CircularProgressIndicator(); } }), ); } }