comment.dart 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:liftmanager/common/common.dart';
  4. import 'package:liftmanager/internal/account/account_router.dart';
  5. import 'package:liftmanager/internal/account/model/user_info_entity.dart';
  6. import 'package:liftmanager/internal/account/provider/user_provider.dart';
  7. import 'package:liftmanager/internal/wode/wode_router.dart';
  8. import 'package:liftmanager/net/api_service.dart';
  9. import 'package:liftmanager/routers/fluro_navigator.dart';
  10. import 'package:liftmanager/utils/image_utils.dart';
  11. import 'package:liftmanager/widgets/app_bar.dart';
  12. import 'package:liftmanager/widgets/click_item.dart';
  13. import 'package:liftmanager/widgets/load_image.dart';
  14. import 'package:liftmanager/widgets/my_button.dart';
  15. import 'package:provider/provider.dart';
  16. import 'package:liftmanager/widgets/bbs_content.dart';
  17. import 'package:liftmanager/internal/bbs/bbs_router.dart';
  18. import 'package:flutter_screenutil/flutter_screenutil.dart';
  19. import 'package:liftmanager/widgets/star_item.dart';
  20. import 'package:liftmanager/res/resources.dart';
  21. import 'package:liftmanager/internal/bbs/model/liftcase_model.dart';
  22. import 'package:liftmanager/utils/toast.dart';
  23. import 'package:liftmanager/utils/time_format.dart';
  24. import 'package:liftmanager/utils/url.dart';
  25. import 'package:liftmanager/common/common.dart';
  26. import 'package:flustars/flustars.dart' as flustars;
  27. class Comment extends StatefulWidget {
  28. Comment(this.id);
  29. final String id;
  30. @override
  31. State<StatefulWidget> createState() {
  32. return CommentState();
  33. }
  34. }
  35. class CommentState extends State<Comment> with AutomaticKeepAliveClientMixin {
  36. UserProvider provider = UserProvider();
  37. bool _hasData = false;
  38. LiftCasesDetailModel detailObj;
  39. void getBrandDetail() {
  40. NewApiService().getLiftcaseDetail(widget.id, onSuccess: (res) {
  41. detailObj = res;
  42. _hasData = true;
  43. setState(() {});
  44. }, onError: (code, msg) {
  45. toasts(msg);
  46. });
  47. }
  48. void submitComment() {
  49. showLoading(context);
  50. NewApiService().submitComments({
  51. "attitude": serviceTaidu,
  52. "comment": _controller.text,
  53. "lifeCaseId": widget.id,
  54. "responseSpeed": speed,
  55. "tech": serviceLevel,
  56. "expertId": detailObj.chargerId,
  57. "userId":int.parse(flustars.SpUtil.getString(Constant.userId)),
  58. }, onSuccess: (res) {
  59. dismissLoading(context);
  60. toasts("评论成功");
  61. NavigatorUtils.push(context, "${WodeRouter.orderPage}?checkType=0");
  62. }, onError: (code, msg) {
  63. dismissLoading(context);
  64. toasts(msg);
  65. });
  66. }
  67. double serviceLevel = 5;
  68. double serviceTaidu = 5;
  69. double speed = 5;
  70. TextEditingController _controller = TextEditingController();
  71. @override
  72. void initState() {
  73. getBrandDetail();
  74. super.initState();
  75. }
  76. FocusNode blankNode = FocusNode();
  77. @override
  78. Widget build(BuildContext context) {
  79. double width = MediaQuery.of(context).size.width;
  80. return
  81. // Center(child:new Text("个人中心"));
  82. ChangeNotifierProvider<UserProvider>(
  83. create: (_) => provider,
  84. child: Scaffold(
  85. appBar: MyAppBar(
  86. centerTitle: "评价本次服务",
  87. ),
  88. body: GestureDetector(
  89. onTap: () {
  90. // 点击空白页面关闭键盘
  91. FocusScope.of(context).requestFocus(blankNode);
  92. },
  93. child: Consumer<UserProvider>(
  94. builder: (_, provider, __) {
  95. return Stack(
  96. children: <Widget>[
  97. ListView(
  98. padding: EdgeInsets.all(0.0),
  99. children: <Widget>[
  100. _hasData
  101. ? Container(
  102. // height: 20,
  103. padding: EdgeInsets.only(
  104. bottom: ScreenUtil().setWidth(20),
  105. top: ScreenUtil().setWidth(10)),
  106. child: Row(
  107. crossAxisAlignment: CrossAxisAlignment.start,
  108. children: <Widget>[
  109. Expanded(
  110. child: GestureDetector(
  111. onTap: () {
  112. NavigatorUtils.push(
  113. context, WodeRouter.orderDetail);
  114. },
  115. child: Row(
  116. crossAxisAlignment:
  117. CrossAxisAlignment.start,
  118. children: <Widget>[
  119. Container(
  120. margin: EdgeInsets.only(
  121. left: ScreenUtil().setWidth(15),
  122. right: ScreenUtil().setWidth(10),
  123. top: ScreenUtil().setWidth(5),
  124. ),
  125. decoration: BoxDecoration(
  126. borderRadius:
  127. BorderRadius.circular(
  128. ScreenUtil()
  129. .setWidth(25)),
  130. ),
  131. child: LoadNetworkImage(
  132. detailObj.avatarUrl,
  133. width: ScreenUtil().setWidth(43),
  134. height: ScreenUtil().setWidth(43),
  135. // alignment: Alignment.centerLeft,
  136. ),
  137. ),
  138. Expanded(
  139. child: Container(
  140. padding: EdgeInsets.only(
  141. right: ScreenUtil()
  142. .setWidth(15)),
  143. child: Column(
  144. crossAxisAlignment: CrossAxisAlignment.start,
  145. children: <Widget>[
  146. Container(
  147. child: Row(
  148. mainAxisAlignment:
  149. MainAxisAlignment
  150. .spaceBetween,
  151. children: <Widget>[
  152. Row(
  153. crossAxisAlignment:
  154. CrossAxisAlignment
  155. .center,
  156. children: <Widget>[
  157. Text(
  158. detailObj.name,
  159. style: TextStyle(
  160. color: Color(
  161. 0xff333333),
  162. fontSize:
  163. ScreenUtil()
  164. .setSp(
  165. 18)),
  166. textAlign:
  167. TextAlign
  168. .start,
  169. ),
  170. Container(
  171. padding: EdgeInsets
  172. .only(
  173. left: 5),
  174. child: Text(
  175. detailObj
  176. .brandName ??
  177. '',
  178. style: TextStyle(
  179. color: Color(
  180. 0xff666666),
  181. fontSize: ScreenUtil()
  182. .setSp(
  183. 14)),
  184. textAlign:
  185. TextAlign
  186. .start,
  187. ),
  188. )
  189. ],
  190. ),
  191. ],
  192. ),
  193. ),
  194. Container(
  195. child: Text(
  196. detailObj.expression ??
  197. '',
  198. style: TextStyle(
  199. color:
  200. Color(0xff999999),
  201. fontSize: ScreenUtil()
  202. .setSp(14),
  203. ),
  204. textAlign:
  205. TextAlign.start,
  206. ),
  207. ),
  208. ],
  209. ),
  210. ),
  211. )
  212. ],
  213. ),
  214. ),
  215. ),
  216. ],
  217. ),
  218. )
  219. : Center(
  220. child: null,
  221. ),
  222. Container(
  223. color: Color(0xffFAF7FA),
  224. height: ScreenUtil().setWidth(5),
  225. ),
  226. Container(
  227. padding: EdgeInsets.only(
  228. left: ScreenUtil().setWidth(15),
  229. top: ScreenUtil().setWidth(15),
  230. bottom: ScreenUtil().setWidth(15)),
  231. child: Text(
  232. '您对专家的服务满意吗?',
  233. style: TextStyle(
  234. color: Color(0xff333333),
  235. fontSize: ScreenUtil().setSp(16)),
  236. textAlign: TextAlign.start,
  237. ),
  238. ),
  239. Container(
  240. child: Column(
  241. children: <Widget>[
  242. StarItem(
  243. title: "技术水平:",
  244. starRating: serviceLevel,
  245. onRatingChanged: (res) {
  246. serviceLevel = res;
  247. setState(() {});
  248. },
  249. ),
  250. StarItem(
  251. title: "服务态度:",
  252. starRating: serviceTaidu,
  253. onRatingChanged: (res) {
  254. serviceTaidu = res;
  255. setState(() {});
  256. },
  257. ),
  258. StarItem(
  259. title: "响应速度:",
  260. starRating: speed,
  261. onRatingChanged: (res) {
  262. speed = res;
  263. setState(() {});
  264. },
  265. ),
  266. SizedBox(
  267. height: 8,
  268. ),
  269. Container(
  270. decoration: BoxDecoration(
  271. border: Border.all(
  272. width: 0.5, color: Color(0xffcccccc)),
  273. color: Colors.white,
  274. ),
  275. margin: EdgeInsets.only(
  276. left: ScreenUtil().setWidth(15),
  277. right: ScreenUtil().setWidth(15)),
  278. child: Padding(
  279. padding: const EdgeInsets.only(
  280. top: 5,
  281. left: 15.0,
  282. right: 15.0,
  283. bottom: 8.0),
  284. child: TextField(
  285. maxLength: 200,
  286. maxLines: 5,
  287. autofocus: false,
  288. controller: _controller,
  289. decoration: InputDecoration(
  290. hintText: "您的满意是对专家最大的支持和鼓励",
  291. border: InputBorder.none,
  292. hintStyle: TextStyles.textGray14,
  293. ),
  294. ),
  295. ),
  296. ),
  297. ],
  298. ),
  299. ),
  300. Row(
  301. mainAxisAlignment: MainAxisAlignment.center,
  302. children: <Widget>[
  303. Container(
  304. height: ScreenUtil().setWidth(44),
  305. decoration: BoxDecoration(
  306. borderRadius: BorderRadius.circular(
  307. ScreenUtil().setWidth(22)),
  308. gradient: const LinearGradient(
  309. colors: [Color(0xFF00D9FF), Color(0xFF0287FF)]),
  310. ),
  311. margin: EdgeInsets.only(top:ScreenUtil().setWidth(20),bottom:ScreenUtil().setWidth(20)),
  312. width: width * 0.9,
  313. child: FlatButton(
  314. child: Text("提交"),
  315. textColor: Colors.white,
  316. onPressed: () {
  317. // NavigatorUtils.push(context, WodeRouter.orderPage);
  318. submitComment();
  319. },
  320. ),
  321. ),
  322. ],
  323. ),
  324. ],
  325. ),
  326. ],
  327. );
  328. },
  329. ),
  330. ),
  331. ),
  332. );
  333. }
  334. @override
  335. bool get wantKeepAlive => true;
  336. }