import 'package:ltx_flutter/appwrite/categories_api.dart'; import 'package:ltx_flutter/appwrite/database_api.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:intl/intl.dart'; import 'package:appwrite/models.dart'; import 'package:timezone/timezone.dart' as tz; import 'package:timezone/data/latest.dart' as tz; import 'package:ltx_flutter/pages/today_page.dart'; import 'package:ltx_flutter/helpers.dart'; class InfinityView extends StatefulWidget { const InfinityView({ super.key, }); @override State createState() => _InfinityViewState(); } class _InfinityViewState extends State { DateTime _date = DateTime.now(); late DatabaseAPI database; late CategoriesAPI categories; late List entries = []; @override void didChangeDependencies() { super.didChangeDependencies(); database = context.watch(); categories = context.watch(); entries = database.entries; } @override Widget build(BuildContext context) { return SingleChildScrollView( child: Container( height: MediaQuery.of(context).size.height, child: GridView.builder( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 24), padding: EdgeInsets.all(2), itemBuilder: (context, index) { int entryIndex = (-1 + (index / 24)).toInt(); if (index < 24) { // Build the top row return Text(""); } else if (entryIndex < entries.length) { Document entry = entries[entryIndex]; if (index % 24 == 0) { // First column, show date return Text( formatDate( dateISO: (entry.data['date']).toString(), format: "MM/dd"), ); } else { int hourIndex = (index % 24) - 1; num? hour; try { hour = entry.data['hours'][hourIndex]; } catch (e) { hour = null; } String tooltip; Color fgColor; Color bgColor; try { Category category = categories.lookUp(hour.toString()); tooltip = category.name!; fgColor = category.foregroundColor; bgColor = category.backgroundColor; } catch (e) { tooltip = ""; fgColor = Colors.white; bgColor = Colors.black; } return SizedBox( width: 50, height: 50, child: Tooltip( message: tooltip, child: Container( color: bgColor, child: Center( child: Text( style: TextStyle(fontSize: 10, color: bgColor), hour.toString())), ), ), ); } } }), ), ); } }