small_money.dart 14 KB

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