import 'package:flutter/material.dart'; import 'package:pdfx/pdfx.dart'; import 'package:sheetless/api.dart'; import 'package:sheetless/sheet.dart'; class SheetViewerPage extends StatefulWidget { final Sheet sheet; final ApiClient apiClient; const SheetViewerPage( {super.key, required this.sheet, required this.apiClient}); @override State createState() => _SheetViewerPageState(); } class _SheetViewerPageState extends State { @override void initState() { super.initState(); } Future loadPdf() async { var file = await widget.apiClient.getPdfFileCached(widget.sheet.uuid); if (file == null) { throw Exception("Failed fetching pdf file"); } return PdfController(document: PdfDocument.openFile(file.path)); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.sheet.name), ), body: FutureBuilder( future: loadPdf(), builder: (BuildContext context, AsyncSnapshot snapshot) { if (snapshot.hasData) { return PdfView( controller: snapshot.data!, pageSnapping: false, scrollDirection: Axis.vertical, ); } else if (snapshot.hasError) { return Center( child: Text( style: Theme.of(context) .textTheme .displaySmall! .copyWith(color: Colors.red), textAlign: TextAlign.center, snapshot.error.toString())); } else { return const Center(child: CircularProgressIndicator()); } }), ); } }