import 'package:flutter/material.dart'; import 'package:generp/Notifiers/HomeScreenNotifier.dart'; import 'package:generp/Notifiers/InventoryProvider.dart'; import 'package:generp/Utils/app_colors.dart'; import 'package:provider/provider.dart'; class GeneratorPartDetailsScreen extends StatefulWidget { const GeneratorPartDetailsScreen({super.key}); @override State createState() => _GeneratorPartDetailsScreenState(); } class _GeneratorPartDetailsScreenState extends State { FocusNode descriptionFocusNode =FocusNode(); FocusNode quantityFocusNode = FocusNode(); TextEditingController descriptioncontroller = TextEditingController(); TextEditingController quantitycontroller = TextEditingController(); @override void initState() { // TODO: implement initState super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) { var homeProvider = Provider.of(context,listen: false); initialiseFunction(context, homeProvider); }); } void initialiseFunction(BuildContext context,homeProvider) async { var inventoryProvider = Provider.of(context,listen: false); inventoryProvider.LoadPartDetailsApifunction(homeProvider, context, "", inventoryProvider.partID); } @override Widget build(BuildContext context) { return Consumer( builder: (context,provider,child) { return Scaffold( backgroundColor: AppColors.scaffold_bg_color, appBar: AppBar( automaticallyImplyLeading: false, ), body: Container( child: SingleChildScrollView( child: Column( children: [ Container( margin: EdgeInsets.only(top: 15, bottom: 15), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16), ), child: Column( children: [ Container( padding: EdgeInsets.only( left: 10, right: 10, top: 15, ), child: Row( children: [ Expanded(child: Text("${provider.partData.prodName}")), ], ), ), Container( padding: EdgeInsets.symmetric( horizontal: 10, vertical: 15, ), margin: EdgeInsets.symmetric( horizontal: 10, vertical: 15, ), decoration: BoxDecoration( color: Color(0xFFFFEFEF), borderRadius: BorderRadius.circular(16), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Expanded( child: SizedBox( child: Column( crossAxisAlignment: CrossAxisAlignment.center, children: [ RichText( text: TextSpan( children: [ TextSpan( text: "${provider.partData.remainingQuantity}", style: TextStyle( color: AppColors.semi_black, fontSize: 18, ), ), ], ), ), Text("Remaining Quantity"), ], ), ), ), ], ), ), ], ), ), Text("Product Details"), Container( padding: EdgeInsets.symmetric(horizontal: 10,vertical: 10), margin: EdgeInsets.symmetric(horizontal: 10,vertical: 10), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(16) ), child: Column( children: List.generate(9, (index) { final headings = [ "Product Name", "Product ID", "Project", "Description", "Sub Group", "Vendor 1", "Vendor 2", "Units", "MSL"]; final values = [ provider.partData.prodName, provider.partData.id, provider.partData.project, provider.partData.prodDesc, provider.partData.subGroup, provider.partData.vendor1, provider.partData.vendor2, provider.partData.units, provider.partData.msl, ]; return Container( padding: EdgeInsets.symmetric(horizontal: 10,vertical: 10), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, children: [ Text("${headings[index]}"), Text("${values[index]}"), Divider(thickness: 0.5,color: index==8?Colors.white:Color(0xFFD7D7D7),) ], ), ); },), ), ), SizedBox(height: 150,) ], ), ), ), bottomSheet: Container( padding: EdgeInsets.symmetric(horizontal: 15,vertical: 15), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Expanded(child: InkResponse( onTap: () { _showStockIssueBottomSheet(context,"Recieve"); }, child: Container( height: 45, decoration: BoxDecoration( color: Colors.white, border: Border.all(color: AppColors.app_blue,width: 0.5), borderRadius: BorderRadius.circular(12) ), child: Center(child: Text("Recieve", style: TextStyle( color: AppColors.app_blue ),)),), )), SizedBox(width: 10,), Expanded(child: InkResponse( onTap: () { _showStockIssueBottomSheet(context,"Issue"); }, child: Container( height: 45, decoration: BoxDecoration( color: AppColors.app_blue, border: Border.all(color: AppColors.app_blue,width: 0.5), borderRadius: BorderRadius.circular(12) ), child: Center(child: Text("Issue", style: TextStyle( color: Colors.white ),)),), )), ], ), ), ); } ); } Future _showStockIssueBottomSheet(BuildContext context,type) { return showModalBottomSheet( useSafeArea: true, isDismissible: true, isScrollControlled: true, showDragHandle: true, useRootNavigator: true, enableDrag: true, context: context, builder: (context) { return StatefulBuilder( builder: (context, setState) { return SafeArea( child: Padding( padding: EdgeInsets.only( bottom: MediaQuery.of( context, ).viewInsets.bottom, // This handles keyboard ), child: Container( margin: EdgeInsets.only( bottom: 15, left: 15, right: 15, top: 30, ), child: Consumer2( builder: (context, provider, homeProvider, child) { return SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ Text("Inventory ${type}"), Container( alignment: Alignment.topLeft, child: Text( "Quantity", style: TextStyle( color: AppColors.semi_black, fontSize: 12, ), ), ), Container( height: 48, alignment: Alignment.center, decoration: BoxDecoration( color: AppColors.text_field_color, borderRadius: BorderRadius.circular(20), border: quantityFocusNode.hasFocus ? Border.all( color: AppColors.app_blue, width: 0.5, ) : null, ), // alignment: Alignment.center, margin: EdgeInsets.only(left: 5.0, right: 5.0), child: Padding( padding: const EdgeInsets.fromLTRB( 10.0, 0.0, 15, 0, ), child: TextField( controller: quantitycontroller, keyboardType: TextInputType.text, focusNode: quantityFocusNode, style: TextStyle(fontSize: 14), onChanged: (value) { provider.updateQuantity(quantitycontroller.text); }, onTapOutside: (event) { // Handle onTapOutside FocusScope.of(context).unfocus(); }, decoration: InputDecoration( isDense: true, hintStyle: TextStyle( fontWeight: FontWeight.w400, fontSize: 14, ), //contentPadding: EdgeInsets.fromLTRB(5.0, 10.0, 5.0, 10.0), enabledBorder: InputBorder.none, focusedBorder: InputBorder.none, hintText: 'Enter Quantity', ), ), ), ), Container( alignment: Alignment.topLeft, child: Text( "Description", style: TextStyle( color: AppColors.semi_black, fontSize: 12, ), ), ), Container( height: 180, alignment: Alignment.center, decoration: BoxDecoration( color: AppColors.text_field_color, borderRadius: BorderRadius.circular(20), border: descriptionFocusNode.hasFocus ? Border.all( color: AppColors.app_blue, width: 0.5, ) : null, ), // alignment: Alignment.center, margin: EdgeInsets.only(left: 5.0, right: 5.0), child: Padding( padding: const EdgeInsets.fromLTRB( 10.0, 0.0, 15, 0, ), child: TextField( controller: descriptioncontroller, maxLines: 100, keyboardType: TextInputType.text, focusNode: descriptionFocusNode, style: TextStyle(fontSize: 14), onChanged: (value) { provider.updateQuantity(descriptioncontroller.text); }, onTapOutside: (event) { // Handle onTapOutside FocusScope.of(context).unfocus(); }, decoration: InputDecoration( isDense: true, hintStyle: TextStyle( fontWeight: FontWeight.w400, fontSize: 14, ), //contentPadding: EdgeInsets.fromLTRB(5.0, 10.0, 5.0, 10.0), enabledBorder: InputBorder.none, focusedBorder: InputBorder.none, hintText: 'Enter Description', ), ), ), ), InkWell( onTap: () { print(provider.isButtonEnabled); if(type=="Recieve"){ provider.issuetype = "Recieved"; }else{ provider.issuetype = "Issued"; } provider.StockRecieveIssueAPI(homeProvider,context,quantitycontroller.text,descriptioncontroller.text,provider.partID,provider.issuetype); }, child: Container( alignment: Alignment.center, height: 45, margin: EdgeInsets.only( left: 5.0, right: 5.0, top: 5.0, bottom: 5.0, ), decoration: BoxDecoration( color: provider.isButtonEnabled?AppColors.app_blue:AppColors.button_disabled, //1487C9 borderRadius: BorderRadius.circular(30.0), ), child: Center( child: Text( "Submit", textAlign: TextAlign.center, style: TextStyle(color: Colors.white), ), ), ), ), ], ), ); }, ), ), ), ); }, ); }, ); } }