import 'package:flutter/material.dart'; import 'package:spreadsheet_table/spreadsheet_table.dart'; import 'package:ltx_flutter/appwrite/appwrite.dart'; import 'package:ltx_flutter/appwrite/database_api.dart'; import 'package:provider/provider.dart'; import 'package:appwrite/models.dart'; import 'package:intl/intl.dart'; class TablePage extends StatefulWidget { const TablePage({Key? key}) : super(key: key); @override _TablePageState createState() => _TablePageState(); } class _TablePageState extends State { final database = DatabaseAPI(); late List? entries = []; AuthStatus authStatus = AuthStatus.uninitialized; @override void initState() { super.initState(); final AuthAPI appwrite = context.read(); authStatus = appwrite.status; loadEntries(); } loadEntries() async { try { final value = await database.getEntries(limit: 5); setState(() { entries = value.documents; }); } catch (e) { print(e); } } @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(10), child: Column( children: [ Expanded( child: entries!.isEmpty ? Center(child: const CircularProgressIndicator()) : TableWidget(entries: entries)), Expanded(child: DiagnosticsWidget(entries: entries)), ], ), ); } } class DiagnosticsWidget extends StatelessWidget { final List? entries; const DiagnosticsWidget({ super.key, this.entries, }); @override Widget build(BuildContext context) { return ListView( children: [ ListTile( leading: Icon(Icons.date_range_outlined), title: Text("Entries"), subtitle: Text("${entries?.length}"), ), ], ); } } class TableWidget extends StatelessWidget { TableWidget({super.key, this.entries}); final List? entries; final DateFormat dateFormatter = DateFormat('MM/dd'); final DateFormat dayFormatter = DateFormat('E'); @override Widget build(BuildContext context) { return SpreadsheetTable( cellWidth: 42, rowsCount: entries!.length, colCount: 27, cellBuilder: (_, int row, int col) { var entry = entries?[row]; var date = DateTime.parse(entry?.data['date']); var day = dayFormatter.format(date); List hours = entry?.data['hours']; if (col == 0) { return Center(child: Text('$day')); } else if (col > 0 && col < 25) { return Center(child: Text(hours[col - 1].toString())); } else { return Center(child: Text('')); } }, legendBuilder: (_) => Center(child: Text("Date".toUpperCase())), colHeaderBuilder: (_, index) { var cellText = ""; if (index == 0) { cellText = "Day"; } else if (index == 1) { cellText = "12 AM"; } else if (index > 1 && index < 25) { var meridien = "AM"; var hour = index - 1; if (index > 12) { meridien = "PM"; } if (index > 13) { hour = hour - 12; } cellText = "${hour.toString()} $meridien"; } else if (index == 25) { cellText = "Notes"; } else if (index == 26) { cellText = "Comments"; } return Center(child: Text(cellText.toUpperCase())); }, rowHeaderBuilder: (_, index) { var date = DateTime.parse(entries![index].data["date"]); var formattedDate = dateFormatter.format(date); return Center(child: Text(formattedDate)); }, ); } }