notice_list.dart 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. import 'package:flutter/material.dart';
  2. import 'package:liftmanager/internal/means/means_router.dart';
  3. import 'package:liftmanager/res/gaps.dart';
  4. import 'package:liftmanager/net/api_service.dart';
  5. import 'package:liftmanager/utils/toast.dart';
  6. import 'package:liftmanager/widgets/app_bar.dart';
  7. import 'package:liftmanager/internal/search/search_router.dart';
  8. import 'package:liftmanager/widgets/app_search_bar.dart';
  9. import 'package:liftmanager/res/resources.dart';
  10. import 'package:liftmanager/routers/fluro_navigator.dart';
  11. import 'package:liftmanager/widgets/load_image.dart';
  12. import 'package:liftmanager/internal/bbs/bbs_router.dart';
  13. import 'package:liftmanager/internal/means/page/means_pdf.dart';
  14. import 'package:liftmanager/res/resources.dart';
  15. import 'dart:convert';
  16. import 'dart:async';
  17. import 'dart:io';
  18. import 'package:flutter/foundation.dart';
  19. import 'package:path_provider/path_provider.dart';
  20. import 'package:flutter_screenutil/flutter_screenutil.dart';
  21. import 'package:liftmanager/mvp/base_page_state.dart';
  22. import 'package:liftmanager/internal/wode/presenter/notice_list_presenter.dart';
  23. import 'package:liftmanager/internal/search/presenter/base_list_provider.dart';
  24. import 'package:liftmanager/internal/wode/model/notice_model.dart';
  25. import 'package:liftmanager/widgets/state_layout.dart';
  26. import 'package:provider/provider.dart';
  27. import 'package:liftmanager/utils/time_format.dart';
  28. import 'package:liftmanager/utils/log_util.dart';
  29. import 'package:liftmanager/widgets/my_refresh_list.dart';
  30. import 'dart:math';
  31. import 'package:liftmanager/utils/fast_notification.dart';
  32. class NoticeList extends StatefulWidget {
  33. // QuestionList(this.index);
  34. // final String index;
  35. @override
  36. NoticeListState createState() => NoticeListState();
  37. }
  38. class NoticeListState extends BasePageState<NoticeList, NoticeListPresenter> {
  39. BaseListProvider<Records> provider = BaseListProvider<Records>();
  40. int _page = 1;
  41. @override
  42. void dispose() {
  43. super.dispose();
  44. }
  45. Future changeNoticeState(idList) async {
  46. await NewApiService().changeNotificaList(idList, onSuccess: (res) {
  47. String initThisNotice = randomInt(1111,9999).toString() + DateTime.now().millisecondsSinceEpoch.toString();
  48. FastNotification.push("initNotice",initThisNotice);
  49. _onRefresh();
  50. setState(() {});
  51. }, onError: (code, msg) {
  52. toasts(msg);
  53. });
  54. }
  55. randomInt(int min, int max) {
  56. return new Random().nextInt(max) % (max - min + 1) + min;
  57. }
  58. @override
  59. void initState() {
  60. super.initState();
  61. _onRefresh();
  62. }
  63. @override
  64. Widget build(BuildContext context) {
  65. double width = MediaQuery.of(context).size.width;
  66. return ChangeNotifierProvider<BaseListProvider<Records>>(
  67. create: (_) => provider,
  68. child: Scaffold(
  69. // resizeToAvoidBottomPadding: true,
  70. appBar: MyAppBar(
  71. centerTitle: "我的消息",
  72. ),
  73. body: Container(
  74. // color: Color(0xFFF1F4FC),
  75. child: Column(
  76. crossAxisAlignment: CrossAxisAlignment.start,
  77. children: <Widget>[
  78. Expanded(
  79. flex: 1,
  80. child: Consumer<BaseListProvider<Records>>(
  81. builder: (_, provider, __) {
  82. return MyListView(
  83. key: Key('notice_list'),
  84. itemCount: provider.list.length,
  85. stateType: provider.stateType,
  86. onRefresh: _onRefresh,
  87. loadMore: _loadMore,
  88. pageSize: 15,
  89. hasMore: provider.hasMore,
  90. itemBuilder: (_, index) {
  91. return InkWell(
  92. child: Container(
  93. padding: EdgeInsets.only(
  94. left: ScreenUtil().setWidth(15),
  95. right: ScreenUtil().setWidth(15),
  96. top: ScreenUtil().setWidth(10),
  97. bottom: ScreenUtil().setWidth(10)),
  98. decoration: BoxDecoration(
  99. border: Border(
  100. bottom: BorderSide(
  101. width: 0.5, color: Colours.line),
  102. ),
  103. ),
  104. child: Row(
  105. crossAxisAlignment: CrossAxisAlignment.center,
  106. children: <Widget>[
  107. Container(
  108. padding: EdgeInsets.only(
  109. right: ScreenUtil().setWidth(10)),
  110. child: ClipRRect(
  111. borderRadius: BorderRadius.circular(
  112. ScreenUtil().setWidth(18)),
  113. child: Container(
  114. width: ScreenUtil().setWidth(36),
  115. height: ScreenUtil().setWidth(36),
  116. decoration: BoxDecoration(
  117. gradient: const LinearGradient(
  118. colors: [
  119. Color(0xFF00D9FF),
  120. Color(0xFF0287FF)
  121. ]),
  122. ),
  123. // padding: EdgeInsets.only(right:10),
  124. child: Icon(
  125. IconData(0xe62f,
  126. // 0xe609,
  127. fontFamily: "myfont"),
  128. size: 24.0,
  129. color: Colors.white,
  130. ),
  131. ),
  132. ),
  133. ),
  134. Expanded(
  135. child: Column(children: <Widget>[
  136. Row(
  137. mainAxisAlignment:
  138. MainAxisAlignment.spaceBetween,
  139. children: <Widget>[
  140. Text(
  141. "系统消息",
  142. textAlign: TextAlign.left,
  143. style: TextStyle(
  144. fontSize: ScreenUtil().setSp(16),
  145. color: Color(0xff000000),
  146. ),
  147. ),
  148. Text(
  149. provider.list[index].createTime ??
  150. "",
  151. textAlign: TextAlign.left,
  152. style: TextStyle(
  153. fontSize: ScreenUtil().setSp(14),
  154. color: Color(0xff999999),
  155. ),
  156. ),
  157. ],
  158. ),
  159. Row(
  160. mainAxisAlignment:
  161. MainAxisAlignment.spaceBetween,
  162. children: <Widget>[
  163. Container(
  164. width: width * 0.7,
  165. child: Text(
  166. provider.list[index].content ??
  167. "",
  168. textAlign: TextAlign.left,
  169. style: TextStyle(
  170. fontSize:
  171. ScreenUtil().setSp(13),
  172. color: Color(0xff999999),
  173. ),
  174. overflow: TextOverflow.ellipsis,
  175. ),
  176. ),
  177. provider.list[index].viewFlag == 0
  178. ? ClipRRect(
  179. borderRadius:
  180. BorderRadius.circular(3),
  181. child: Container(
  182. child: null,
  183. width: 6,
  184. height: 6,
  185. color: Colors.red))
  186. : Container(child: null)
  187. ],
  188. ),
  189. ])),
  190. ]),
  191. ),
  192. onTap: () {
  193. List<String> idList = [];
  194. idList.add(provider.list[index].id);
  195. changeNoticeState(idList);
  196. },
  197. );
  198. },
  199. );
  200. }))
  201. ],
  202. ),
  203. ),
  204. ));
  205. }
  206. Future _onRefresh() async {
  207. _page = 1;
  208. await presenter.getWalletList(_page);
  209. }
  210. Future _loadMore() async {
  211. _page++;
  212. await presenter.getWalletList(_page);
  213. }
  214. @override
  215. NoticeListPresenter createPresenter() {
  216. return NoticeListPresenter();
  217. }
  218. }
  219. class NoticeWidget extends StatelessWidget {
  220. NoticeWidget({Key key, this.list}) : super(key: key);
  221. List<dynamic> list;
  222. List<Widget> listWidget(context) => list.map((i) {
  223. return InkWell(
  224. child: Container(
  225. padding: EdgeInsets.only(
  226. left: ScreenUtil().setWidth(15),
  227. right: ScreenUtil().setWidth(15),
  228. top: ScreenUtil().setWidth(10),
  229. bottom: ScreenUtil().setWidth(10)),
  230. decoration: BoxDecoration(
  231. border: Border(
  232. bottom: BorderSide(width: 0.5, color: Colours.line),
  233. ),
  234. ),
  235. child: Row(
  236. crossAxisAlignment: CrossAxisAlignment.center,
  237. children: <Widget>[
  238. Container(
  239. padding: EdgeInsets.only(right: ScreenUtil().setWidth(10)),
  240. child: ClipRRect(
  241. borderRadius:
  242. BorderRadius.circular(ScreenUtil().setWidth(18)),
  243. child: Container(
  244. width: ScreenUtil().setWidth(36),
  245. height: ScreenUtil().setWidth(36),
  246. decoration: BoxDecoration(
  247. gradient: const LinearGradient(
  248. colors: [Color(0xFF00D9FF), Color(0xFF0287FF)]),
  249. ),
  250. // padding: EdgeInsets.only(right:10),
  251. child: Icon(
  252. IconData(i.type == "system" ? 0xe609 : 0xe62f,
  253. fontFamily: "myfont"),
  254. size: 24.0,
  255. color: Colors.white,
  256. ),
  257. ),
  258. ),
  259. ),
  260. Expanded(
  261. child: Column(children: <Widget>[
  262. Row(
  263. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  264. children: <Widget>[
  265. Text(
  266. i.type != null ? "系统消息" : "客服消息",
  267. textAlign: TextAlign.left,
  268. style: TextStyle(
  269. fontSize: ScreenUtil().setSp(16),
  270. color: Color(0xff000000),
  271. ),
  272. ),
  273. Text(
  274. i.createTime,
  275. textAlign: TextAlign.left,
  276. style: TextStyle(
  277. fontSize: ScreenUtil().setSp(14),
  278. color: Color(0xff999999),
  279. ),
  280. ),
  281. ],
  282. ),
  283. Row(
  284. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  285. children: <Widget>[
  286. Text(
  287. i.content,
  288. textAlign: TextAlign.left,
  289. style: TextStyle(
  290. fontSize: ScreenUtil().setSp(13),
  291. color: Color(0xff999999),
  292. ),
  293. ),
  294. i.viewFlag != 0
  295. ? ClipRRect(
  296. borderRadius: BorderRadius.circular(3),
  297. child: Container(
  298. child: null,
  299. width: 6,
  300. height: 6,
  301. color: Colors.red))
  302. : Container(child: null)
  303. ],
  304. ),
  305. ])),
  306. ]),
  307. ),
  308. onTap: () {
  309. print(i);
  310. NavigatorUtils.push(context, MeansRouter.errorDetail);
  311. },
  312. );
  313. }).toList();
  314. @override
  315. Widget build(BuildContext context) {
  316. return Container(
  317. color: Colors.white,
  318. child: Column(children: listWidget(context)),
  319. );
  320. }
  321. }