import 'dart:convert'; import 'dart:io'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/dashboard_latest/dashboard_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/device/asset.dart'; import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/service_request/pending_service_request_model.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart'; import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart'; import 'package:test_sa/providers/service_request_providers/last_situation_provider.dart'; import 'package:test_sa/service_request_latest/views/components/action_button/footer_action_button.dart'; import 'package:test_sa/views/pages/user/requests/pending_requests_screen.dart'; import 'package:test_sa/views/widgets/bottom_sheets/pending_request_bottom_sheet.dart'; import 'package:test_sa/views/widgets/equipment/asset_picker.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; import '../../../../../../new_views/common_widgets/default_app_bar.dart'; class CreateTaskView extends StatefulWidget { static const String id = "/create-task"; const CreateTaskView({Key? key}) : super(key: key); @override _CreateTaskViewState createState() => _CreateTaskViewState(); } class _CreateTaskViewState extends State with TickerProviderStateMixin { final List _deviceImages = []; final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); //TODO need to replace with model attribute Asset? _device; PendingAssetServiceRequest? pendingAssetServiceRequest; bool _isLocalUrl(String url) { if (url.isEmpty != false) return false; return url.startsWith("/") || url.startsWith("file://") || url.substring(1).startsWith(':\\'); } @override Widget build(BuildContext context) { return Scaffold( key: _scaffoldKey, appBar: DefaultAppBar(title: context.translation.createTaskRequest), body: Consumer(builder: (context, serviceRequestProvider, child) { return SafeArea( child: Form( key: _formKey, child: Column( children: [ SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ scanAssetButton(), if (pendingAssetServiceRequest != null && pendingAssetServiceRequest!.details!.isNotEmpty) ...[ 8.height, Row( children: [ const Icon(Icons.warning, color: Color(0xffEE404C), size: 14), 8.width, Text( "This asset already have ${pendingAssetServiceRequest!.details!.length} request pending", style: const TextStyle(fontSize: 12, fontWeight: FontWeight.w500, color: Color(0xff7D859A), decoration: TextDecoration.underline), ).expanded, ], ).onPress(() { showPendingRequests(); }), ], 16.height, //TODO replace with provided lookup.. SingleItemDropDownMenu( context: context, height: 56.toScreenHeight, title: context.translation.taskType, showShadow: false, backgroundColor: AppColor.neutral100, showAsBottomSheet: true, initialValue: null, onSelect: (status) { if (status != null) { setState(() {}); } }, ), 12.height, AppTextFormField( initialValue: '', labelText: context.translation.technicalComment, backgroundColor: AppColor.neutral100, showShadow: false, labelStyle: AppTextStyles.textFieldLabelStyle, alignLabelWithHint: true, textInputType: TextInputType.multiline, onChange: (value) { //save value to model attribute.. }, ), 23.height, MultiFilesPicker( label: context.translation.attachImage, files: _deviceImages, buttonColor: AppColor.black10, onlyImages: true, buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120), ), ], ).toShadowContainer(context).paddingAll(16), ).expanded, FooterActionButton.footerContainer( child: AppFilledButton( buttonColor: AppColor.primary10, label: context.translation.submitRequest, onPressed: checkPendingRequest ? null : _submit, // buttonColor: AppColor.primary10, ), ), ], ), ), ); }), ); } Widget scanAssetButton() { return AssetPicker( device: _device, showLoading: checkPendingRequest, borderColor: AppColor.black20, buttonColor: AppColor.white936, onPick: (asset) async { pendingAssetServiceRequest = null; _device = asset; // _serviceRequest.device = asset; await checkAssetForPendingServiceRequest(asset.id!.toInt()); if (pendingAssetServiceRequest != null && pendingAssetServiceRequest!.details!.isNotEmpty) { showPendingRequestBottomSheet(); } }, ); } bool checkPendingRequest = false; void showPendingRequests() { Navigator.of(context).push(MaterialPageRoute(builder: (_) => PendingServiceRequestScreen(pendingAssetServiceRequest!))); } void showPendingRequestBottomSheet() async { bool view = (await showModalBottomSheet( context: context, isDismissible: false, shape: const RoundedRectangleBorder( borderRadius: BorderRadius.vertical( top: Radius.circular(20), ), ), clipBehavior: Clip.antiAliasWithSaveLayer, builder: (BuildContext context) => PendingRequestBottomSheet(pendingAssetServiceRequest!, _device ?? Asset()), )) as bool; if (view) { showPendingRequests(); } } Future checkAssetForPendingServiceRequest(int assetId) async { checkPendingRequest = true; setState(() {}); pendingAssetServiceRequest = await Provider.of(context, listen: false).checkAssetPendingRequest(assetId); await Future.delayed(const Duration(milliseconds: 250)); checkPendingRequest = false; setState(() {}); } Future _submit() async { if (_formKey.currentState!.validate()) { _formKey.currentState!.save(); // List attachement = []; // for (var item in _deviceImages) { // attachement.add(WorkOrderAttachments(id: 0, name: "${item.path.split("/").last}|${base64Encode(item.readAsBytesSync())}")); // } // int status = 0; // if (status == 200) { // DashBoardProvider dashBoardProvider = Provider.of(context, listen: false); // dashBoardProvider.refreshDashboard(context: context, userType: UsersTypes.nurse); // Navigator.pop(context); // Navigator.pop(context); // } else { // Navigator.pop(context); // } // await _serviceRequestsProvider.createRequest( // context: context, // user: _userProvider.user!, // host: _settingProvider.host!, // serviceRequest: _serviceRequest, // ); } } }