comment.dart 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  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. @override
  77. void dispose() {
  78. super.dispose();
  79. }
  80. FocusNode blankNode = FocusNode();
  81. @override
  82. Widget build(BuildContext context) {
  83. double width = MediaQuery.of(context).size.width;
  84. return
  85. // Center(child:new Text("个人中心"));
  86. ChangeNotifierProvider<UserProvider>(
  87. create: (_) => provider,
  88. child: Scaffold(
  89. appBar: MyAppBar(
  90. centerTitle: "评价本次服务",
  91. ),
  92. body: GestureDetector(
  93. onTap: () {
  94. // 点击空白页面关闭键盘
  95. FocusScope.of(context).requestFocus(blankNode);
  96. },
  97. child: Consumer<UserProvider>(
  98. builder: (_, provider, __) {
  99. return Stack(
  100. children: <Widget>[
  101. ListView(
  102. padding: EdgeInsets.all(0.0),
  103. children: <Widget>[
  104. _hasData
  105. ? Container(
  106. // height: 20,
  107. padding: EdgeInsets.only(
  108. bottom: ScreenUtil().setWidth(20),
  109. top: ScreenUtil().setWidth(10)),
  110. child: Row(
  111. crossAxisAlignment: CrossAxisAlignment.start,
  112. children: <Widget>[
  113. Expanded(
  114. child: GestureDetector(
  115. onTap: () {
  116. NavigatorUtils.push(
  117. context, WodeRouter.orderDetail);
  118. },
  119. child: Row(
  120. crossAxisAlignment:
  121. CrossAxisAlignment.start,
  122. children: <Widget>[
  123. Container(
  124. margin: EdgeInsets.only(
  125. left: ScreenUtil().setWidth(15),
  126. right: ScreenUtil().setWidth(10),
  127. top: ScreenUtil().setWidth(5),
  128. ),
  129. decoration: BoxDecoration(
  130. borderRadius:
  131. BorderRadius.circular(
  132. ScreenUtil()
  133. .setWidth(25)),
  134. ),
  135. child: LoadNetworkImage(
  136. detailObj.avatarUrl,
  137. width: ScreenUtil().setWidth(43),
  138. height: ScreenUtil().setWidth(43),
  139. // alignment: Alignment.centerLeft,
  140. ),
  141. ),
  142. Expanded(
  143. child: Container(
  144. padding: EdgeInsets.only(
  145. right: ScreenUtil()
  146. .setWidth(15)),
  147. child: Column(
  148. crossAxisAlignment: CrossAxisAlignment.start,
  149. children: <Widget>[
  150. Container(
  151. child: Row(
  152. mainAxisAlignment:
  153. MainAxisAlignment
  154. .spaceBetween,
  155. children: <Widget>[
  156. Row(
  157. crossAxisAlignment:
  158. CrossAxisAlignment
  159. .center,
  160. children: <Widget>[
  161. Text(
  162. detailObj.name,
  163. style: TextStyle(
  164. color: Color(
  165. 0xff333333),
  166. fontSize:
  167. ScreenUtil()
  168. .setSp(
  169. 18)),
  170. textAlign:
  171. TextAlign
  172. .start,
  173. ),
  174. Container(
  175. padding: EdgeInsets
  176. .only(
  177. left: 5),
  178. child: Text(
  179. detailObj
  180. .brandName ??
  181. '',
  182. style: TextStyle(
  183. color: Color(
  184. 0xff666666),
  185. fontSize: ScreenUtil()
  186. .setSp(
  187. 14)),
  188. textAlign:
  189. TextAlign
  190. .start,
  191. ),
  192. )
  193. ],
  194. ),
  195. ],
  196. ),
  197. ),
  198. Container(
  199. child: Text(
  200. detailObj.expression ??
  201. '',
  202. style: TextStyle(
  203. color:
  204. Color(0xff999999),
  205. fontSize: ScreenUtil()
  206. .setSp(14),
  207. ),
  208. textAlign:
  209. TextAlign.start,
  210. ),
  211. ),
  212. ],
  213. ),
  214. ),
  215. )
  216. ],
  217. ),
  218. ),
  219. ),
  220. ],
  221. ),
  222. )
  223. : Center(
  224. child: null,
  225. ),
  226. Container(
  227. color: Color(0xffFAF7FA),
  228. height: ScreenUtil().setWidth(5),
  229. ),
  230. Container(
  231. padding: EdgeInsets.only(
  232. left: ScreenUtil().setWidth(15),
  233. top: ScreenUtil().setWidth(15),
  234. bottom: ScreenUtil().setWidth(15)),
  235. child: Text(
  236. '您对专家的服务满意吗?',
  237. style: TextStyle(
  238. color: Color(0xff333333),
  239. fontSize: ScreenUtil().setSp(16)),
  240. textAlign: TextAlign.start,
  241. ),
  242. ),
  243. Container(
  244. child: Column(
  245. children: <Widget>[
  246. StarItem(
  247. title: "技术水平:",
  248. starRating: serviceLevel,
  249. onRatingChanged: (res) {
  250. serviceLevel = res;
  251. setState(() {});
  252. },
  253. ),
  254. StarItem(
  255. title: "服务态度:",
  256. starRating: serviceTaidu,
  257. onRatingChanged: (res) {
  258. serviceTaidu = res;
  259. setState(() {});
  260. },
  261. ),
  262. StarItem(
  263. title: "响应速度:",
  264. starRating: speed,
  265. onRatingChanged: (res) {
  266. speed = res;
  267. setState(() {});
  268. },
  269. ),
  270. SizedBox(
  271. height: 8,
  272. ),
  273. Container(
  274. decoration: BoxDecoration(
  275. border: Border.all(
  276. width: 0.5, color: Color(0xffcccccc)),
  277. color: Colors.white,
  278. ),
  279. margin: EdgeInsets.only(
  280. left: ScreenUtil().setWidth(15),
  281. right: ScreenUtil().setWidth(15)),
  282. child: Padding(
  283. padding: const EdgeInsets.only(
  284. top: 5,
  285. left: 15.0,
  286. right: 15.0,
  287. bottom: 8.0),
  288. child: TextField(
  289. maxLength: 200,
  290. maxLines: 5,
  291. autofocus: false,
  292. controller: _controller,
  293. decoration: InputDecoration(
  294. hintText: "您的满意是对专家最大的支持和鼓励",
  295. border: InputBorder.none,
  296. hintStyle: TextStyles.textGray14,
  297. ),
  298. ),
  299. ),
  300. ),
  301. ],
  302. ),
  303. ),
  304. Row(
  305. mainAxisAlignment: MainAxisAlignment.center,
  306. children: <Widget>[
  307. Container(
  308. height: ScreenUtil().setWidth(44),
  309. decoration: BoxDecoration(
  310. borderRadius: BorderRadius.circular(
  311. ScreenUtil().setWidth(22)),
  312. gradient: const LinearGradient(
  313. colors: [Color(0xFF00D9FF), Color(0xFF0287FF)]),
  314. ),
  315. margin: EdgeInsets.only(top:ScreenUtil().setWidth(20),bottom:ScreenUtil().setWidth(20)),
  316. width: width * 0.9,
  317. child: FlatButton(
  318. child: Text("提交"),
  319. textColor: Colors.white,
  320. onPressed: () {
  321. // NavigatorUtils.push(context, WodeRouter.orderPage);
  322. submitComment();
  323. },
  324. ),
  325. ),
  326. ],
  327. ),
  328. ],
  329. ),
  330. ],
  331. );
  332. },
  333. ),
  334. ),
  335. ),
  336. );
  337. }
  338. @override
  339. bool get wantKeepAlive => true;
  340. }