From d2b81bd4a602b62ab810a4bc2e83f30cc70bcaf3 Mon Sep 17 00:00:00 2001 From: fhkhd Date: Tue, 13 Feb 2024 17:17:42 +0330 Subject: [PATCH] Fix some issue --- lib/pages/CyclePages/cycle_add_screen.dart | 531 ++++++++-------- lib/pages/LabelPages/label_add_screen.dart | 570 +++++++++--------- .../PackagePages/package_add_screen.dart | 462 +++++++------- lib/providers/cycles.dart | 3 +- lib/providers/labels.dart | 15 +- .../CycleScreens/Add/add_label_box.dart | 6 + lib/widgets/CycleScreens/Add/save_button.dart | 17 - .../LabelScreens/Add/add_package_box.dart | 6 + lib/widgets/LabelScreens/Add/save_button.dart | 9 +- 9 files changed, 839 insertions(+), 780 deletions(-) diff --git a/lib/pages/CyclePages/cycle_add_screen.dart b/lib/pages/CyclePages/cycle_add_screen.dart index bc9bf78..c328015 100755 --- a/lib/pages/CyclePages/cycle_add_screen.dart +++ b/lib/pages/CyclePages/cycle_add_screen.dart @@ -36,6 +36,7 @@ class _CycleAddScreenState extends State { List labelsCTRL = [TextEditingController()]; int curLabelVal = 1; + @override void initState() { descriptionCTRL.text = ''; @@ -73,276 +74,296 @@ class _CycleAddScreenState extends State { // 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: SafeArea( - child: GestureDetector( - onTap: () { - FocusManager.instance.primaryFocus?.unfocus(); - }, - child: Scaffold( - appBar: AppBar( - titleSpacing: -10, - title: Text('Cycles', style: TextStyle(color: Colors.white,),), - backgroundColor: Colors.black, - leading: IconButton( - icon: Icon( - Icons.keyboard_arrow_left, - color: Colors.white, - size: 35, + return Consumer(builder: (context, cyclesProvider, _) { + return WillPopScope( + onWillPop: () async { + cyclesProvider.resetLoadingButton(); + Navigator.pushReplacementNamed( + context, + Routes.cycleResultScreen, + ); + return true; + }, + child: SafeArea( + child: GestureDetector( + onTap: () { + FocusManager.instance.primaryFocus?.unfocus(); + }, + child: Scaffold( + appBar: AppBar( + titleSpacing: -10, + title: Text( + 'Cycles', + style: TextStyle( + color: Colors.white, + ), + ), + backgroundColor: Colors.black, + leading: IconButton( + icon: Icon( + Icons.keyboard_arrow_left, + color: Colors.white, + size: 35, + ), + onPressed: () { + cyclesProvider.resetLoadingButton(); + Navigator.of(context) + .pushReplacementNamed(Routes.cycleResultScreen); + }, ), - onPressed: () => Navigator.of(context) - .pushReplacementNamed(Routes.cycleResultScreen), ), - ), - body: Consumer( - builder: (ct, connection, _) { - return connection.conStatus != 'offline' - ? isInit - ? Center( - child: CircularProgressIndicator( - color: Colors.black, - ), - ) - : 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, - ), - Row( - children: [ - Flexible( - flex: 8, - child: 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); - }, - ), - ), - Flexible( - flex: 1, - child: InkWell( - onTap: () { - scan().then( - (String result) { - if (result == 'cancel') { - print('cancel'); - } else if (result == 'error') { - print('error'); - } else if (result == 'access') { - print('access'); - } else { - print(result); - striizerIdCTRL.text = result; - } - }, - ); - }, - child: Container( - padding: EdgeInsets.all(8), - decoration: BoxDecoration( - shape: BoxShape.circle, - color: Colors.black, - ), - child: Icon( - Icons.qr_code_scanner, - size: 5 * _deviceBlockSize, - color: Colors.white, - ), - ), - ), - ), - ], - ), - SizedBox( - height: 20, - ), - 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: 30, - ), - CycleAddDatePicker( - dateCTRL: dateCTRL, - deviceBlockSize: _deviceBlockSize, - ), - SizedBox( - height: 20.0, - ), - Container( - margin: EdgeInsets.symmetric(vertical: 10), - child: Text( - 'Labels included', + body: Consumer( + builder: (ct, connection, _) { + return connection.conStatus != 'offline' + ? isInit + ? Center( + child: CircularProgressIndicator( + color: Colors.black, + ), + ) + : Form( + key: _form, + child: Padding( + padding: EdgeInsets.all(20), + child: ListView( + // crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + 'Add a Cycle', style: TextStyle( - color: kPink, - letterSpacing: 2, + fontWeight: FontWeight.w700, + fontSize: 6 * _deviceBlockSize, + letterSpacing: 3, + ), + ), + SizedBox( + height: 20, + ), + Row( + children: [ + Flexible( + flex: 8, + child: 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); + }, + ), + ), + Flexible( + flex: 1, + child: InkWell( + onTap: () { + scan().then( + (String result) { + if (result == 'cancel') { + print('cancel'); + } else if (result == + 'error') { + print('error'); + } else if (result == + 'access') { + print('access'); + } else { + print(result); + striizerIdCTRL.text = + result; + } + }, + ); + }, + child: Container( + padding: EdgeInsets.all(8), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.black, + ), + child: Icon( + Icons.qr_code_scanner, + size: 5 * _deviceBlockSize, + color: Colors.white, + ), + ), + ), + ), + ], + ), + SizedBox( + height: 20, + ), + 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); + }, ), - ), - Consumer( - builder: (ctx, cycleProvider, _) => - ListView.builder( - physics: NeverScrollableScrollPhysics(), - shrinkWrap: true, - itemBuilder: (ctx, index) => AddLabelBox( - text: 'Select Labels included', - iconColor: kPinkSub, - deviceBlockSize: _deviceBlockSize, - values: - cycleProvider.labelValues[index], - vals: cycleProvider.labelVals, - initialLabelValue: - cycleProvider.initialLabelValue, - index: index, - hasRemoveButton: - cycleProvider.labelValues.length > 1 - ? true - : false, + SizedBox( + height: 30, + ), + CycleAddDatePicker( + dateCTRL: dateCTRL, + deviceBlockSize: _deviceBlockSize, + ), + SizedBox( + height: 20.0, + ), + Container( + margin: + EdgeInsets.symmetric(vertical: 10), + child: Text( + 'Labels included', + style: TextStyle( + color: kPink, + letterSpacing: 2, + fontSize: 5 * _deviceBlockSize, + ), ), - itemCount: - cycleProvider.labelValues.length, ), - ), - SizedBox( - height: 30, - ), - TextFormField( - controller: descriptionCTRL, - decoration: InputDecoration( - icon: Icon( - FontAwesomeIcons.alignLeft, - size: 7 * _deviceBlockSize, + Consumer( + builder: (ctx, cycleProvider, _) => + ListView.builder( + physics: NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (ctx, index) => + AddLabelBox( + text: 'Select Labels included', + iconColor: kPinkSub, + deviceBlockSize: _deviceBlockSize, + values: + cycleProvider.labelValues[index], + vals: cycleProvider.labelVals, + initialLabelValue: + cycleProvider.initialLabelValue, + index: index, + hasRemoveButton: + cycleProvider.labelValues.length > + 1 + ? true + : false, + ), + itemCount: + cycleProvider.labelValues.length, ), - labelStyle: TextStyle( - fontWeight: FontWeight.w100, - fontSize: 4 * _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), ), - 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, ), - style: TextStyle( - fontWeight: FontWeight.w700, - fontSize: 5 * _deviceBlockSize, + SizedBox( + height: 70, ), - 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, - ), - ], + CycleAddSaveButton( + form: _form, + labelValues: Provider.of( + context, + listen: false, + ).labelValues, + cycleNumberCTRL: cycleNumberCTRL, + dateValue: dateCTRL.text, + descriptionCTRL: descriptionCTRL, + striizerIdCTRL: striizerIdCTRL, + deviceBlockSize: _deviceBlockSize, + ), + SizedBox( + height: 100, + ), + ], + ), ), - ), - ) - : ConnectionErrorBox(); - }, + ) + : ConnectionErrorBox(); + }, + ), ), ), ), - ), - ); + ); + }); } } diff --git a/lib/pages/LabelPages/label_add_screen.dart b/lib/pages/LabelPages/label_add_screen.dart index 915a3f6..386c77a 100755 --- a/lib/pages/LabelPages/label_add_screen.dart +++ b/lib/pages/LabelPages/label_add_screen.dart @@ -31,11 +31,13 @@ class _LabelAddScreenState extends State { final _form = GlobalKey(); bool isInit = true; + // String? packageId; // String? previousRoute; List labelsCTRL = [TextEditingController()]; int curLabelVal = 1; + @override void initState() { sDateCTRL.text = DateEditor.DateFormat('y-M-d').format(DateTime.now()); @@ -72,291 +74,317 @@ class _LabelAddScreenState extends State { final double _devicewidth = _media.size.width; final double _deviceBlockSize = _devicewidth / 100; // String initialLabelValue; - return WillPopScope( - onWillPop: () async { - Navigator.pushReplacementNamed( - context, - Routes.labelResultScreen, - ); - return true; - }, - child: SafeArea( - child: GestureDetector( - onTap: () { - FocusManager.instance.primaryFocus?.unfocus(); + return Consumer( + builder: (context, labelsProvider, _) { + return WillPopScope( + onWillPop: () async { + labelsProvider.resetLoadingButton(); + Navigator.pushReplacementNamed( + context, + Routes.labelResultScreen, + ); + return true; }, - child: Scaffold( - appBar: AppBar( - titleSpacing: -10, - title: Text('Labels', style: TextStyle(color: Colors.white,),), - backgroundColor: Colors.black, - leading: IconButton( - icon: Icon( - Icons.keyboard_arrow_left, - color: Colors.white, - size: 35, + child: SafeArea( + child: GestureDetector( + onTap: () { + FocusManager.instance.primaryFocus?.unfocus(); + }, + child: Scaffold( + appBar: AppBar( + titleSpacing: -10, + title: Text( + 'Labels', + style: TextStyle( + color: Colors.white, + ), + ), + backgroundColor: Colors.black, + leading: IconButton( + icon: Icon( + Icons.keyboard_arrow_left, + color: Colors.white, + size: 35, + ), + onPressed: () { + labelsProvider.resetLoadingButton(); + Navigator.of(context) + .pushReplacementNamed(Routes.labelResultScreen); + }, + ), ), - onPressed: () => Navigator.of(context) - .pushReplacementNamed(Routes.labelResultScreen), - ), - ), - body: Consumer( - builder: (ct, connection, _) { - return connection.conStatus != 'offline' - ? isInit - ? Center( - child: CircularProgressIndicator( - color: Colors.black, - ), - ) - : Form( - key: _form, - child: Padding( - padding: EdgeInsets.all(20), - child: ListView( - children: [ - Text( - 'Add a Label', - style: TextStyle( - fontWeight: FontWeight.w700, - fontSize: 6 * _deviceBlockSize, - letterSpacing: 3, - ), - ), - SizedBox( - height: 20, - ), - Row( - children: [ - Flexible( - flex: 8, - child: TextFormField( - onChanged: (val) { - setState(() { - lotNumberCTRL.text = val + - ' - ' + - cycleNumberCTRL.text; - }); - }, - validator: (val) { - if (val!.isEmpty) { - return 'Strilizer ID required!'; - } - return null; - }, - controller: striizerIdCTRL, - decoration: InputDecoration( - icon: Icon( - FontAwesomeIcons - .sortNumericDown, - size: 7 * _deviceBlockSize), - isDense: true, - labelText: 'Strilizer ID', - contentPadding: - EdgeInsets.symmetric( - vertical: 2, horizontal: 3), - labelStyle: TextStyle( - fontWeight: FontWeight.w100, - fontSize: 4 * _deviceBlockSize, - ), - ), - style: TextStyle( - fontWeight: FontWeight.w700, - fontSize: 5 * _deviceBlockSize, - ), - keyboardType: - TextInputType.visiblePassword, - textInputAction: TextInputAction.next, - onFieldSubmitted: (_) { - FocusScope.of(context).requestFocus( - _cycleNumberFocusNode); - }, + body: Consumer( + builder: (ct, connection, _) { + return connection.conStatus != 'offline' + ? isInit + ? Center( + child: CircularProgressIndicator( + color: Colors.black, + ), + ) + : Form( + key: _form, + child: Padding( + padding: EdgeInsets.all(20), + child: ListView( + children: [ + Text( + 'Add a Label', + style: TextStyle( + fontWeight: FontWeight.w700, + fontSize: 6 * _deviceBlockSize, + letterSpacing: 3, ), ), - Flexible( - flex: 1, - child: InkWell( - onTap: () { - scan().then( - (String result) { - if (result == 'cancel') { - print('cancel'); - } else if (result == 'error') { - print('error'); - } else if (result == 'access') { - print('access'); - } else { - print(result); - striizerIdCTRL.text = result; + SizedBox( + height: 20, + ), + Row( + children: [ + Flexible( + flex: 8, + child: TextFormField( + onChanged: (val) { + setState(() { + lotNumberCTRL.text = val + + ' - ' + + cycleNumberCTRL.text; + }); + }, + validator: (val) { + if (val!.isEmpty) { + return 'Strilizer ID required!'; } + return null; + }, + controller: striizerIdCTRL, + decoration: InputDecoration( + icon: Icon( + FontAwesomeIcons + .sortNumericDown, + size: 7 * _deviceBlockSize), + isDense: true, + labelText: 'Strilizer ID', + contentPadding: + EdgeInsets.symmetric( + vertical: 2, + horizontal: 3), + labelStyle: TextStyle( + fontWeight: FontWeight.w100, + fontSize: + 4 * _deviceBlockSize, + ), + ), + style: TextStyle( + fontWeight: FontWeight.w700, + fontSize: 5 * _deviceBlockSize, + ), + keyboardType: + TextInputType.visiblePassword, + textInputAction: + TextInputAction.next, + onFieldSubmitted: (_) { + FocusScope.of(context) + .requestFocus( + _cycleNumberFocusNode); }, - ); - }, - child: Container( - padding: EdgeInsets.all(8), - decoration: BoxDecoration( - shape: BoxShape.circle, - color: Colors.black, - ), - child: Icon( - Icons.qr_code_scanner, - size: 5 * _deviceBlockSize, - color: Colors.white, ), ), + Flexible( + flex: 1, + child: InkWell( + onTap: () { + scan().then( + (String result) { + if (result == 'cancel') { + print('cancel'); + } else if (result == + 'error') { + print('error'); + } else if (result == + 'access') { + print('access'); + } else { + print(result); + striizerIdCTRL.text = + result; + } + }, + ); + }, + child: Container( + padding: EdgeInsets.all(8), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.black, + ), + child: Icon( + Icons.qr_code_scanner, + size: 5 * _deviceBlockSize, + color: Colors.white, + ), + ), + ), + ), + ], + ), + SizedBox( + height: 20, + ), + TextFormField( + onChanged: (val) { + setState( + () { + lotNumberCTRL.text = + striizerIdCTRL.text + + ' - ' + + val; + }, + ); + }, + 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.done, + ), + SizedBox( + height: 20, + ), + TextFormField( + readOnly: true, + controller: lotNumberCTRL, + decoration: InputDecoration( + icon: Icon( + FontAwesomeIcons.sortNumericDown, + size: 7 * _deviceBlockSize, + ), + labelStyle: TextStyle( + fontWeight: FontWeight.w100, + fontSize: 4 * _deviceBlockSize, + ), + isDense: true, + labelText: 'Lot Number', + contentPadding: EdgeInsets.symmetric( + vertical: 2, + horizontal: 3, + ), + ), + style: TextStyle( + fontWeight: FontWeight.w700, + fontSize: 5 * _deviceBlockSize, + ), + keyboardType: + TextInputType.visiblePassword, + ), + SizedBox( + height: 20, + ), + Container( + margin: + EdgeInsets.symmetric(vertical: 10), + child: Text( + 'Packages included', + style: TextStyle( + color: kLightBlue, + letterSpacing: 2, + fontSize: 5 * _deviceBlockSize, + ), + ), + ), + Consumer( + builder: (ctx, labelProvider, _) { + return ListView.builder( + physics: + NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (ctx, index) => + AddPackageBox( + text: 'Package ID', + iconColor: kLightBlueSub, + deviceBlockSize: _deviceBlockSize, + values: labelProvider + .packageValues[index], + vals: labelProvider.packageVals, + initialLabelValue: labelProvider + .initialPackageValue, + index: index, + ), + itemCount: labelProvider + .packageValues.length, + ); + }), + SizedBox( + height: 10, + ), + LabelAddDatePicker( + dateCTRL: sDateCTRL, + deviceBlockSize: _deviceBlockSize, + label: 'Sterile Date', + ), + SizedBox( + height: 20, + ), + LabelAddDatePicker( + dateCTRL: eDateCTRL, + deviceBlockSize: _deviceBlockSize, + label: 'Expire Date', + ), + SizedBox( + height: 70, + ), + LabelAddSaveButton( + form: _form, + lotNumberCTRL: lotNumberCTRL, + cycleNumberCTRL: cycleNumberCTRL, + sDateCTRL: sDateCTRL, + packageValue: + Provider.of( + context, + listen: false, + ).packageValues, + eDateCTRL: eDateCTRL, + striizerIdCTRL: striizerIdCTRL, + deviceBlockSize: _deviceBlockSize, + ), + SizedBox( + height: 100, ), ], ), - SizedBox( - height: 20, - ), - TextFormField( - onChanged: (val) { - setState( - () { - lotNumberCTRL.text = - striizerIdCTRL.text + ' - ' + val; - }, - ); - }, - 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.done, - ), - SizedBox( - height: 20, - ), - TextFormField( - readOnly: true, - controller: lotNumberCTRL, - decoration: InputDecoration( - icon: Icon( - FontAwesomeIcons.sortNumericDown, - size: 7 * _deviceBlockSize, - ), - labelStyle: TextStyle( - fontWeight: FontWeight.w100, - fontSize: 4 * _deviceBlockSize, - ), - isDense: true, - labelText: 'Lot Number', - contentPadding: EdgeInsets.symmetric( - vertical: 2, - horizontal: 3, - ), - ), - style: TextStyle( - fontWeight: FontWeight.w700, - fontSize: 5 * _deviceBlockSize, - ), - keyboardType: TextInputType.visiblePassword, - ), - SizedBox( - height: 20, - ), - Container( - margin: EdgeInsets.symmetric(vertical: 10), - child: Text( - 'Packages included', - style: TextStyle( - color: kLightBlue, - letterSpacing: 2, - fontSize: 5 * _deviceBlockSize, - ), - ), - ), - Consumer( - builder: (ctx, labelProvider, _) { - return ListView.builder( - physics: NeverScrollableScrollPhysics(), - shrinkWrap: true, - itemBuilder: (ctx, index) => - AddPackageBox( - text: 'Package ID', - iconColor: kLightBlueSub, - deviceBlockSize: _deviceBlockSize, - values: - labelProvider.packageValues[index], - vals: labelProvider.packageVals, - initialLabelValue: - labelProvider.initialPackageValue, - index: index, - ), - itemCount: - labelProvider.packageValues.length, - ); - }), - SizedBox( - height: 10, - ), - LabelAddDatePicker( - dateCTRL: sDateCTRL, - deviceBlockSize: _deviceBlockSize, - label: 'Sterile Date', - ), - SizedBox( - height: 20, - ), - LabelAddDatePicker( - dateCTRL: eDateCTRL, - deviceBlockSize: _deviceBlockSize, - label: 'Expire Date', - ), - SizedBox( - height: 70, - ), - LabelAddSaveButton( - form: _form, - lotNumberCTRL: lotNumberCTRL, - cycleNumberCTRL: cycleNumberCTRL, - sDateCTRL: sDateCTRL, - packageValue: Provider.of( - context, - listen: false, - ).packageValues, - eDateCTRL: eDateCTRL, - striizerIdCTRL: striizerIdCTRL, - deviceBlockSize: _deviceBlockSize, - ), - SizedBox( - height: 100, - ), - ], - ), - ), - ) - : ConnectionErrorBox(); - }, + ), + ) + : ConnectionErrorBox(); + }, + ), + ), ), ), - ), - ), + ); + }, ); } } diff --git a/lib/pages/PackagePages/package_add_screen.dart b/lib/pages/PackagePages/package_add_screen.dart index a318e7a..10108d7 100755 --- a/lib/pages/PackagePages/package_add_screen.dart +++ b/lib/pages/PackagePages/package_add_screen.dart @@ -21,6 +21,7 @@ class _PackageAddScreenState extends State { final _packageUdiFocusNode = FocusNode(); final _descriptionFocusNode = FocusNode(); TextEditingController descriptionCTRL = new TextEditingController(); + // TextEditingController udiCTRL = new TextEditingController(); TextEditingController nameCTRL = new TextEditingController(); TextEditingController dateCTRL = new TextEditingController(); @@ -30,6 +31,7 @@ class _PackageAddScreenState extends State { PackageFilterObject? filters; int curLabelVal = 1; + @override void initState() { descriptionCTRL.text = ''; @@ -62,234 +64,246 @@ class _PackageAddScreenState extends State { final _media = MediaQuery.of(context); final double _devicewidth = _media.size.width; final double _deviceBlockSize = _devicewidth / 100; - return WillPopScope( - onWillPop: () async { - Navigator.pushReplacementNamed( - context, - Routes.packageResultScreen, - ); - return true; - }, - child: SafeArea( - child: GestureDetector( - onTap: () { - FocusManager.instance.primaryFocus?.unfocus(); + return Consumer( + builder: (context, packageProvider, _) { + return WillPopScope( + onWillPop: () async { + packageProvider.resetLoadingButton(); + Navigator.pushReplacementNamed( + context, + Routes.packageResultScreen, + ); + return true; }, - child: Scaffold( - appBar: AppBar( - titleSpacing: -10, - title: Text( - 'Packages', - style: TextStyle( - color: Colors.white, - ), - ), - backgroundColor: Colors.black, - leading: IconButton( - icon: Icon( - Icons.keyboard_arrow_left, - color: Colors.white, - size: 35, - ), - onPressed: () => Navigator.of(context) - .pushReplacementNamed(Routes.packageResultScreen), - ), - ), - body: Consumer( - builder: (ct, connection, _) { - return connection.conStatus != 'offline' - ? isInit - ? Center( - child: CircularProgressIndicator( - color: Colors.black, - ), - ) - : Form( - key: _form, - child: Padding( - padding: EdgeInsets.all(20), - child: ListView( - children: [ - Text( - 'Add a Package', - style: TextStyle( - fontWeight: FontWeight.w700, - fontSize: 6 * _deviceBlockSize, - letterSpacing: 3, - ), - ), - SizedBox( - height: 20, - ), - TextFormField( - validator: (val) { - if (val!.isEmpty) { - return 'Name required!'; - } - return null; - }, - controller: nameCTRL, - decoration: InputDecoration( - icon: Icon( - FontAwesomeIcons.alignLeft, - size: 7 * _deviceBlockSize, - ), - labelStyle: TextStyle( - fontWeight: FontWeight.w100, - fontSize: 4 * _deviceBlockSize, - ), - isDense: true, - labelText: 'Package Name', - contentPadding: EdgeInsets.symmetric( - vertical: 2, - horizontal: 3, - ), - ), - style: TextStyle( - fontWeight: FontWeight.w700, - fontSize: 5 * _deviceBlockSize, - ), - keyboardType: TextInputType.text, - textInputAction: TextInputAction.next, - onFieldSubmitted: (_) { - FocusScope.of(context) - .requestFocus(_packageUdiFocusNode); - }, - ), - SizedBox( - height: 30, - ), - // TextFormField( - // validator: (val) { - // if (val!.isEmpty) { - // return 'UDI required!'; - // } - // return null; - // }, - // controller: udiCTRL, - // decoration: InputDecoration( - // icon: Icon( - // FontAwesomeIcons.alignLeft, - // size: 7 * _deviceBlockSize, - // ), - // labelStyle: TextStyle( - // fontWeight: FontWeight.w100, - // fontSize: 4 * _deviceBlockSize, - // ), - // isDense: true, - // labelText: 'UDI', - // contentPadding: EdgeInsets.symmetric( - // vertical: 2, horizontal: 3), - // ), - // style: TextStyle( - // fontWeight: FontWeight.w700, - // fontSize: 5 * _deviceBlockSize, - // ), - // focusNode: _packageUdiFocusNode, - // keyboardType: TextInputType.visiblePassword, - // textInputAction: TextInputAction.next, - // onFieldSubmitted: (_) { - // FocusScope.of(context) - // .requestFocus(_descriptionFocusNode); - // }, - // ), - // SizedBox( - // height: 20, - // ), - Container( - margin: EdgeInsets.symmetric(vertical: 5), - child: Text( - 'Items included', - style: TextStyle( - color: kPurple, - letterSpacing: 2, - fontSize: 5 * _deviceBlockSize, - ), - ), - ), - Consumer( - builder: (ctx, packageProvider, _) => - ListView.builder( - physics: NeverScrollableScrollPhysics(), - shrinkWrap: true, - itemBuilder: (ctx, index) => AddItemBox( - text: 'Select Items Included', - iconColor: kPurpleSub, - deviceBlockSize: _deviceBlockSize, - values: - packageProvider.itemValues[index], - vals: packageProvider.itemVals, - initialItemValue: - packageProvider.initialItemValue, - index: index, - // filteredItems: - // packageProvider.filteredItems!, - hasRemoveButton: - packageProvider.itemValues.length > - 1 - ? true - : false, - ), - itemCount: - packageProvider.itemValues.length, - ), - ), - 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: _descriptionFocusNode, - minLines: 1, - maxLines: 5, - ), - SizedBox( - height: 70, - ), - PackageAddSaveButton( - form: _form, - itemValues: Provider.of( - context, - listen: false, - ).itemValues, - nameCTRL: nameCTRL, - // udiCTRL: udiCTRL, - dateValue: dateCTRL.text, - descriptionCTRL: descriptionCTRL, - deviceBlockSize: _deviceBlockSize, - ), - SizedBox( - height: 100, - ), - ], - ), - ), - ) - : ConnectionErrorBox(); + child: SafeArea( + child: GestureDetector( + onTap: () { + FocusManager.instance.primaryFocus?.unfocus(); }, + child: Scaffold( + appBar: AppBar( + titleSpacing: -10, + title: Text( + 'Packages', + style: TextStyle( + color: Colors.white, + ), + ), + backgroundColor: Colors.black, + leading: IconButton( + icon: Icon( + Icons.keyboard_arrow_left, + color: Colors.white, + size: 35, + ), + onPressed: () { + packageProvider.resetLoadingButton(); + Navigator.of(context) + .pushReplacementNamed(Routes.packageResultScreen); + }, + ), + ), + body: Consumer( + builder: (ct, connection, _) { + return connection.conStatus != 'offline' + ? isInit + ? Center( + child: CircularProgressIndicator( + color: Colors.black, + ), + ) + : Form( + key: _form, + child: Padding( + padding: EdgeInsets.all(20), + child: ListView( + children: [ + Text( + 'Add a Package', + style: TextStyle( + fontWeight: FontWeight.w700, + fontSize: 6 * _deviceBlockSize, + letterSpacing: 3, + ), + ), + SizedBox( + height: 20, + ), + TextFormField( + validator: (val) { + if (val!.isEmpty) { + return 'Name required!'; + } + return null; + }, + controller: nameCTRL, + decoration: InputDecoration( + icon: Icon( + FontAwesomeIcons.alignLeft, + size: 7 * _deviceBlockSize, + ), + labelStyle: TextStyle( + fontWeight: FontWeight.w100, + fontSize: 4 * _deviceBlockSize, + ), + isDense: true, + labelText: 'Package Name', + contentPadding: EdgeInsets.symmetric( + vertical: 2, + horizontal: 3, + ), + ), + style: TextStyle( + fontWeight: FontWeight.w700, + fontSize: 5 * _deviceBlockSize, + ), + keyboardType: TextInputType.text, + textInputAction: TextInputAction.next, + onFieldSubmitted: (_) { + FocusScope.of(context).requestFocus( + _packageUdiFocusNode); + }, + ), + SizedBox( + height: 30, + ), + // TextFormField( + // validator: (val) { + // if (val!.isEmpty) { + // return 'UDI required!'; + // } + // return null; + // }, + // controller: udiCTRL, + // decoration: InputDecoration( + // icon: Icon( + // FontAwesomeIcons.alignLeft, + // size: 7 * _deviceBlockSize, + // ), + // labelStyle: TextStyle( + // fontWeight: FontWeight.w100, + // fontSize: 4 * _deviceBlockSize, + // ), + // isDense: true, + // labelText: 'UDI', + // contentPadding: EdgeInsets.symmetric( + // vertical: 2, horizontal: 3), + // ), + // style: TextStyle( + // fontWeight: FontWeight.w700, + // fontSize: 5 * _deviceBlockSize, + // ), + // focusNode: _packageUdiFocusNode, + // keyboardType: TextInputType.visiblePassword, + // textInputAction: TextInputAction.next, + // onFieldSubmitted: (_) { + // FocusScope.of(context) + // .requestFocus(_descriptionFocusNode); + // }, + // ), + // SizedBox( + // height: 20, + // ), + Container( + margin: + EdgeInsets.symmetric(vertical: 5), + child: Text( + 'Items included', + style: TextStyle( + color: kPurple, + letterSpacing: 2, + fontSize: 5 * _deviceBlockSize, + ), + ), + ), + Consumer( + builder: (ctx, packageProvider, _) => + ListView.builder( + physics: + NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemBuilder: (ctx, index) => + AddItemBox( + text: 'Select Items Included', + iconColor: kPurpleSub, + deviceBlockSize: _deviceBlockSize, + values: packageProvider + .itemValues[index], + vals: packageProvider.itemVals, + initialItemValue: packageProvider + .initialItemValue, + index: index, + // filteredItems: + // packageProvider.filteredItems!, + hasRemoveButton: packageProvider + .itemValues.length > + 1 + ? true + : false, + ), + itemCount: + packageProvider.itemValues.length, + ), + ), + 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: _descriptionFocusNode, + minLines: 1, + maxLines: 5, + ), + SizedBox( + height: 70, + ), + PackageAddSaveButton( + form: _form, + itemValues: + Provider.of( + context, + listen: false, + ).itemValues, + nameCTRL: nameCTRL, + // udiCTRL: udiCTRL, + dateValue: dateCTRL.text, + descriptionCTRL: descriptionCTRL, + deviceBlockSize: _deviceBlockSize, + ), + SizedBox( + height: 100, + ), + ], + ), + ), + ) + : ConnectionErrorBox(); + }, + ), + ), ), ), - ), - ), + ); + }, ); } } diff --git a/lib/providers/cycles.dart b/lib/providers/cycles.dart index 8647149..1353859 100755 --- a/lib/providers/cycles.dart +++ b/lib/providers/cycles.dart @@ -110,10 +110,11 @@ class CyclesProvider extends ChangeNotifier { result.add(label['id'].toString()); // print(hospital['name']); } + if (result.isEmpty) result.add(""); labelVals = result; initialLabelValue = labelVals[0]; TextEditingController newLbl = new TextEditingController(); - newLbl.text = initialLabelValue; + newLbl.text = ""; labelValues.add(newLbl); notifyListeners(); return result; diff --git a/lib/providers/labels.dart b/lib/providers/labels.dart index 285f227..9e084df 100755 --- a/lib/providers/labels.dart +++ b/lib/providers/labels.dart @@ -103,16 +103,17 @@ class LabelsProvider extends ChangeNotifier { // "${package['name']} - ${package['package_id'] != null ? package['package_id'] : ''}"); result.add("${package['id'].toString()} - ${package['name'].toString()}"); } + if (result.isEmpty) result.add(""); packageVals = result; initialPackageValue = packageId ?? packageVals[0]; TextEditingController newLbl = new TextEditingController(); - newLbl.text = initialPackageValue; + newLbl.text = ""; packageValues.add(newLbl); notifyListeners(); return result; } - Future createLabelResult(lotNumber, cycleNumber, sterileDate, packages, + Future createLabelResult(lotNumber, cycleNumber, sterileDate, packageId, expireDate, sterilizerId) async { // List> pkgs = []; // for (var package in packages) { @@ -126,7 +127,7 @@ class LabelsProvider extends ChangeNotifier { 'sterilizer_id': sterilizerId, 'cycle_number': cycleNumber, 'lot_number': lotNumber, - 'package_id': packages, + 'package_id': packageId, }, ), headers: { @@ -268,8 +269,8 @@ class LabelsProvider extends ChangeNotifier { LabelResultObject( expireDate: item['expire_date'], id: item['id'].toString(), - package: item['package']['name'], - packageId: item['package']['id'].toString(), + package: item['package'] != null ? item['package']['name'].toString() : ' ', + packageId: item['package'] != null ? item['package']['id'].toString() : ' ', ), ); } @@ -303,8 +304,8 @@ class LabelsProvider extends ChangeNotifier { print(data); result = LabelDetailsObject( id: data['id'].toString(), - package: data['package']['name'] != null ? data['package']['name'] : '', - packageId: data['package']['id'].toString() != 'null' + package: data['package'] != null ? data['package']['name'] : '', + packageId: data['package'] != null ? data['package']['id'].toString() : '', hospitalName: data['user']['medical_center']['name'], diff --git a/lib/widgets/CycleScreens/Add/add_label_box.dart b/lib/widgets/CycleScreens/Add/add_label_box.dart index 41f34f0..c86355a 100755 --- a/lib/widgets/CycleScreens/Add/add_label_box.dart +++ b/lib/widgets/CycleScreens/Add/add_label_box.dart @@ -112,6 +112,12 @@ class AddLabelBox extends StatelessWidget { const EdgeInsets.symmetric(horizontal: 0), child: TextFormField( controller: values, + validator: (val) { + if (val!.isEmpty) { + return 'Label required!'; + } + return null; + }, decoration: InputDecoration( contentPadding: EdgeInsets.only( bottom: 12, diff --git a/lib/widgets/CycleScreens/Add/save_button.dart b/lib/widgets/CycleScreens/Add/save_button.dart index e73e5c3..d9413c5 100755 --- a/lib/widgets/CycleScreens/Add/save_button.dart +++ b/lib/widgets/CycleScreens/Add/save_button.dart @@ -49,23 +49,6 @@ class CycleAddSaveButton extends StatelessWidget { descriptionCTRL.text, striizerIdCTRL.text, ); - showDialog( - context: context, - builder: (ctx) => AlertDialog( - content: Text('Cycle added.'), - actions: [ - TextButton( - onPressed: () { - Navigator.of(ctx).pop(); - }, - child: Text('Ok'), - ) - ], - ), - ).then((_) { - Navigator.of(context) - .pushReplacementNamed(Routes.cycleResultScreen); - }); Navigator.of(context).pushReplacementNamed(Routes.cycleResultScreen); Fluttertoast.showToast( msg: "Cycle added.", diff --git a/lib/widgets/LabelScreens/Add/add_package_box.dart b/lib/widgets/LabelScreens/Add/add_package_box.dart index 946e1cb..a1ee74d 100755 --- a/lib/widgets/LabelScreens/Add/add_package_box.dart +++ b/lib/widgets/LabelScreens/Add/add_package_box.dart @@ -109,6 +109,12 @@ class AddPackageBox extends StatelessWidget { const EdgeInsets.symmetric(horizontal: 0), child: TextFormField( controller: values, + validator: (val) { + if (val!.isEmpty) { + return 'Package required!'; + } + return null; + }, decoration: InputDecoration( contentPadding: EdgeInsets.only( bottom: 12, diff --git a/lib/widgets/LabelScreens/Add/save_button.dart b/lib/widgets/LabelScreens/Add/save_button.dart index 8d9790b..3bb506e 100755 --- a/lib/widgets/LabelScreens/Add/save_button.dart +++ b/lib/widgets/LabelScreens/Add/save_button.dart @@ -39,10 +39,9 @@ class LabelAddSaveButton extends StatelessWidget { if (!_form.currentState!.validate()) { return; } - List packages = []; - for (TextEditingController package in packageValue) { - packages.add(package.text); - } + int packageId; + var pacagecValues = packageValue[0].text.split(" "); + packageId = int.parse(pacagecValues[0]); await Provider.of(context, listen: false) .createLabelResult( lotNumberCTRL.text, @@ -50,7 +49,7 @@ class LabelAddSaveButton extends StatelessWidget { sDateCTRL.text, // sDateValue, // {'id': packageValue[0], 'name': packageValue[1]}, - packages[0], + packageId, eDateCTRL.text, // eDateValue, striizerIdCTRL.text,