small_money.dart 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_picker/flutter_picker.dart';
  3. import 'package:flutter_screenutil/flutter_screenutil.dart';
  4. import 'package:liftmanager/internal/search/presenter/base_list_provider.dart';
  5. import 'package:liftmanager/internal/wode/model/wallet_model.dart';
  6. import 'package:liftmanager/internal/wode/presenter/wallet_list_presenter.dart';
  7. import 'package:liftmanager/mvp/base_page_state.dart';
  8. import 'package:liftmanager/res/resources.dart';
  9. import 'package:liftmanager/utils/time_format.dart';
  10. import 'package:liftmanager/widgets/app_bar.dart';
  11. import 'package:liftmanager/widgets/my_refresh_list.dart';
  12. import 'package:liftmanager/widgets/state_layout.dart';
  13. import 'package:provider/provider.dart';
  14. class SmallMoney extends StatefulWidget {
  15. // QuestionList(this.index);
  16. // final String index;
  17. @override
  18. SmallMoneyState createState() => SmallMoneyState();
  19. }
  20. class SmallMoneyState
  21. extends BasePageState<SmallMoney, WalletListPresenterSeconds>
  22. with AutomaticKeepAliveClientMixin {
  23. BaseListProvider<Records> provider = BaseListProvider<Records>();
  24. ScrollController _scrollController = new ScrollController();
  25. @override
  26. void initState() {
  27. provider.setStateTypeNotNotify(StateType.loading);
  28. super.initState();
  29. _onRefresh();
  30. print(66666);
  31. }
  32. @override
  33. void dispose() {
  34. _scrollController.dispose();
  35. super.dispose();
  36. }
  37. int currentYear;
  38. int currentMonth;
  39. String incomeStr = '0';
  40. String outcomeStr = '0';
  41. String currentDate = '全部';
  42. List<int> selecteds = [];
  43. getBusinessType(int type) {
  44. String str;
  45. if (type == 1) {
  46. str = "充值会员";
  47. } else if (type == 2) {
  48. str = "打赏";
  49. } else if (type == 3) {
  50. str = "充值";
  51. } else if (type == 4) {
  52. str = "诊单业务";
  53. } else if (type == 5) {
  54. str = "提现";
  55. } else if (type == 6) {
  56. str = "提现失败退款";
  57. } else if (type == 7) {
  58. str = "余额消费";
  59. } else if (type == 8) {
  60. str = "拒绝接单退款";
  61. }else if (type == 9) {
  62. str = "专家惩罚";
  63. }else if (type == 10) {
  64. str = "申诉退款";
  65. }else if (type == 11) {
  66. str = "粉丝充值返利";
  67. }else if (type == 12) {
  68. str = "现金支付";
  69. }else if (type == 13) {
  70. str = "差旅费";
  71. }
  72. return str;
  73. }
  74. void selectTimePeriod() {
  75. List pickerdata = [];
  76. int minYear = 2016;
  77. DateTime now = new DateTime.now();
  78. int maxYear = now.year;
  79. int lastMonth = now.month;
  80. print(lastMonth);
  81. for (int i = minYear; i <= maxYear; i++) {
  82. List<int> month = [];
  83. int monthLength = (i == maxYear) ? lastMonth : 12;
  84. for (int j = 1; j <= monthLength; j++) {
  85. month.add(j);
  86. }
  87. pickerdata.add({i.toString(): month});
  88. }
  89. new Picker(
  90. adapter: PickerDataAdapter<String>(
  91. pickerdata: pickerdata,
  92. ),
  93. selecteds: selecteds,
  94. changeToFirst: true,
  95. hideHeader: false,
  96. cancelText:"取消",
  97. confirmText:"确认",
  98. onConfirm: (Picker picker, List value) {
  99. print(picker.getSelectedValues());
  100. selecteds = value;
  101. currentYear = int.parse(picker.getSelectedValues()[0]);
  102. currentMonth = int.parse(picker.getSelectedValues()[1]);
  103. currentDate = picker.getSelectedValues()[0] +
  104. '年' +
  105. picker.getSelectedValues()[1] +
  106. '月';
  107. _onRefresh();
  108. setState(() {});
  109. },
  110. ).showModal(this.context);
  111. }
  112. int _page = 1;
  113. @override
  114. Widget build(BuildContext context) {
  115. double width = MediaQuery.of(context).size.width;
  116. return ChangeNotifierProvider<BaseListProvider<Records>>(
  117. create: (_) => provider,
  118. child: Scaffold(
  119. resizeToAvoidBottomPadding: true,
  120. appBar: MyAppBar(centerTitle: "零钱明细"),
  121. body: Container(
  122. child: Column(
  123. crossAxisAlignment: CrossAxisAlignment.start,
  124. children: <Widget>[
  125. Container(
  126. width: width,
  127. height: 60,
  128. padding: EdgeInsets.only(
  129. left: ScreenUtil().setWidth(15),
  130. right: ScreenUtil().setWidth(15),
  131. ),
  132. decoration: BoxDecoration(
  133. border: Border(
  134. bottom: BorderSide(width: 0.5, color: Colours.line),
  135. ),
  136. color: Color(0xffEFEFEF),
  137. ),
  138. // padding: EdgeInsets.only(left:15,right:15),
  139. // color: Color(0xFFF1F4FC),
  140. child: Row(
  141. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  142. children: <Widget>[
  143. GestureDetector(
  144. onTap: () {
  145. selectTimePeriod();
  146. },
  147. child: ClipRRect(
  148. borderRadius: BorderRadius.circular(20),
  149. child: Container(
  150. // height: ,
  151. padding: EdgeInsets.only(
  152. left: 10, right: 3, top: 2, bottom: 2),
  153. color: Colors.white,
  154. child: Row(
  155. children: <Widget>[
  156. Text(
  157. currentDate,
  158. style: TextStyle(
  159. color: Color(0xff333333),
  160. fontSize: ScreenUtil().setSp(14)),
  161. textAlign: TextAlign.center,
  162. ),
  163. Container(
  164. padding: EdgeInsets.only(top: 3),
  165. child: Icon(
  166. Icons.keyboard_arrow_down,
  167. size: 20.0,
  168. ),
  169. )
  170. ],
  171. ),
  172. ),
  173. ),
  174. ),
  175. Container(
  176. padding: EdgeInsets.only(top: 10),
  177. child: Column(
  178. children: <Widget>[
  179. Row(children: <Widget>[
  180. Text(
  181. "支出:",
  182. style: TextStyle(
  183. color: Color(0xff333333),
  184. fontSize: ScreenUtil().setSp(14)),
  185. textAlign: TextAlign.start,
  186. ),
  187. Text(
  188. "¥" + outcomeStr,
  189. style: TextStyle(
  190. color: Color(0xff333333),
  191. fontSize: ScreenUtil().setSp(14)),
  192. textAlign: TextAlign.start,
  193. ),
  194. ]),
  195. Row(children: <Widget>[
  196. Text(
  197. "收入:",
  198. style: TextStyle(
  199. color: Color(0xff333333),
  200. fontSize: ScreenUtil().setSp(14)),
  201. textAlign: TextAlign.start,
  202. ),
  203. Text(
  204. "¥" + incomeStr,
  205. style: TextStyle(
  206. color: Color(0xff333333),
  207. fontSize: ScreenUtil().setSp(14)),
  208. textAlign: TextAlign.start,
  209. ),
  210. ]),
  211. ],
  212. ),
  213. ),
  214. ],
  215. ),
  216. ),
  217. Expanded(
  218. flex: 1,
  219. child: Consumer<BaseListProvider<Records>>(
  220. builder: (_, provider, __) {
  221. return MyListView(
  222. key: Key('wallet_list'),
  223. itemCount: provider.list.length,
  224. stateType: provider.stateType,
  225. onRefresh: _onRefresh,
  226. loadMore: _loadMore,
  227. pageSize: 8,
  228. hasMore: provider.hasMore,
  229. itemBuilder: (_, index) {
  230. return InkWell(
  231. child: Container(
  232. padding: EdgeInsets.only(
  233. left: ScreenUtil().setWidth(15),
  234. right: ScreenUtil().setWidth(15),
  235. top: ScreenUtil().setWidth(15),
  236. bottom: ScreenUtil().setWidth(15)),
  237. decoration: BoxDecoration(
  238. border: Border(
  239. bottom:
  240. BorderSide(width: 0.5, color: Colours.line),
  241. ),
  242. color: Colors.white,
  243. ),
  244. child: Column(
  245. // crossAxisAlignment: CrossAxisAlignment.start,
  246. children: <Widget>[
  247. Container(
  248. padding: EdgeInsets.only(bottom: 5),
  249. child: Row(
  250. mainAxisAlignment:
  251. MainAxisAlignment.spaceBetween,
  252. children: <Widget>[
  253. Text(
  254. getBusinessType(provider.list[index].businessType),
  255. textAlign: TextAlign.left,
  256. style: TextStyle(
  257. fontSize: ScreenUtil().setSp(16),
  258. color: Color(0xff333333),
  259. ),
  260. ),
  261. Text(
  262. (provider.list[index].type == 1
  263. ? "-"
  264. : "+") +
  265. provider.list[index].amount
  266. .toString(),
  267. textAlign: TextAlign.left,
  268. style: TextStyle(
  269. fontSize: ScreenUtil().setSp(16),
  270. color: Colors.red,
  271. ),
  272. ),
  273. ],
  274. ),
  275. ),
  276. Row(
  277. mainAxisAlignment:
  278. MainAxisAlignment.spaceBetween,
  279. children: <Widget>[
  280. Text(
  281. provider.list[index].descr ?? "",
  282. textAlign: TextAlign.left,
  283. style: TextStyle(
  284. fontSize: ScreenUtil().setSp(13),
  285. color: Color(0xff999999),
  286. ),
  287. ),
  288. Text(
  289. DateUtils.instance.getFormartData(
  290. timeSamp:
  291. provider.list[index].createTime,
  292. format: "yyyy-MM-dd"),
  293. textAlign: TextAlign.left,
  294. style: TextStyle(
  295. fontSize: ScreenUtil().setSp(13),
  296. color: Color(0xff999999),
  297. ),
  298. ),
  299. ],
  300. ),
  301. ],
  302. ),
  303. ),
  304. onTap: () {
  305. // print(i);
  306. // NavigatorUtils.push(context, BbsRouter.positionDetail);
  307. },
  308. );
  309. },
  310. );
  311. },
  312. ),
  313. )
  314. ],
  315. ),
  316. ),
  317. ),
  318. );
  319. }
  320. Future _onRefresh() async {
  321. _page = 1;
  322. await presenter.getWalletList(_page,
  323. currentYear: currentYear,
  324. currentMonth: currentMonth, complete: (income, outcome) {
  325. setState(() {
  326. incomeStr = income.toString();
  327. outcomeStr = outcome.toString();
  328. });
  329. });
  330. }
  331. Future _loadMore() async {
  332. _page++;
  333. await presenter.getWalletList(_page,
  334. currentYear: currentYear,
  335. currentMonth: currentMonth, complete: (income, outcome) {
  336. setState(() {
  337. incomeStr = income.toString();
  338. outcomeStr = outcome.toString();
  339. });
  340. });
  341. }
  342. @override
  343. WalletListPresenterSeconds createPresenter() {
  344. return WalletListPresenterSeconds();
  345. }
  346. bool get wantKeepAlive => true;
  347. }