import 'package:flutter/material.dart'; import 'package:flutter_datetime_picker/flutter_datetime_picker.dart'; import 'package:intl/intl.dart'; import 'package:flutter_colorpicker/flutter_colorpicker.dart'; import 'User.dart' as User; import 'Data.dart'; import 'package:flutter_switch/flutter_switch.dart'; import 'DateTimeRangeCustom.dart'; DateFormat dateFormat = DateFormat("yyyy-MM-dd HH:mm:ss"); DateFormat durationFormat = DateFormat("HH:mm:ss"); class NewProject extends StatefulWidget { const NewProject({Key? key}) : super(key: key); @override _NewProjectState createState() => _NewProjectState(); } List getCategoryNames() { List _cats = []; User.categories.forEach((element) { String name = element.name; _cats.add(name); }); return _cats; } bool multiLine = true; String selectedCat = User.categories[0].name; class _NewProjectState extends State { TextEditingController nameController = TextEditingController(); bool productive = true; Color pickerColor = Colors.blue; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('New Project')), body: Container( height: MediaQuery.of(context).size.height, child: Column( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ SingleChildScrollView( child: Padding( padding: EdgeInsets.fromLTRB(20, 50, 20, 50), child: Column( children: [ Container( padding: EdgeInsets.all(0), child: Text('Project Name')), Container( padding: EdgeInsets.all(10), child: TextField( controller: nameController, decoration: InputDecoration( hintText: 'ex: Cool science project, Build a new game etc...', border: OutlineInputBorder()), ), ), Divider(), Column(children: [ Container( padding: EdgeInsets.all(0), child: Text('Related Category')), Container( margin: EdgeInsets.all(10), padding: EdgeInsets.symmetric( horizontal: 12, vertical: 1), decoration: BoxDecoration( color: Colors.white10, borderRadius: BorderRadius.circular(12), border: Border.all( color: Colors.grey, width: 2)), child: DropdownButton( dropdownColor: Colors.black, iconSize: 30, elevation: 10, borderRadius: BorderRadius.circular(10), value: selectedCat, isExpanded: true, items: getCategoryNames() .map>( (String value) { return DropdownMenuItem( value: value, child: Text(value), ); }).toList(), onChanged: (String? _value) { setState(() { selectedCat = _value!; }); })), Divider(), Container( padding: EdgeInsets.all(10), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text('This project is', style: TextStyle(fontSize: 18)), FlutterSwitch( width: 130, height: 35.0, valueFontSize: 15.0, toggleSize: 25.0, toggleColor: Colors.white70, activeTextColor: Colors.white, inactiveTextColor: Colors.white, value: multiLine, borderRadius: 30.0, showOnOff: true, activeText: 'Multi step', inactiveText: 'Single step', activeColor: Colors.deepOrange, activeIcon: Icon(Icons.linear_scale, color: Colors.orange), inactiveIcon: Icon(Icons.check, color: Colors.green), inactiveColor: Colors.green, onToggle: (val) { setState(() { multiLine = val; print( "Multi=Step : $multiLine"); }); }, ) ])), ]), ], ))), Container( padding: EdgeInsets.symmetric(vertical: 10, horizontal: 20), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Expanded( flex: 5, child: Container( padding: EdgeInsets.symmetric( horizontal: 10, vertical: 0), child: ElevatedButton( style: ElevatedButton.styleFrom( primary: Colors.red, shape: StadiumBorder()), onPressed: () { setState(() { Navigator.pop(context); }); }, child: Text('Cancel', style: TextStyle(fontSize: 20))))), Expanded( flex: 6, child: Container( padding: EdgeInsets.symmetric( horizontal: 10, vertical: 0), child: ElevatedButton( style: ElevatedButton.styleFrom( primary: Colors.green, shape: StadiumBorder()), onPressed: () { // add_action(); if (nameController.text.length > 3) { Navigator.of(context).push( MaterialPageRoute( builder: (context) => NewProject2( projectName: nameController.text, ))); } else { showAlertDialog(context, 'Really?', 'Enter a valid name for this project!'); } }, child: Text('Next', style: TextStyle(fontSize: 20))))), ], )) ]))); } void pickColor(BuildContext context) => showDialog( context: context, builder: (context) => AlertDialog( title: Text('Pick Color for Category'), content: Column(mainAxisSize: MainAxisSize.min, children: [ MaterialPicker( pickerColor: pickerColor, onColorChanged: (color) { setState(() { pickerColor = color; }); }, enableLabel: false, portraitOnly: true, ), TextButton( child: Text('Select', style: TextStyle(fontSize: 20)), onPressed: () => Navigator.of(context).pop(), ) ]), )); void add_action() async { String catName = nameController.value.text; if (catName.length < 2) { showAlertDialog(context, 'Category needs a name', 'Please enter a name for this category'); return; } var hex = '#${pickerColor.value.toRadixString(16)}'; await User.UserOperations.addCategory(catName, hex, productive); Navigator.of(context).popUntil((route) { return route.isFirst; }); } } String _printDuration(Duration duration) { String twoDigits(int n) => n.toString().padLeft(2, "0"); String twoDigitMinutes = twoDigits(duration.inMinutes.remainder(60)); String twoDigitSeconds = twoDigits(duration.inSeconds.remainder(60)); return "${twoDigits(duration.inHours)}:$twoDigitMinutes:$twoDigitSeconds"; } showAlertDialog(BuildContext context, String title, String message) { // set up the button Widget okButton = TextButton( child: Text("OK"), onPressed: () { Navigator.of(context).pop(); }, ); // set up the AlertDialog AlertDialog alert = AlertDialog( title: Text(title), content: Text(message), actions: [ okButton, ], ); // show the dialog showDialog( context: context, builder: (BuildContext context) { return alert; }, ); } class NewProject2 extends StatefulWidget { NewProject2({Key? key, this.projectName}) : super(key: key); late String? projectName; @override State createState() => _NewProject2State(pName: projectName); } class _NewProject2State extends State { int etaHours = 1; DateTime deadline = DateTime.now().add(Duration(days:7)); late String? projectName; _NewProject2State({String? pName}) { projectName = pName; } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text(projectName ?? 'Error')), body: Container( height: MediaQuery.of(context).size.height, child: Column( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ SingleChildScrollView( child: Container( padding: EdgeInsets.fromLTRB(20, 50, 20, 50), child: (multiLine) ? Column( children: [ Column( children: [Text("eeeeeeee")], ) ], ) : Column( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.center, children: [ Container( padding: EdgeInsets.all(10), child: Text( "Estimated Time to reach target")), InkWell( onTap: () { showDurationSelector(context,selectedHour: etaHours, onChange: (newVal){ etaHours = newVal.inHours; setState(() { }); print("Selected $newVal"); }); }, child: Container( decoration: BoxDecoration( color: Colors.white10, borderRadius: BorderRadius.circular(30), ), child: Padding( padding: const EdgeInsets.symmetric( horizontal: 100, vertical: 10), child: Text("$etaHours Hours"), ), ), ), SizedBox( height: 20, ), Container( padding: EdgeInsets.all(8), child: Text("Deadline")), InkWell( onTap: () { DatePicker.showDatePicker( context, showTitleActions: true, minTime: DateTime.now(), theme: DatePickerTheme(backgroundColor: Colors.white), onChanged: (date) { // print('change $date'); }, onConfirm: (date) { setState(() { if(deadline.isAfter(DateTime.now())){ deadline=date; }else{ showAlertDialog(context, 'Come on!', 'Deadline was passed?'); } }); }, currentTime: deadline, locale: LocaleType.en); setState(() { }); }, child: Container( decoration: BoxDecoration( color: Colors.white10, borderRadius: BorderRadius.circular(30), ), child: Padding( padding: const EdgeInsets.symmetric( horizontal: 100, vertical: 10), child: Text(DateFormat("MMMM dd yyyy").format(deadline)), ), ), ), ], ))), Container( padding: EdgeInsets.symmetric(vertical: 10, horizontal: 20), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Expanded( flex: 5, child: Container( padding: EdgeInsets.symmetric( horizontal: 10, vertical: 0), child: ElevatedButton( style: ElevatedButton.styleFrom( primary: Colors.red, shape: StadiumBorder()), onPressed: () { setState(() { Navigator.pop(context); }); }, child: Text('Back', style: TextStyle(fontSize: 20))))), Expanded( flex: 6, child: Container( padding: EdgeInsets.symmetric( horizontal: 10, vertical: 0), child: ElevatedButton( style: ElevatedButton.styleFrom( primary: Colors.green, shape: StadiumBorder()), onPressed: () {}, child: Text('Next', style: TextStyle(fontSize: 20))))), ], )) ]))); } }