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/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/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/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; List _deviceList = []; 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(), 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( deviceList: _deviceList, showLoading: checkPendingRequest, borderColor: AppColor.black20, buttonColor: AppColor.white936, multiSelection: true, onAssetRemove: (itemId) { _deviceList.removeWhere((asset) => asset.id?.toInt() == itemId); setState(() {}); }, onMultiAssetPick: (assetList) { _deviceList.addAll(assetList); final seenIds = {}; _deviceList = _deviceList.where((item) => seenIds.add(item.id)).toList(); setState(() {}); }, ); } bool checkPendingRequest = false; 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, // ); } } }