114 lines
4.6 KiB
Dart
114 lines
4.6 KiB
Dart
import 'package:drift/drift.dart' hide Column;
|
|
import 'package:flutter/material.dart';
|
|
import 'package:sendtrain/database.dart';
|
|
import '../widgets/session_card.dart';
|
|
|
|
class SessionsScreen extends StatelessWidget {
|
|
final AppDatabase database = AppDatabase();
|
|
SessionsScreen({super.key});
|
|
|
|
Future<List<Session>> getSessions() async {
|
|
// database.managers.sessions.filter((session) => session.status(SessionStatus.pending));
|
|
return await database.managers.sessions.get();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return FutureBuilder<List<Session>>(
|
|
future: getSessions(),
|
|
builder: (context, snapshot) {
|
|
if (snapshot.hasData) {
|
|
final sessions = snapshot.data!;
|
|
final pending = sessions.where((session) => session.status == SessionStatus.completed || session.status == SessionStatus.missed);
|
|
final upcoming = sessions.firstWhere((session) => session.status == SessionStatus.pending);
|
|
final current = sessions.firstWhere((session) => session.status == SessionStatus.started);
|
|
|
|
List<Widget> previousSessions = List.generate(pending.length, (i) => SessionCard(type: 1, session: pending.elementAt(i)));
|
|
Widget upcomingSession =
|
|
SessionCard(session: upcoming);
|
|
Widget currentSession = SessionCard(session: current);
|
|
|
|
database.close();
|
|
|
|
return Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: <Widget>[
|
|
const Padding(
|
|
padding: EdgeInsets.fromLTRB(15, 5, 0, 0),
|
|
child: Text(
|
|
style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold),
|
|
'Current:')),
|
|
currentSession,
|
|
const Padding(
|
|
padding: EdgeInsets.fromLTRB(15, 30, 0, 0),
|
|
child: Text(
|
|
style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold),
|
|
'Upcoming:')),
|
|
upcomingSession,
|
|
const Padding(
|
|
padding: EdgeInsets.fromLTRB(15, 30, 0, 0),
|
|
child: Text(
|
|
style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold),
|
|
'Previous:')),
|
|
SizedBox(
|
|
width: double.infinity,
|
|
height: 160,
|
|
child: GridView.count(
|
|
padding: const EdgeInsets.fromLTRB(15, 10, 0, 0),
|
|
scrollDirection: Axis.horizontal,
|
|
crossAxisSpacing: 5,
|
|
mainAxisSpacing: 5,
|
|
crossAxisCount: 1,
|
|
children: previousSessions))
|
|
],
|
|
);
|
|
} else {
|
|
return const CircularProgressIndicator();
|
|
}
|
|
});
|
|
|
|
// List<Widget> previousSessions = List.generate(
|
|
// 10, (i) => SessionCard(state: 1, type: 1, session: _sessions.first));
|
|
// Widget upcomingSession = SessionCard(state: 2, session: _sessions.first);
|
|
// Widget currentSession = SessionCard(session: _sessions.first);
|
|
|
|
// return Column(
|
|
// crossAxisAlignment: CrossAxisAlignment.start,
|
|
// children: <Widget>[
|
|
// const Padding(
|
|
// padding: EdgeInsets.fromLTRB(15, 5, 0, 0),
|
|
// child: Text(
|
|
// style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold),
|
|
// 'Current:')),
|
|
// currentSession,
|
|
// const Padding(
|
|
// padding: EdgeInsets.fromLTRB(15, 30, 0, 0),
|
|
// child: Text(
|
|
// style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold),
|
|
// 'Upcoming:')),
|
|
// upcomingSession,
|
|
// const Padding(
|
|
// padding: EdgeInsets.fromLTRB(15, 30, 0, 0),
|
|
// child: Text(
|
|
// style: TextStyle(fontSize: 25, fontWeight: FontWeight.bold),
|
|
// 'Previous:')),
|
|
// SizedBox(
|
|
// width: double.infinity,
|
|
// height: 160,
|
|
// child: GridView.count(
|
|
// padding: const EdgeInsets.fromLTRB(15, 10, 0, 0),
|
|
// scrollDirection: Axis.horizontal,
|
|
// crossAxisSpacing: 5,
|
|
// mainAxisSpacing: 5,
|
|
// crossAxisCount: 1,
|
|
// children: previousSessions))
|
|
// // Flexible(
|
|
// // child: ListView(
|
|
// // scrollDirection: Axis.vertical,
|
|
// // children: previousSessions,
|
|
// // )),
|
|
// ],
|
|
// );
|
|
}
|
|
}
|