bill_record.dart 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. import 'package:flutter/material.dart';
  2. import 'package:twong/api/index.dart';
  3. import 'package:twong/models/index.dart';
  4. import 'package:twong/utils/index.dart';
  5. import 'package:twong/config/style.dart';
  6. import 'package:twong/widgets/app_bar.dart';
  7. class BillRecordPage extends StatefulWidget {
  8. final int idx;
  9. BillRecordPage({this.idx = 0});
  10. @override
  11. State<StatefulWidget> createState() {
  12. return _BillRecordState();
  13. }
  14. }
  15. class _BillRecordState extends State<BillRecordPage> {
  16. int index;
  17. List _data = List<PromoteRecordList>();
  18. List<String> tabs = ["全部", "消费记录", "充值记录"];
  19. @override
  20. void initState() {
  21. super.initState();
  22. doSelect(widget.idx);
  23. }
  24. @override
  25. Widget build(BuildContext context) {
  26. return Scaffold(
  27. backgroundColor: DColors.back,
  28. appBar: DAppBar("账单记录"),
  29. body: SafeArea(
  30. child: Column(
  31. children: [
  32. _buildTabs(),
  33. Expanded(child: _buildList())
  34. ],
  35. ),
  36. ),
  37. );
  38. }
  39. void doSelect(int idx) {
  40. setState(() {
  41. index = idx;
  42. _data = null;
  43. });
  44. Network.inst.getPromotionRecord(type: idx).then((list) {
  45. setState(() {
  46. _data = list;
  47. });
  48. });
  49. }
  50. Widget _buildTabs() {
  51. final _style = TextStyle(fontSize: 12.px, color: Colors.white);
  52. List<Widget> widgets = List<Widget>();
  53. for (var idx = 0; idx < tabs.length; idx ++) {
  54. widgets.add(Expanded(child: Container(
  55. width: 4.px,
  56. child: FlatButton(
  57. minWidth: 1.px,
  58. highlightColor: Colors.transparent,
  59. onPressed: () => doSelect(idx),
  60. child: Container(
  61. padding: EdgeInsets.only(bottom: 4.px),
  62. decoration: BoxDecoration(
  63. border: index == idx ? Border(
  64. bottom: BorderSide(color: Colors.white)
  65. ) : null,
  66. ),
  67. child: Text(tabs[idx], textAlign: TextAlign.center, style: _style),
  68. ),
  69. ),
  70. )));
  71. }
  72. return Container(
  73. constraints: BoxConstraints.expand().widthConstraints(),
  74. height: 46.px,
  75. decoration: BoxDecoration(
  76. // color: Colors.white,
  77. color: DColors.Main,
  78. boxShadow: DShadow.down,
  79. ),
  80. margin: EdgeInsets.only(bottom: 6.px),
  81. child: Row(children: widgets));
  82. }
  83. Widget _buildList() {
  84. List<Widget> widgets = List<Widget>();
  85. if(_data != null) {
  86. for (var item in _data) {
  87. List<Widget> subWidgets = List<Widget>();
  88. for (var subItem in item.list) {
  89. subWidgets.add(Container(
  90. margin: EdgeInsets.all(8.px),
  91. padding: EdgeInsets.only(left: 6.px, right: 6.px),
  92. child: Row(
  93. children: [
  94. Expanded(child: Column(
  95. crossAxisAlignment: CrossAxisAlignment.start,
  96. children: [
  97. Text(subItem.title, style: TextStyle(fontSize: 13.px)),
  98. Text(
  99. subItem.add_time, style: TextStyle(color: Colors.grey,
  100. fontSize: 12.px)),
  101. ])),
  102. Text(Utils.formatRMB(subItem.number, sign: true),
  103. style: TextStyle(color: Colors.green, fontSize: 16.px))
  104. ],
  105. ),
  106. ));
  107. subWidgets.add(Divider());
  108. }
  109. subWidgets.removeLast();
  110. widgets.add(Container(
  111. child: Column(
  112. crossAxisAlignment: CrossAxisAlignment.start,
  113. children: [
  114. Container(
  115. margin: EdgeInsets.all(12.px),
  116. padding: EdgeInsets.only(left: 6.px, right: 6.px),
  117. child: Text(item.time, style: TextStyle(fontSize: 12.px))),
  118. Container(
  119. color: Colors.white,
  120. width: double.infinity,
  121. child: Column(
  122. crossAxisAlignment: CrossAxisAlignment.start,
  123. children: subWidgets))
  124. ]),
  125. ));
  126. }
  127. }
  128. return Container(
  129. child: _data == null ? Container(
  130. width: MediaQuery.of(context).size.width,
  131. margin: EdgeInsets.only(top: 88.px),
  132. child: Center(child: Utils.loadingWidget),
  133. ) : Container(
  134. child: ListView(
  135. physics: ClampingScrollPhysics(),
  136. children: widgets,
  137. ),
  138. ),
  139. );
  140. }
  141. }