133 lines
4.2 KiB
Dart
133 lines
4.2 KiB
Dart
import 'dart:math' as math;
|
|
import 'package:ltx_flutter/appwrite/auth_api.dart';
|
|
import 'package:ltx_flutter/appwrite/database_api.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:provider/provider.dart';
|
|
import 'package:appwrite/models.dart';
|
|
import 'package:intl/intl.dart';
|
|
|
|
class TodayPage extends StatefulWidget {
|
|
const TodayPage({Key? key}) : super(key: key);
|
|
|
|
@override
|
|
_TodayPageState createState() => _TodayPageState();
|
|
}
|
|
|
|
class _TodayPageState extends State<TodayPage> {
|
|
final database = DatabaseAPI();
|
|
AuthStatus authStatus = AuthStatus.uninitialized;
|
|
DateTime? date;
|
|
Document? entry;
|
|
|
|
var hours = List<int>.generate(24, (i) => i).map((e) {
|
|
var meridien = "AM";
|
|
var hour = 12;
|
|
if (e > 12) {
|
|
hour = e - 12;
|
|
} else if (e > 0) {
|
|
hour = e;
|
|
}
|
|
if (e > 11) {
|
|
meridien = "PM";
|
|
}
|
|
return {
|
|
"string": "${hour.toString()} $meridien",
|
|
"index": e.toInt(),
|
|
};
|
|
}).toList();
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
final AuthAPI appwrite = context.read<AuthAPI>();
|
|
authStatus = appwrite.status;
|
|
loadEntry();
|
|
}
|
|
|
|
loadEntry() async {
|
|
try {
|
|
final value = await database.getEntries(limit: 1, dateISO: "");
|
|
setState(() {
|
|
entry = value.documents[0];
|
|
});
|
|
} catch (e) {
|
|
print(e);
|
|
}
|
|
}
|
|
|
|
String formatDate({String format = "", String? dateISO}) {
|
|
final DateFormat dateFormatter = DateFormat(format);
|
|
final date = dateISO!.isEmpty ? DateTime.now() : DateTime.parse(dateISO);
|
|
return dateFormatter.format(date);
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Center(
|
|
child: entry == null
|
|
? CircularProgressIndicator()
|
|
: Column(
|
|
children: [
|
|
Text(
|
|
style: TextStyle(
|
|
fontSize: 40,
|
|
),
|
|
formatDate(
|
|
format: "E, MMM dd, yyyy",
|
|
dateISO: entry?.data['date'],
|
|
),
|
|
),
|
|
Expanded(
|
|
child: ListView(
|
|
children: hours.map(
|
|
(e) {
|
|
int h = e["index"] as int;
|
|
List<dynamic> hoursData = entry!.data['hours'];
|
|
String hourData = (h >= hoursData.length)
|
|
? ""
|
|
: hoursData[h].toString();
|
|
return ListTile(
|
|
leading: Text(e["string"] as String),
|
|
title: Text(hourData),
|
|
);
|
|
},
|
|
).toList()),
|
|
),
|
|
Container(
|
|
padding: EdgeInsets.only(top: 10),
|
|
color: Colors.black,
|
|
child: Row(
|
|
children: List<int>.generate(10, (i) => i).map(
|
|
(e) {
|
|
var generatedColor =
|
|
math.Random().nextInt(Colors.primaries.length);
|
|
return Expanded(
|
|
child: Padding(
|
|
padding: const EdgeInsets.all(2.0),
|
|
child: FilledButton(
|
|
style: ButtonStyle(
|
|
shape: MaterialStateProperty.all<
|
|
RoundedRectangleBorder>(
|
|
RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.zero,
|
|
side: BorderSide(color: Colors.white))),
|
|
backgroundColor: MaterialStateProperty.all(
|
|
Colors.primaries[generatedColor]),
|
|
),
|
|
onLongPress: () =>
|
|
print("Long pressed ${e.toString()}"),
|
|
onPressed: () => print("Tapped ${e.toString()}"),
|
|
child: Text(e.toString()),
|
|
),
|
|
),
|
|
);
|
|
},
|
|
).toList(),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|