bao_price.dart 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:liftmanager/internal/account/provider/user_provider.dart';
  4. import 'package:liftmanager/net/api_service.dart';
  5. import 'package:liftmanager/utils/image_utils.dart';
  6. import 'package:liftmanager/widgets/app_bar.dart';
  7. import 'package:provider/provider.dart';
  8. import 'package:liftmanager/widgets/bbs_content.dart';
  9. import 'package:flutter_screenutil/flutter_screenutil.dart';
  10. import 'package:liftmanager/widgets/text_field_item.dart';
  11. import 'package:liftmanager/utils/toast.dart';
  12. import 'package:liftmanager/internal/wode/wode_router.dart';
  13. import 'package:liftmanager/routers/fluro_navigator.dart';
  14. import 'package:liftmanager/utils/theme_utils.dart';
  15. class BaoPrice extends StatefulWidget {
  16. BaoPrice(this.id,this.travelCost,this.serviceCost);
  17. final String id;
  18. final String travelCost;
  19. final String serviceCost;
  20. @override
  21. State<StatefulWidget> createState() {
  22. return BaoPriceState();
  23. }
  24. }
  25. class BaoPriceState extends State<BaoPrice> with AutomaticKeepAliveClientMixin {
  26. UserProvider provider = UserProvider();
  27. TextEditingController _techService = TextEditingController();
  28. TextEditingController _travelExpenses = TextEditingController();
  29. double totalPrice = 0.0;
  30. int indexNow = 0;
  31. @override
  32. void initState() {
  33. super.initState();
  34. _techService.text = widget.serviceCost;
  35. _travelExpenses.text = widget.travelCost;
  36. changeTotalPrice();
  37. }
  38. changeTotalPrice() {
  39. print(_techService.text);
  40. print(_travelExpenses.text);
  41. double techPrice = _techService.text == '' ? 0 : double.parse(_techService.text);
  42. double travelPrice =
  43. _travelExpenses.text == '' ? 0 : double.parse(_travelExpenses.text);
  44. totalPrice = techPrice + travelPrice;
  45. setState(() {});
  46. }
  47. void confirmQuote() {
  48. if (_techService.text == '') {
  49. toasts("请输入技术服务费");
  50. return;
  51. }
  52. if (_travelExpenses.text == '') {
  53. toasts("请输入差旅费");
  54. return;
  55. }
  56. NewApiService().quote({
  57. "id": widget.id,
  58. "travelCost": double.parse(_travelExpenses.text),
  59. "serviceCost": double.parse(_techService.text)
  60. }, onSuccess: (res) {
  61. toasts("报价成功");
  62. NavigatorUtils.push(context, "${WodeRouter.orderPageMaster}?checkType=0");
  63. setState(() {});
  64. }, onError: (code, msg) {
  65. toasts(msg);
  66. });
  67. }
  68. @override
  69. void dispose() {
  70. // provider.dispose();
  71. super.dispose();
  72. }
  73. FocusNode blankNode = FocusNode();
  74. @override
  75. Widget build(BuildContext context) {
  76. double width = MediaQuery.of(context).size.width;
  77. return
  78. // Center(child:new Text("个人中心"));
  79. ChangeNotifierProvider<UserProvider>(
  80. create: (_) => provider,
  81. child: Scaffold(
  82. resizeToAvoidBottomPadding: false,
  83. appBar: MyAppBar(
  84. centerTitle: "订单报价",
  85. ),
  86. body: GestureDetector(
  87. onTap: () {
  88. // 点击空白页面关闭键盘
  89. FocusScope.of(context).requestFocus(blankNode);
  90. },
  91. child: Consumer<UserProvider>(
  92. builder: (_, provider, __) {
  93. return Stack(
  94. children: <Widget>[
  95. ListView(padding: EdgeInsets.all(0.0), children: <Widget>[
  96. TextFieldItem(
  97. title: "技术服务费",
  98. content: "",
  99. controller: _techService,
  100. keyboardType: TextInputType.numberWithOptions(decimal: true),
  101. hintText: "请输入金额",
  102. onChanged: (res) {
  103. changeTotalPrice();
  104. },
  105. ),
  106. TextFieldItem(
  107. title: "差旅费",
  108. content: "",
  109. keyboardType: TextInputType.numberWithOptions(decimal: true),
  110. controller: _travelExpenses,
  111. hintText: "请输入金额",
  112. onChanged: (res) {
  113. changeTotalPrice();
  114. },
  115. ),
  116. Heng(
  117. left: "报价合计",
  118. right: "¥" + totalPrice.toStringAsFixed(2).toString(),
  119. leftColor: 0xff666666,
  120. rightColor: 0xffff0000,
  121. ),
  122. SizedBox(height: ScreenUtil().setWidth(80))
  123. ]),
  124. Positioned(
  125. bottom: 0,
  126. left: 0,
  127. child: Container(
  128. width: width,
  129. padding: EdgeInsets.only(
  130. top: ScreenUtil().setWidth(15),
  131. bottom: ScreenUtil().setWidth(15),
  132. left: ScreenUtil().setWidth(25),
  133. right: ScreenUtil().setWidth(25),
  134. ),
  135. color: ThemeUtils.getDialogTextFieldColor(context),
  136. child: Container(
  137. height: ScreenUtil().setWidth(44),
  138. decoration: BoxDecoration(
  139. borderRadius: BorderRadius.circular(
  140. ScreenUtil().setWidth(22),
  141. ),
  142. gradient: const LinearGradient(
  143. colors: [Color(0xFF00D9FF), Color(0xFF0287FF)]),
  144. ),
  145. child: FlatButton(
  146. // padding: EdgeInsets.all(15.0),
  147. child: Text("确认报价"),
  148. textColor: Colors.white,
  149. // textColor: Colors.white,
  150. onPressed: () {
  151. confirmQuote();
  152. },
  153. ),
  154. ),
  155. ),
  156. )
  157. ],
  158. );
  159. },
  160. ),
  161. ),
  162. ),
  163. );
  164. }
  165. @override
  166. bool get wantKeepAlive => true;
  167. }