143 lines
6.2 KiB
Dart
143 lines
6.2 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';
|
|
import 'package:sendtrain/widgets/sessions/session_view.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) => showGenericDialog(
|
|
SessionView(session: session),
|
|
_formKey
|
|
.currentContext!)),
|
|
Navigator.pop(
|
|
_formKey.currentContext!,
|
|
'Submit')
|
|
})
|
|
}
|
|
},
|
|
child: Text('Submit')))
|
|
]),
|
|
],
|
|
)));
|
|
}
|
|
}
|