SendTrain/lib/widgets/sessions/session_creator.dart
2024-12-27 15:59:09 -05:00

142 lines
6.1 KiB
Dart

import 'dart:async';
import 'package:drift/drift.dart' hide Column;
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:sendtrain/daos/sessions_dao.dart';
import 'package:sendtrain/database/database.dart';
import 'package:sendtrain/widgets/builders/dialogs.dart';
import 'package:sendtrain/widgets/generic/elements/form_search_input.dart';
import 'package:sendtrain/widgets/generic/elements/form_text_input.dart';
class SessionCreator extends StatefulWidget {
const SessionCreator({super.key, this.data, this.session});
final Session? session;
final Map<String, dynamic>? data;
@override
State<SessionCreator> createState() => _SessionCreatorState();
}
class _SessionCreatorState extends State<SessionCreator> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final Map<String, TextEditingController> sessionCreateController = {
'name': TextEditingController(),
'content': TextEditingController(),
'status': TextEditingController(),
'date': TextEditingController(),
'address': TextEditingController(),
'media': TextEditingController(),
};
Future createSession(context) {
return SessionsDao(Provider.of<AppDatabase>(context, listen: false))
.createOrUpdate(SessionsCompanion(
title: Value(sessionCreateController['name']!.text),
content: Value(sessionCreateController['content']!.text),
status: Value(SessionStatus.pending),
date: Value(DateTime.parse(sessionCreateController['date']!.text)),
address: Value(sessionCreateController['address']!.text)));
}
@override
Widget build(BuildContext context) {
sessionCreateController['date']!.text =
DateFormat('yyyy-MM-dd').format(DateTime.now());
AppDatabase db = Provider.of<AppDatabase>(context, listen: false);
return Padding(
padding: EdgeInsets.fromLTRB(15, 0, 15, 15),
child: Form(
key: _formKey,
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Padding(
padding: EdgeInsets.only(top: 10, bottom: 10),
child: Text('Create Session',
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleLarge)),
FormTextInput(
controller: sessionCreateController['name']!,
title: 'Title'),
FormTextInput(
controller: sessionCreateController['content']!,
title: 'Description',
icon: Icon(Icons.description_rounded),
maxLines: 10),
FormTextInput(
controller: sessionCreateController['date']!,
title: 'Date',
icon: Icon(Icons.date_range_rounded),
onTap: () {
showDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime.now(),
lastDate: DateTime.now().add(Duration(days: 365)))
.then((date) {
if (date != null) {
sessionCreateController['date']?.text =
DateFormat('yyyy-MM-dd').format(date);
}
});
}),
// Padding(
// padding: EdgeInsets.only(top: 10, bottom: 10),
// child: TextFormField(
// readOnly: true,
// decoration: InputDecoration(
// prefixIcon: Icon(Icons.image_rounded),
// filled: true,
// border: OutlineInputBorder(
// borderSide: BorderSide.none,
// borderRadius: BorderRadius.circular(12),
// ),
// labelText: 'Select Media (optional)',
// ),
// controller: sessionCreateController['media'],
// onTap: () async {
// FilePickerResult? result = await FilePicker.platform
// .pickFiles(allowMultiple: true);
// if (result != null) {
// List<File> files = result.paths
// .map((path) => File(path!))
// .toList();
// }
// })),
FormSearchInput(
sessionController: sessionCreateController['address']!),
Row(mainAxisAlignment: MainAxisAlignment.end, children: [
Padding(
padding: EdgeInsets.only(top: 10),
child: FilledButton(
onPressed: () => {
if (_formKey.currentState!.validate())
{
createSession(_formKey.currentContext)
.then((id) => {
SessionsDao(db).find(id).then(
(session) => showSessionDialog(
session,
_formKey
.currentContext!)),
Navigator.pop(
_formKey.currentContext!,
'Submit')
})
}
},
child: Text('Submit')))
]),
],
)));
}
}