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? data; @override State createState() => _SessionCreatorState(); } class _SessionCreatorState extends State { final GlobalKey _formKey = GlobalKey(); final Map sessionCreateController = { 'name': TextEditingController(), 'content': TextEditingController(), 'status': TextEditingController(), 'date': TextEditingController(), 'address': TextEditingController(), 'media': TextEditingController(), }; Future createSession(context) { return SessionsDao(Provider.of(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(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: [ 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 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'))) ]), ], ))); } }