bao_price.dart 5.7 KB

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