sign_list_page.dart 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
  4. import 'package:intl/intl.dart';
  5. import 'package:liftmanager/internal/search/presenter/base_list_provider.dart';
  6. import 'package:liftmanager/internal/sign/model/sign_list_entity.dart';
  7. import 'package:liftmanager/internal/sign/presenter/SignListPresenter.dart';
  8. import 'package:liftmanager/mvp/base_page_state.dart';
  9. import 'package:liftmanager/res/resources.dart';
  10. import 'package:liftmanager/routers/fluro_navigator.dart';
  11. import 'package:liftmanager/widgets/app_bar.dart';
  12. import 'package:liftmanager/widgets/calendar/flutter_calendar.dart';
  13. import 'package:liftmanager/widgets/state_layout.dart';
  14. import 'package:provider/provider.dart' as p;
  15. class SignListPage extends StatefulWidget {
  16. @override
  17. State<StatefulWidget> createState() {
  18. return SignListPageState();
  19. }
  20. }
  21. class SignListPageState extends BasePageState<SignListPage, SignListPresenter> {
  22. BaseListProvider<SignListItem> provider = BaseListProvider<SignListItem>();
  23. String _nowTimeStr = "";
  24. int _page = 1;
  25. Calendar mCalendar;
  26. @override
  27. void initState() {
  28. provider.setStateTypeNotNotify(StateType.loading);
  29. super.initState();
  30. _nowTimeStr = DateTime.now().toString().split(" ")[0];
  31. _onRefresh();
  32. }
  33. Future _onRefresh() async {
  34. _page = 1;
  35. await presenter.signList(context, _page, 10, _nowTimeStr);
  36. }
  37. Future _loadMore() async {
  38. _page++;
  39. await presenter.signList(context, _page, 10, _nowTimeStr);
  40. }
  41. ///选择日期
  42. Future<void> _selectTime(Function callback) async {
  43. DatePicker.showDatePicker(context,
  44. showTitleActions: true, onChanged: (date) {}, onConfirm: (date) {
  45. callback("${date.toString().split(".")[0]}");
  46. }, currentTime: DateTime.now(), locale: LocaleType.zh);
  47. }
  48. Widget calendarWidget() {
  49. if (mCalendar == null) {
  50. mCalendar = Calendar(
  51. showTodayAction: false,
  52. showChevronsToChangeRange: true,
  53. showCalendarPickerIcon: false,
  54. onSelectedRangeChange: (range) {
  55. // print("Range1 is ${range.item1}, ${range.item2}");
  56. // _pageDate = range.item1;
  57. // getCalenderDate();
  58. },
  59. onDateSelected: (res) async {
  60. await presenter.signList(
  61. context, _page, 10, DateFormat("yyyy-MM-dd").format(res));
  62. setState(() {});
  63. // selectedDate = res;
  64. // initHeaderTitle();
  65. // print(_pageController.page);
  66. // for(var i=0;i<mListView.length;i++){
  67. // MaintenanceList widget = mListView[i];
  68. // widget.date = res;
  69. // }
  70. // MaintenanceList widget = mListView[_pageController.page.toInt()];
  71. // widget.date = res;
  72. // if(widget.mState !=null){
  73. // widget.mState.onRefresh();
  74. // }
  75. // setState(() {});
  76. // print("currentSelected is ${mCalendar.currentSelected()}");
  77. // print("Range2 is ${res}");
  78. },
  79. isExpandable: true,
  80. );
  81. }
  82. return mCalendar;
  83. }
  84. @override
  85. Widget build(BuildContext context) {
  86. return p.ChangeNotifierProvider<BaseListProvider<SignListItem>>(
  87. create: (_) => provider,
  88. child: WillPopScope(
  89. onWillPop: () {
  90. NavigatorUtils.goBackWithParams(context, true);
  91. return Future.value(false);
  92. },
  93. child: Scaffold(
  94. appBar: MyAppBar(
  95. centerTitle: "考勤记录",
  96. // actions: <Widget>[
  97. // FlatButton(
  98. // child: Text("选择日期"),
  99. // textColor: Colours.dark_text,
  100. // highlightColor: Colors.transparent,
  101. // onPressed: () {
  102. // _selectTime((String time) {
  103. // _nowTimeStr = "${time.split(" ")[0]}";
  104. // _onRefresh();
  105. // });
  106. // },
  107. // )
  108. // ],
  109. ),
  110. body: p.Consumer<BaseListProvider<SignListItem>>(
  111. builder: (_, provider, __) {
  112. return Column(
  113. children: [
  114. calendarWidget(),
  115. Container(
  116. // padding: EdgeInsets.only(left: 10),
  117. alignment: Alignment.centerLeft,
  118. height: 45,
  119. decoration: BoxDecoration(
  120. border: Border(
  121. bottom:
  122. BorderSide(width: 0.5, color: Colours.line),
  123. ),
  124. ),
  125. child: Row(
  126. children: [
  127. Container(
  128. // margin: EdgeInsets.only(left: 10),
  129. height: 13, width: 2,
  130. color: Colours.blue_app_main,
  131. ),
  132. SizedBox(
  133. width: 10,
  134. ),
  135. Text(
  136. "考勤记录",
  137. style: TextStyle(
  138. fontSize: 14, color: Colours.text),
  139. ),
  140. ],
  141. )),
  142. Column(
  143. crossAxisAlignment: CrossAxisAlignment.start,
  144. children: [
  145. provider.list.length > 0
  146. ? Container(
  147. color: Colors.white,
  148. padding: const EdgeInsets.symmetric(
  149. horizontal: 15.0, vertical: 12.0),
  150. alignment: Alignment.centerLeft,
  151. child: RichText(
  152. text: TextSpan(
  153. // style: DefaultTextStyle.of(context).style,
  154. children: <InlineSpan>[
  155. TextSpan(
  156. text:
  157. '${provider.list[0].createDate}',
  158. style:
  159. TextStyle(color: Colours.text)),
  160. TextSpan(
  161. text:
  162. ' ${provider.list[0].typeDesc}',
  163. style: TextStyle(
  164. color: Colours.blue_app_main)),
  165. ])),
  166. )
  167. : Container(),
  168. provider.list.length > 1
  169. ? Container(
  170. height: 22,
  171. width: 2,
  172. color: Colours.new_dark_line,
  173. margin: EdgeInsets.only(left: 90),
  174. )
  175. : Container(),
  176. provider.list.length > 1
  177. ? Container(
  178. color: Colors.white,
  179. padding: const EdgeInsets.symmetric(
  180. horizontal: 15.0, vertical: 12.0),
  181. alignment: Alignment.centerLeft,
  182. child: Text(
  183. "${provider.list[1].createDate} ${provider.list[1].typeDesc}",
  184. style: TextStyle(color: Colours.text_gray),
  185. ),
  186. )
  187. : Container()
  188. ],
  189. )
  190. ],
  191. );
  192. // MyListView(
  193. // itemCount: provider.list.length,
  194. // stateType: provider.stateType,
  195. // onRefresh: _onRefresh,
  196. // loadMore: _loadMore,
  197. // // itemExtent: 67.0,
  198. // hasMore: provider.hasMore,
  199. // itemBuilder: (_, index) {
  200. // return Container(
  201. // padding: const EdgeInsets.symmetric(
  202. // horizontal: 15.0, vertical: 12.0),
  203. // alignment: Alignment.centerLeft,
  204. // decoration: BoxDecoration(
  205. // color: Colors.white,
  206. // border: Border(
  207. // bottom:
  208. // BorderSide(width: 0.5, color: Colours.line),
  209. // )),
  210. // child: Column(
  211. // crossAxisAlignment: CrossAxisAlignment.start,
  212. // mainAxisAlignment: MainAxisAlignment.start,
  213. // children: <Widget>[
  214. // Text("类型:${provider.list[index].typeDesc}"),
  215. // Text("时间:${provider.list[index].createDate}"),
  216. // Text("地址:${provider.list[index].address}"),
  217. // Text("状态:${provider.list[index].statusDesc}")
  218. // ],
  219. // ),
  220. // );
  221. // },
  222. // );
  223. }))));
  224. }
  225. @override
  226. SignListPresenter createPresenter() {
  227. return SignListPresenter();
  228. }
  229. }