import 'package:farmer_client/models/addressController.dart'; import 'package:farmer_client/models/entities/CardInfo.dart'; import 'package:farmer_client/widgets/layout/BasicPage.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:get/get.dart'; import 'package:intl/intl.dart'; import '../../models/entities/OrderInfoModel.dart'; import '../../services/orderAPI.dart'; class OrderConfirmation extends BasicPage { TextEditingController _unameController = TextEditingController(); GlobalKey _formKey = GlobalKey(); final selectDate = Rx(DateTime.now()); //选择的时间 final workingArea = Rx(0); AddressController addressController = AddressController.t; final item = Rx(CardInfo());//全部详情 final orderInfo = Rx(OrderInfoModel());//全部详情 @override void beforeShow() { // TODO: implement beforeShow super.beforeShow(); if(Get.arguments['item']!=null){ item.value=Get.arguments['item']; }else{ return; } } Map data = { }; void _orderSubmit (){ if ((_formKey.currentState as FormState).validate()) { data = { 'charges': item.value.price! * workingArea.value, 'price': item.value.price, 'amount': workingArea.value, 'machineryId': item.value.machineryId, 'machineryName': item.value.name, 'machineryType': item.value.typeId, 'typeName': item.value.typeName, 'address': addressController.address.value.address, 'orgId': item.value.orgId, 'appointmentDate': '${DateFormat("yyyy-MM-dd").format(selectDate.value)} 08:00:00', }; generateOrder(data).then((value) { orderInfo.value=OrderInfoModel.fromJson(value); Fluttertoast.showToast( msg: '预约成功' ); Get.to('/OrderInfoCard',arguments: {'id':orderInfo.value.orderId}); }); //验证通过提交数据 } } @override Widget builder(BuildContext context) { naviTitle = '预约'; return Container( height: 700.h, child: Form( key: _formKey, //设置globalKey,用于后面获取FormState autovalidateMode: AutovalidateMode.onUserInteraction, child: Column( children: [ Container( margin: EdgeInsets.fromLTRB(15, 20, 0, 0), alignment: Alignment.topLeft, child: Text( '作业面积/公顷', style: TextStyle( color: Color(0xff222222), fontSize: 17.sp, fontWeight: FontWeight.bold), ), ), TextFormField( // autofocus: true, keyboardType: TextInputType.number, controller: _unameController, decoration: const InputDecoration( isCollapsed: true, contentPadding: EdgeInsets.symmetric(vertical: 8, horizontal: 16), counterText: '', //去掉计数 /// UnderlineInputBorder 只有下边框 默认使用的就是下边框 border: UnderlineInputBorder( borderRadius: BorderRadius.all(Radius.circular(10)), borderSide: BorderSide( color: Color(0x30000000), width: 2.0, ), ), floatingLabelBehavior: FloatingLabelBehavior.never, hintText: "请输入具体面积(公顷)", ), onChanged: (e) { workingArea.value = int.parse(e); }, // 校验用户名 validator: (v) { return v!.trim().isNotEmpty ? null : "作业面积/公顷不能为空"; }, ), Container( margin: EdgeInsets.fromLTRB(15, 20, 0, 0), alignment: Alignment.topLeft, child: Text( '作业时间:', style: TextStyle( color: Color(0xff222222), fontSize: 17.sp, fontWeight: FontWeight.bold), ), ), Container( width: 345.w, padding: EdgeInsets.fromLTRB(0, 15, 0, 15), decoration: const BoxDecoration( border: Border( bottom: BorderSide(width: 1, color: Color(0x20000000) // 0x17000000 )), ), child: Row( children: [ Image( image: AssetImage('images/icons/timeImage.png'), fit: BoxFit.cover, width: 18.w, height: 18.w, ), Padding( padding: EdgeInsets.fromLTRB(10, 0, 0, 0), child: GestureDetector( onTap: () async { var handleChnage = await showDatePicker( context: context, helpText: '请选择作业开始时间', cancelText: '取消', confirmText: '确定', initialDate: selectDate.value == null ? DateTime.now() : selectDate.value, firstDate: DateTime.now(), lastDate: DateTime(2030), ); selectDate.value = handleChnage!; print('${selectDate}+'); }, child: Obx(()=> Text(selectDate == null ? '请选择日期' : '${DateFormat("yyyy-MM-dd").format(selectDate.value)}'), ) ), ) ], )), Container( margin: EdgeInsets.fromLTRB(15, 20, 0, 0), alignment: Alignment.topLeft, child: Text( '作业位置:', style: TextStyle( color: Color(0xff222222), fontSize: 17.sp, fontWeight: FontWeight.bold), ), ), Container( width: 345.w, padding: EdgeInsets.fromLTRB(0, 15, 0, 15), decoration: BoxDecoration( border: Border( bottom: BorderSide(width: 1, color: Color(0x20000000) // 0x17000000 )), ), child: Row( mainAxisAlignment: MainAxisAlignment.start, children: [ Image( image: AssetImage('images/gpsImgae.png'), fit: BoxFit.cover, width: 14.w, height: 17.h, ), Padding( padding: EdgeInsets.fromLTRB(10, 0, 0, 0), child: GestureDetector( onTap: () { Get.toNamed('/addressList', arguments: {'isBack': true}); }, child: Container( width: 290.w, child: Obx(() => Text( addressController.address.value.address .toString(), softWrap: true, maxLines: 1, textAlign: TextAlign.left, overflow: TextOverflow.ellipsis, )), ), )) ], ), ), Spacer(), Container( alignment: Alignment.bottomCenter, child: SizedBox( width: 315.w, height: 49.h, child: ElevatedButton( onPressed: () { _orderSubmit(); }, child: const Text( "确定", style: TextStyle( fontSize: 18, color: Colors.white, fontWeight: FontWeight.bold), ), style: ButtonStyle( elevation: MaterialStateProperty.all(0), backgroundColor: MaterialStateProperty.all(const Color(0xFFFF703B)), shape: MaterialStateProperty.all( const RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(24.4)))), ), ), ), ), Container( margin: EdgeInsets.fromLTRB(0, 30.w, 0, 30.w), alignment: Alignment.bottomCenter, child: SizedBox( width: 315.w, height: 49.h, child: ElevatedButton( onPressed: () { Get.back(); }, child: const Text( "取消", style: TextStyle( fontSize: 18, color: Color(0xFFFF703B), fontWeight: FontWeight.bold), ), style: ButtonStyle( side: MaterialStateProperty.all( BorderSide(width: 1, color: Color(0xFFFF703B))), //边框 elevation: MaterialStateProperty.all(0), backgroundColor: MaterialStateProperty.all(Colors.white), shape: MaterialStateProperty.all( RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(24.4))), ), ), ), ), ), ], ), ), ); } }