import 'package:cssd/config/routes.dart'; import 'package:cssd/models/cycles_models.dart'; import 'package:cssd/providers/connectivity.dart'; import 'package:cssd/providers/cycles.dart'; import 'package:cssd/widgets/CycleScreens/Add/add_label_box.dart'; import 'package:cssd/widgets/CycleScreens/Add/date_picker.dart'; import 'package:cssd/widgets/CycleScreens/Add/save_button.dart'; import 'package:cssd/widgets/Global/internet_error.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; import 'package:flutter/cupertino.dart'; class CycleAddScreen extends StatefulWidget { // static const route = '/CycleAddScreen'; @override _CycleAddScreenState createState() => _CycleAddScreenState(); } class _CycleAddScreenState extends State { final _cycleNumberFocusNode = FocusNode(); final _descriptionFocosNode = FocusNode(); TextEditingController descriptionCTRL = new TextEditingController(); TextEditingController cycleNumberCTRL = new TextEditingController(); TextEditingController striizerIdCTRL = new TextEditingController(); TextEditingController dateCTRL = new TextEditingController(); // String initialLabelValue = ''; DateTime dateTimeFrom; // String dateValue; final _form = GlobalKey(); // List labelVals = []; // List labelValues = []; bool isInit = true; CycleFilterObject filters; List labelsCTRL = [TextEditingController()]; int curLabelVal = 1; @override void initState() { descriptionCTRL.text = ''; cycleNumberCTRL.text = ''; dateCTRL.text = DateFormat('y-M-d').format(DateTime.now()); striizerIdCTRL.text = ''; // dateValue = DateFormat('y-M-d').format(DateTime.now()); super.initState(); } @override void didChangeDependencies() async { if (isInit) { // var _id = ModalRoute.of(context).settings.arguments; var cycleProviderObject = Provider.of(context); cycleProviderObject.resetLabelVals(); cycleProviderObject.getLabelFilters().then( (result) { setState( () { // labelValues = // filters.hospital == '' ? labelVals[0] : filters.hospital; isInit = false; }, ); }, ); } super.didChangeDependencies(); } @override Widget build(BuildContext context) { final _media = MediaQuery.of(context); // final double _pixelRatio = (_media.size.height / _media.size.width * 7 / 5); final double _devicewidth = _media.size.width; final double _deviceBlockSize = _devicewidth / 100; return WillPopScope( onWillPop: () async { Navigator.pushReplacementNamed( context, Routes.cycleResultScreen, ); return true; }, child: Scaffold( appBar: AppBar( titleSpacing: -10, title: Text('Cycles'), leading: IconButton( icon: Icon( Icons.keyboard_arrow_left, size: 35, ), onPressed: () => Navigator.of(context) .pushReplacementNamed(Routes.cycleResultScreen), ), ), body: Consumer(builder: (ct, connection, _) { return connection.conStatus != 'offline' ? isInit ? Center( child: CircularProgressIndicator(), ) : Form( key: _form, child: Padding( padding: EdgeInsets.all(20), child: ListView( // crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'ADD A CYCLE', style: TextStyle( fontWeight: FontWeight.w700, fontSize: 6 * _deviceBlockSize, letterSpacing: 3, ), ), SizedBox( height: 20, ), TextFormField( validator: (val) { if (val.isEmpty) { return 'Strilizer ID required!'; } return null; }, controller: striizerIdCTRL, decoration: InputDecoration( icon: Icon( FontAwesomeIcons.sortNumericDown, size: 7 * _deviceBlockSize, ), labelStyle: TextStyle( fontWeight: FontWeight.w100, fontSize: 4 * _deviceBlockSize, ), isDense: true, labelText: 'Strilizer ID', contentPadding: EdgeInsets.symmetric( vertical: 2, horizontal: 3), ), style: TextStyle( fontWeight: FontWeight.w700, fontSize: 5 * _deviceBlockSize, ), keyboardType: TextInputType.visiblePassword, textInputAction: TextInputAction.next, onFieldSubmitted: (_) { FocusScope.of(context) .requestFocus(_cycleNumberFocusNode); }, ), SizedBox( height: 30, ), TextFormField( validator: (val) { if (val.isEmpty) { return 'Cycle number required!'; } return null; }, controller: cycleNumberCTRL, decoration: InputDecoration( icon: Icon( FontAwesomeIcons.sortNumericDown, size: 7 * _deviceBlockSize, ), labelStyle: TextStyle( fontWeight: FontWeight.w100, fontSize: 4 * _deviceBlockSize, ), isDense: true, labelText: 'Cycle Number', contentPadding: EdgeInsets.symmetric( vertical: 2, horizontal: 3), ), style: TextStyle( fontWeight: FontWeight.w700, fontSize: 5 * _deviceBlockSize, ), focusNode: _cycleNumberFocusNode, keyboardType: TextInputType.number, textInputAction: TextInputAction.next, onFieldSubmitted: (_) { FocusScope.of(context) .requestFocus(_descriptionFocosNode); }, ), SizedBox( height: 20, ), Container( margin: EdgeInsets.symmetric(vertical: 10), child: Text( 'LABELS INCLUDED', style: TextStyle( color: Colors.deepOrange, letterSpacing: 2, fontSize: 5 * _deviceBlockSize, ), ), ), Consumer( builder: (ctx, cycleProvider, _) => ListView.builder( physics: NeverScrollableScrollPhysics(), shrinkWrap: true, itemBuilder: (ctx, index) => CycleAddLabelBox( deviceBlockSize: _deviceBlockSize, labelValues: cycleProvider.labelValues[index], labelVals: cycleProvider.labelVals, initialLabelValue: cycleProvider.initialLabelValue, index: index, ), itemCount: cycleProvider.labelValues.length, ), ), CycleAddDatePicker( dateCTRL: dateCTRL, deviceBlockSize: _deviceBlockSize), SizedBox( height: 30, ), TextFormField( controller: descriptionCTRL, decoration: InputDecoration( icon: Icon( FontAwesomeIcons.alignLeft, size: 7 * _deviceBlockSize, ), labelStyle: TextStyle( fontWeight: FontWeight.w100, fontSize: 4 * _deviceBlockSize, ), isDense: true, labelText: 'Description', contentPadding: EdgeInsets.symmetric( vertical: 2, horizontal: 3), ), style: TextStyle( fontWeight: FontWeight.w700, fontSize: 5 * _deviceBlockSize, ), keyboardType: TextInputType.multiline, focusNode: _descriptionFocosNode, minLines: 1, maxLines: 5, ), SizedBox( height: 70, ), CycleAddSaveButton( form: _form, labelValues: Provider.of(context, listen: false) .labelValues, cycleNumberCTRL: cycleNumberCTRL, dateValue: dateCTRL.text, descriptionCTRL: descriptionCTRL, striizerIdCTRL: striizerIdCTRL, deviceBlockSize: _deviceBlockSize, ), SizedBox( height: 100, ), // DropDownBox(values: ['Washer ID']), ], ), ), ) : ConnectionErrorBox(); }), ), ); } }