promotion_spread.dart 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. import 'package:cached_network_image/cached_network_image.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:twong/api/index.dart';
  4. import 'package:twong/config/style.dart';
  5. import 'package:twong/models/index.dart';
  6. import 'package:twong/utils/index.dart';
  7. import 'package:twong/widgets/app_bar.dart';
  8. class PromotionSpreadPage extends StatefulWidget {
  9. @override
  10. State<StatefulWidget> createState() {
  11. return _PromotionSpreadState();
  12. }
  13. }
  14. class _PromotionSpreadState extends State<PromotionSpreadPage> with SingleTickerProviderStateMixin {
  15. int current = 0;
  16. int total = 0;
  17. int totalLevel = 0;
  18. PromotionPeopleData _data;
  19. @override
  20. void initState() {
  21. super.initState();
  22. loadData();
  23. }
  24. loadData() async {
  25. _onTabClick(0);
  26. }
  27. @override
  28. Widget build(BuildContext context) {
  29. return Scaffold(
  30. appBar: DAppBar("推广人统计"),
  31. body: SafeArea(
  32. child: ListView(
  33. physics: ClampingScrollPhysics(),
  34. children: [
  35. _buildHeader(),
  36. _buildList()
  37. ],
  38. ),
  39. ),
  40. );
  41. }
  42. Widget _buildHeader() {
  43. return Container(
  44. height: 88.px,
  45. color: DColors.Main,
  46. alignment: Alignment.centerLeft,
  47. padding: EdgeInsets.only(left: 22.px, top: 22.px),
  48. child: Column(
  49. crossAxisAlignment: CrossAxisAlignment.start,
  50. children: [
  51. Container(
  52. margin: EdgeInsets.only(bottom: 8.px),
  53. child: Text("推广人数", style: TextStyle(fontSize: 12.px,
  54. color: Colors.white)),
  55. ),
  56. RichText(text: TextSpan(
  57. text: (totalLevel + total).toString(),
  58. style: TextStyle(fontSize: 22.px, color: Colors.white),
  59. children: [
  60. TextSpan(
  61. text: " 人",
  62. style: TextStyle(fontSize: 12.px, color: Colors.white),
  63. )
  64. ]
  65. ))
  66. ],
  67. ),
  68. );
  69. }
  70. Widget _buildList() {
  71. List<Widget> widgets = List<Widget>();
  72. if(_data != null) {
  73. widgets.add(Divider());
  74. for (var item in _data.list) {
  75. widgets.add(Container(
  76. margin: EdgeInsets.only(left: 12.px, right: 12.px),
  77. child: Row(
  78. children: [
  79. CircleAvatar(
  80. backgroundImage: CachedNetworkImageProvider(item.avatar)),
  81. Container(
  82. margin: EdgeInsets.only(left: 12.px),
  83. child: Column(
  84. crossAxisAlignment: CrossAxisAlignment.start,
  85. children: [
  86. Text(item.nickname),
  87. Text("加入时间: ${item.time}")
  88. ],
  89. ),
  90. ),
  91. Spacer(),
  92. Column(
  93. children: [
  94. Text("${item.numberCount == null ? 0 : item.numberCount}人",
  95. style: TextStyle(fontSize: 12.px)),
  96. Text("${item.orderCount == null ? 0 : item.orderCount}单",
  97. style: TextStyle(fontSize: 12.px)),
  98. Text("${item.childCount == null ? 0 : item.childCount}元",
  99. style: TextStyle(fontSize: 12.px)),
  100. ],
  101. )
  102. ],
  103. ),
  104. ));
  105. widgets.add(Divider());
  106. }
  107. }
  108. var boxDecoration = BoxDecoration(
  109. border: Border(bottom: BorderSide(color: DColors.Main))
  110. );
  111. return Container(
  112. child: Column(children: [
  113. Container(
  114. margin: EdgeInsets.only(top: 6.px, right: 6.px),
  115. child: Row(
  116. children: [
  117. Spacer(),
  118. InkWell(
  119. onTap: () => _onTabClick(0),
  120. highlightColor: Colors.transparent,
  121. child: Container(
  122. padding: EdgeInsets.only(bottom: 4.px),
  123. decoration: current == 0 ? boxDecoration : null,
  124. child: Text("一级($total)"),
  125. ),
  126. ),
  127. Spacer(),
  128. InkWell(
  129. onTap: () => _onTabClick(1),
  130. highlightColor: Colors.transparent,
  131. child: Container(
  132. padding: EdgeInsets.only(bottom: 4.px),
  133. decoration: current == 1 ? boxDecoration : null,
  134. child: Text("二级($totalLevel)"),
  135. ),
  136. ),
  137. Spacer(),
  138. ],
  139. ),
  140. ),
  141. _data == null ? Container(
  142. margin: EdgeInsets.only(top: 88.px),
  143. child: Center(child: Utils.loadingWidget),
  144. ) : Column(children: widgets)
  145. ])
  146. );
  147. }
  148. _onTabClick(int idx) {
  149. setState(() {
  150. _data = null;
  151. current = idx;
  152. });
  153. Network.inst.getPromotionPeople(grade: idx).then((data) {
  154. setState(() {
  155. _data = data;
  156. total = _data.total;
  157. totalLevel = _data.totalLevel;
  158. });
  159. });
  160. }
  161. }