flutter_calendar.dart 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627
  1. import 'dart:async';
  2. import 'package:flutter/material.dart';
  3. import 'package:liftmanager/internal/maintenance/model/maintenance_count_item.dart';
  4. import 'package:liftmanager/res/resources.dart';
  5. import 'package:liftmanager/utils/utils.dart';
  6. import 'package:liftmanager/widgets/calendar/calendar_title.dart';
  7. import 'package:tuple/tuple.dart';
  8. typedef DayBuilder(BuildContext context, DateTime day);
  9. class Calendar extends StatefulWidget {
  10. final ValueChanged<DateTime> onDateSelected;
  11. final ValueChanged<Tuple2<DateTime, DateTime>> onSelectedRangeChange;
  12. final bool isExpandable;
  13. final DayBuilder dayBuilder;
  14. final bool showChevronsToChangeRange;
  15. final bool showTodayAction;
  16. final bool showCalendarPickerIcon;
  17. final DateTime initialCalendarDateOverride;
  18. Calendar(
  19. {this.onDateSelected,
  20. this.onSelectedRangeChange,
  21. this.isExpandable: false,
  22. this.dayBuilder,
  23. this.showTodayAction: true,
  24. this.showChevronsToChangeRange: true,
  25. this.showCalendarPickerIcon: true,
  26. this.initialCalendarDateOverride});
  27. final mCalendarState = CalendarState();
  28. today() {
  29. mCalendarState.resetToToday();
  30. }
  31. DateTime currentSelected(){
  32. return mCalendarState._selectedDate;
  33. }
  34. // updateState(int i){
  35. // mCalendarState.mtState = i;
  36. // }
  37. void updateState(List<MantenanceCountItem> arrCount) {
  38. mCalendarState.updateState(arrCount);
  39. }
  40. @override
  41. CalendarState createState() {
  42. return mCalendarState;
  43. }
  44. }
  45. class CalendarState extends State<Calendar> {
  46. final calendarUtils = new Utils();
  47. List<DateTime> selectedMonthsDays;
  48. Iterable<DateTime> selectedWeeksDays;
  49. DateTime _selectedDate = new DateTime.now();
  50. DateTime _selectedPageDate = new DateTime.now();
  51. String currentMonth;
  52. bool isExpanded = false;
  53. String displayMonth;
  54. List<MantenanceCountItem> arrCount = [];
  55. DateTime get selectedDate => _selectedDate;
  56. void initState() {
  57. super.initState();
  58. if (widget.initialCalendarDateOverride != null) {
  59. _selectedDate = widget.initialCalendarDateOverride;
  60. }
  61. _selectedPageDate = _selectedDate;
  62. selectedMonthsDays = Utils.daysInMonth(_selectedDate);
  63. var firstDayOfCurrentWeek = Utils.firstDayOfWeek(_selectedDate);
  64. var lastDayOfCurrentWeek = Utils.lastDayOfWeek(_selectedDate);
  65. selectedWeeksDays =
  66. Utils.daysInRange(firstDayOfCurrentWeek, lastDayOfCurrentWeek)
  67. .toList()
  68. .sublist(0, 7);
  69. displayMonth = Utils.formatMonth(_selectedDate);
  70. }
  71. Widget get nameAndIconRow {
  72. var leftInnerIcon;
  73. var rightInnerIcon;
  74. var leftOuterIcon;
  75. var rightOuterIcon;
  76. if (widget.showCalendarPickerIcon) {
  77. rightInnerIcon = new IconButton(
  78. onPressed: () => selectDateFromPicker(),
  79. icon: new Icon(Icons.calendar_today),
  80. );
  81. } else {
  82. rightInnerIcon = new Container();
  83. }
  84. if (widget.showChevronsToChangeRange) {
  85. leftOuterIcon = new IconButton(
  86. onPressed: isExpanded ? previousMonth : previousWeek,
  87. icon: new Icon(Icons.chevron_left),
  88. );
  89. rightOuterIcon = new IconButton(
  90. onPressed: isExpanded ? nextMonth : nextWeek,
  91. icon: new Icon(Icons.chevron_right),
  92. );
  93. } else {
  94. leftOuterIcon = new Container();
  95. rightOuterIcon = new Container();
  96. }
  97. if (widget.showTodayAction) {
  98. leftInnerIcon = new InkWell(
  99. child: Container(
  100. child: Image.asset("images/icon_today.png"),
  101. ),
  102. onTap: resetToToday,
  103. );
  104. } else {
  105. leftInnerIcon = new Container();
  106. }
  107. return Container(
  108. padding: EdgeInsets.only(left: 15, right: 15),
  109. decoration: BoxDecoration(
  110. color: Colours.app_main,
  111. ),
  112. child: Row(
  113. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  114. children: [
  115. rightInnerIcon ?? new Container(),
  116. rightOuterIcon ?? new Container(),
  117. new GestureDetector(
  118. onTap: () => selectDateFromPicker(),
  119. child: Text(
  120. displayMonth,
  121. style: new TextStyle(fontSize: 15.0, color: Colors.white),
  122. ),
  123. ),
  124. leftOuterIcon ?? new Container(),
  125. leftInnerIcon ?? new Container(),
  126. ],
  127. ));
  128. }
  129. Widget get calendarGridView {
  130. return new Container(
  131. child: new GestureDetector(
  132. onHorizontalDragStart: (gestureDetails) => beginSwipe(gestureDetails),
  133. onHorizontalDragUpdate: (gestureDetails) =>
  134. getDirection(gestureDetails),
  135. onHorizontalDragEnd: (gestureDetails) => endSwipe(gestureDetails),
  136. onVerticalDragStart: (gestureDetails) =>
  137. beginVerticalSwipe(gestureDetails),
  138. onVerticalDragUpdate: (gestureDetails) =>
  139. updateVerticalSwipe(gestureDetails),
  140. onVerticalDragEnd: (gestureDetails) => endVerticalSwipe(gestureDetails),
  141. child: new GridView.count(
  142. physics: NeverScrollableScrollPhysics(),
  143. //禁止GridView滚动事件,避免冲突
  144. shrinkWrap: true,
  145. crossAxisCount: 7,
  146. padding: new EdgeInsets.only(bottom: 0.0),
  147. children: calendarBuilder(),
  148. ),
  149. ),
  150. );
  151. }
  152. List<Widget> calendarWeek() {
  153. List<Widget> dayWidgets = [];
  154. Utils.weekdays.forEach(
  155. (day) {
  156. dayWidgets.add(
  157. new CalendarTile(
  158. // weekBgColor: Colors.white,
  159. dayOfWeekStyles: TextStyle(color: Colors.white),
  160. isDayOfWeek: true,
  161. dayOfWeek: day,
  162. ),
  163. );
  164. },
  165. );
  166. return dayWidgets;
  167. }
  168. List<Widget> calendarBuilder() {
  169. List<Widget> dayWidgets = [];
  170. List<DateTime> calendarDays =
  171. isExpanded ? selectedMonthsDays : selectedWeeksDays;
  172. // Utils.weekdays.forEach(
  173. // (day) {
  174. // dayWidgets.add(
  175. // new CalendarTile(
  176. //// weekBgColor: MyColors.app_main,
  177. // dayOfWeekStyles:TextStyle(color: Colors.white),
  178. // isDayOfWeek: true,
  179. // dayOfWeek: day,
  180. // ),
  181. // );
  182. // },
  183. // );
  184. bool monthStarted = false;
  185. bool monthEnded = false;
  186. calendarDays.forEach(
  187. (day) {
  188. if (monthStarted && day.day == 01) {
  189. monthEnded = true;
  190. }
  191. if (Utils.isFirstDayOfMonth(day)) {
  192. monthStarted = true;
  193. }
  194. if (this.widget.dayBuilder != null) {
  195. dayWidgets.add(
  196. new CalendarTile(
  197. child: this.widget.dayBuilder(context, day),
  198. date: day,
  199. onDateSelected: () => handleSelectedDateAndUserCallback(day),
  200. ),
  201. );
  202. } else {
  203. dayWidgets.add(
  204. new CalendarTile(
  205. onDateSelected: () => handleSelectedDateAndUserCallback(day),
  206. date: day,
  207. dateStyles: configureDateStyle(monthStarted, monthEnded),
  208. isSelected: "${_selectedDate.year},${_selectedDate.month}" ==
  209. "${_selectedPageDate.year},${_selectedPageDate.month}"
  210. ? Utils.isSameDay(selectedDate, day)
  211. : false,
  212. mtState: isMtState(day),
  213. ),
  214. );
  215. }
  216. },
  217. );
  218. return dayWidgets;
  219. }
  220. TextStyle configureDateStyle(monthStarted, monthEnded) {
  221. TextStyle dateStyles;
  222. if (isExpanded) {
  223. dateStyles = monthStarted && !monthEnded
  224. ? new TextStyle(color:Colours.dark_bg_gray, fontSize: 13)
  225. : new TextStyle(color: Colours.bg_gray, fontSize: 13);
  226. } else {
  227. dateStyles = new TextStyle(color: Colours.dark_bg_gray, fontSize: 13);
  228. }
  229. return dateStyles;
  230. }
  231. Widget get expansionButtonRow {
  232. if (widget.isExpandable) {
  233. return new Row(
  234. mainAxisAlignment: MainAxisAlignment.spaceBetween,
  235. children: <Widget>[
  236. new Text(Utils.fullDayFormat(selectedDate)),
  237. new IconButton(
  238. iconSize: 20.0,
  239. padding: new EdgeInsets.all(0.0),
  240. onPressed: toggleExpanded,
  241. icon: isExpanded
  242. ? new Icon(Icons.arrow_drop_up)
  243. : new Icon(Icons.arrow_drop_down),
  244. ),
  245. ],
  246. );
  247. } else {
  248. return new Container();
  249. }
  250. }
  251. @override
  252. Widget build(BuildContext context) {
  253. return new Container(
  254. child: new Column(
  255. mainAxisAlignment: MainAxisAlignment.start,
  256. mainAxisSize: MainAxisSize.min,
  257. children: <Widget>[
  258. nameAndIconRow,
  259. Container(
  260. decoration: BoxDecoration(color: Colours.app_main
  261. // gradient: LinearGradient(
  262. // colors: [Color(0xFF0189FF), Color(0xFF03A9FF)]),
  263. ),
  264. child: GridView.count(
  265. shrinkWrap: true,
  266. crossAxisCount: 7,
  267. padding: new EdgeInsets.only(bottom: 0.0),
  268. children: calendarWeek(),
  269. ),
  270. ),
  271. new ExpansionCrossFade(
  272. collapsed: calendarGridView,
  273. expanded: calendarGridView,
  274. isExpanded: isExpanded,
  275. ),
  276. // expansionButtonRow
  277. ],
  278. ),
  279. );
  280. }
  281. resetToToday() {
  282. print("resetToToday");
  283. _selectedDate = new DateTime.now();
  284. _selectedPageDate = _selectedDate;
  285. // if(isExpanded){
  286. var firstDateOfNewMonth = Utils.firstDayOfMonth(_selectedDate);
  287. var lastDateOfNewMonth = Utils.lastDayOfMonth(_selectedDate);
  288. var firstDayOfCurrentWeek = Utils.firstDayOfWeek(_selectedDate);
  289. var lastDayOfCurrentWeek = Utils.lastDayOfWeek(_selectedDate);
  290. setState(() {
  291. selectedWeeksDays =
  292. Utils.daysInRange(firstDayOfCurrentWeek, lastDayOfCurrentWeek)
  293. .toList();
  294. updateSelectedRange(firstDateOfNewMonth, lastDateOfNewMonth);
  295. selectedMonthsDays = Utils.daysInMonth(_selectedPageDate);
  296. displayMonth = Utils.formatMonth(_selectedDate);
  297. });
  298. // }else{
  299. // var firstDayOfCurrentWeek = Utils.firstDayOfWeek(_selectedDate);
  300. // var lastDayOfCurrentWeek = Utils.lastDayOfWeek(_selectedDate);
  301. // setState(() {
  302. // selectedWeeksDays =
  303. // Utils.daysInRange(firstDayOfCurrentWeek, lastDayOfCurrentWeek)
  304. // .toList();
  305. // displayMonth = Utils.formatMonth(_selectedDate);
  306. // });
  307. // }
  308. _launchDateSelectionCallback(_selectedDate);
  309. }
  310. void nextMonth() {
  311. setState(() {
  312. // _selectedDate = Utils.nextMonth(_selectedDate);
  313. // var firstDateOfNewMonth = Utils.firstDayOfMonth(_selectedDate);
  314. // var lastDateOfNewMonth = Utils.lastDayOfMonth(_selectedDate);
  315. // updateSelectedRange(firstDateOfNewMonth, lastDateOfNewMonth);
  316. // selectedMonthsDays = Utils.daysInMonth(_selectedDate);
  317. // displayMonth = Utils.formatMonth(_selectedDate);
  318. _selectedPageDate = Utils.nextMonth(_selectedPageDate);
  319. var firstDateOfNewMonth = Utils.firstDayOfMonth(_selectedPageDate);
  320. var lastDateOfNewMonth = Utils.lastDayOfMonth(_selectedPageDate);
  321. updateSelectedRange(firstDateOfNewMonth, lastDateOfNewMonth);
  322. selectedMonthsDays = Utils.daysInMonth(_selectedPageDate);
  323. displayMonth = Utils.formatMonth(_selectedPageDate);
  324. });
  325. }
  326. void previousMonth() {
  327. setState(() {
  328. // _selectedDate = Utils.previousMonth(_selectedDate);
  329. // var firstDateOfNewMonth = Utils.firstDayOfMonth(_selectedDate);
  330. // var lastDateOfNewMonth = Utils.lastDayOfMonth(_selectedDate);
  331. // updateSelectedRange(firstDateOfNewMonth, lastDateOfNewMonth);
  332. // selectedMonthsDays = Utils.daysInMonth(_selectedDate);
  333. // displayMonth = Utils.formatMonth(_selectedDate);
  334. _selectedPageDate = Utils.previousMonth(_selectedPageDate);
  335. var firstDateOfNewMonth = Utils.firstDayOfMonth(_selectedPageDate);
  336. var lastDateOfNewMonth = Utils.lastDayOfMonth(_selectedPageDate);
  337. updateSelectedRange(firstDateOfNewMonth, lastDateOfNewMonth);
  338. selectedMonthsDays = Utils.daysInMonth(_selectedPageDate);
  339. displayMonth = Utils.formatMonth(_selectedPageDate);
  340. });
  341. }
  342. void nextWeek() {
  343. setState(() {
  344. // _selectedDate = Utils.nextWeek(_selectedDate);
  345. // var firstDayOfCurrentWeek = Utils.firstDayOfWeek(_selectedDate);
  346. // var lastDayOfCurrentWeek = Utils.lastDayOfWeek(_selectedDate);
  347. // updateSelectedRange(firstDayOfCurrentWeek, lastDayOfCurrentWeek);
  348. // selectedWeeksDays =
  349. // Utils.daysInRange(firstDayOfCurrentWeek, lastDayOfCurrentWeek)
  350. // .toList()
  351. // .sublist(0, 7);
  352. // displayMonth = Utils.formatMonth(_selectedDate);
  353. _selectedPageDate = Utils.nextWeek(_selectedPageDate);
  354. var firstDayOfCurrentWeek = Utils.firstDayOfWeek(_selectedPageDate);
  355. var lastDayOfCurrentWeek = Utils.lastDayOfWeek(_selectedPageDate);
  356. // var firstDateOfNewMonth = Utils.firstDayOfMonth(_selectedDate);
  357. // var lastDateOfNewMonth = Utils.lastDayOfMonth(_selectedDate);
  358. // updateSelectedRange(firstDateOfNewMonth, lastDateOfNewMonth);
  359. updateSelectedRange(firstDayOfCurrentWeek, lastDayOfCurrentWeek);
  360. selectedWeeksDays =
  361. Utils.daysInRange(firstDayOfCurrentWeek, lastDayOfCurrentWeek)
  362. .toList()
  363. .sublist(0, 7);
  364. selectedMonthsDays = Utils.daysInMonth(_selectedPageDate);
  365. displayMonth = Utils.formatMonth(_selectedPageDate);
  366. });
  367. // _launchDateSelectionCallback(_selectedDate);
  368. _launchDateSelectionCallback(_selectedPageDate);
  369. }
  370. void previousWeek() {
  371. setState(() {
  372. // _selectedDate = Utils.previousWeek(_selectedDate);
  373. // var firstDayOfCurrentWeek = Utils.firstDayOfWeek(_selectedDate);
  374. // var lastDayOfCurrentWeek = Utils.lastDayOfWeek(_selectedDate);
  375. // updateSelectedRange(firstDayOfCurrentWeek, lastDayOfCurrentWeek);
  376. // selectedWeeksDays =
  377. // Utils.daysInRange(firstDayOfCurrentWeek, lastDayOfCurrentWeek)
  378. // .toList()
  379. // .sublist(0, 7);
  380. // displayMonth = Utils.formatMonth(_selectedDate);
  381. _selectedPageDate = Utils.previousWeek(_selectedPageDate);
  382. var firstDayOfCurrentWeek = Utils.firstDayOfWeek(_selectedPageDate);
  383. var lastDayOfCurrentWeek = Utils.lastDayOfWeek(_selectedPageDate);
  384. updateSelectedRange(firstDayOfCurrentWeek, lastDayOfCurrentWeek);
  385. selectedWeeksDays =
  386. Utils.daysInRange(firstDayOfCurrentWeek, lastDayOfCurrentWeek)
  387. .toList()
  388. .sublist(0, 7);
  389. selectedMonthsDays = Utils.daysInMonth(_selectedPageDate);
  390. displayMonth = Utils.formatMonth(_selectedPageDate);
  391. });
  392. // _launchDateSelectionCallback(_selectedDate);
  393. _launchDateSelectionCallback(_selectedPageDate);
  394. }
  395. void updateSelectedRange(DateTime start, DateTime end) {
  396. var selectedRange = new Tuple2<DateTime, DateTime>(start, end);
  397. if (widget.onSelectedRangeChange != null) {
  398. widget.onSelectedRangeChange(selectedRange);
  399. }
  400. }
  401. Future<Null> selectDateFromPicker() async {
  402. DateTime selected = await showDatePicker(
  403. context: context,
  404. initialDate: _selectedDate ?? new DateTime.now(),
  405. firstDate: new DateTime(1960),
  406. lastDate: new DateTime(2050),
  407. );
  408. if (selected != null) {
  409. _selectedDate = selected;
  410. _selectedPageDate = _selectedDate;
  411. var firstDateOfNewMonth = Utils.firstDayOfMonth(_selectedDate);
  412. var lastDateOfNewMonth = Utils.lastDayOfMonth(_selectedDate);
  413. var firstDayOfCurrentWeek = Utils.firstDayOfWeek(_selectedDate);
  414. var lastDayOfCurrentWeek = Utils.lastDayOfWeek(_selectedDate);
  415. ///todo
  416. setState(() {
  417. selectedWeeksDays =
  418. Utils.daysInRange(firstDayOfCurrentWeek, lastDayOfCurrentWeek)
  419. .toList();
  420. updateSelectedRange(firstDateOfNewMonth, lastDateOfNewMonth);
  421. selectedMonthsDays = Utils.daysInMonth(_selectedPageDate);
  422. displayMonth = Utils.formatMonth(_selectedDate);
  423. });
  424. // updating selected date range based on selected week
  425. // updateSelectedRange(firstDayOfCurrentWeek, lastDayOfCurrentWeek);
  426. _launchDateSelectionCallback(_selectedDate);
  427. }
  428. }
  429. var gestureStart;
  430. var gestureDirection;
  431. void beginSwipe(DragStartDetails gestureDetails) {
  432. gestureStart = gestureDetails.globalPosition.dx;
  433. }
  434. void getDirection(DragUpdateDetails gestureDetails) {
  435. if (gestureDetails.globalPosition.dx < gestureStart) {
  436. gestureDirection = 'rightToLeft';
  437. } else {
  438. gestureDirection = 'leftToRight';
  439. }
  440. }
  441. void endSwipe(DragEndDetails gestureDetails) {
  442. if (gestureDirection == 'rightToLeft') {
  443. if (isExpanded) {
  444. nextMonth();
  445. } else {
  446. nextWeek();
  447. }
  448. } else {
  449. if (isExpanded) {
  450. previousMonth();
  451. } else {
  452. previousWeek();
  453. }
  454. }
  455. }
  456. var gestureVertivalStart;
  457. var gestureVertivalDirection;
  458. void beginVerticalSwipe(DragStartDetails gestureDetails) {
  459. gestureVertivalStart = gestureDetails.globalPosition.dy;
  460. }
  461. void updateVerticalSwipe(DragUpdateDetails gestureDetails) {
  462. if (gestureDetails.globalPosition.dy < gestureVertivalStart) {
  463. gestureVertivalDirection = 'rightToTop';
  464. } else {
  465. gestureVertivalDirection = 'leftToBotton';
  466. }
  467. }
  468. void endVerticalSwipe(DragEndDetails gestureDetails) {
  469. if (gestureVertivalDirection == 'rightToTop') {
  470. if (widget.isExpandable) {
  471. setState(() => isExpanded = false);
  472. }
  473. } else {
  474. if (widget.isExpandable) {
  475. setState(() => isExpanded = true);
  476. }
  477. }
  478. }
  479. void toggleExpanded() {
  480. if (widget.isExpandable) {
  481. setState(() => isExpanded = !isExpanded);
  482. }
  483. }
  484. void handleSelectedDateAndUserCallback(DateTime day) {
  485. var firstDayOfCurrentWeek = Utils.firstDayOfWeek(day);
  486. var lastDayOfCurrentWeek = Utils.lastDayOfWeek(day);
  487. setState(() {
  488. _selectedDate = day;
  489. selectedWeeksDays =
  490. Utils.daysInRange(firstDayOfCurrentWeek, lastDayOfCurrentWeek)
  491. .toList();
  492. selectedMonthsDays = Utils.daysInMonth(day);
  493. });
  494. _launchDateSelectionCallback(day);
  495. }
  496. void _launchDateSelectionCallback(DateTime day) {
  497. if (widget.onDateSelected != null) {
  498. widget.onDateSelected(day);
  499. }
  500. }
  501. updateState(List<MantenanceCountItem> arrCount){
  502. this.arrCount = arrCount;
  503. setState(() {
  504. });
  505. }
  506. // TextStyle configureDateStyle(monthStarted, monthEnded) {
  507. // TextStyle dateStyles;
  508. // if (isExpanded) {
  509. // dateStyles = monthStarted && !monthEnded
  510. // ? new TextStyle(color: MyColors.ff_1a, fontSize: dip_f(13))
  511. // : new TextStyle(color: MyColors.ff_99, fontSize: dip_f(13));
  512. // } else {
  513. // dateStyles = new TextStyle(color: MyColors.ff_1a, fontSize: dip_f(13));
  514. // }
  515. // return dateStyles;
  516. // }
  517. int isMtState(DateTime dateTime) {
  518. if (_selectedPageDate.month != dateTime.month||_selectedPageDate.year != dateTime.year) {
  519. return 0;
  520. }
  521. int mtState = 0;
  522. for (int i = 0; i < arrCount.length; i++) {
  523. if(DateTime.parse('${arrCount[i].planDate}').day ==dateTime.day){
  524. if(arrCount[i].complete>0){
  525. mtState = 3;
  526. }
  527. if(arrCount[i].waitingMaintenance>0){
  528. mtState = 1;
  529. }
  530. if(arrCount[i].inProgress>0){
  531. mtState = 2;
  532. }
  533. if(arrCount[i].overdue>0){
  534. mtState = 4;
  535. }
  536. // if(arrCount[i].statuteOverdueCount>0||arrCount[i].overdueCount>0){
  537. // mtState = 4;
  538. // }
  539. }
  540. }
  541. return mtState;
  542. }
  543. }
  544. class ExpansionCrossFade extends StatelessWidget {
  545. final Widget collapsed;
  546. final Widget expanded;
  547. final bool isExpanded;
  548. ExpansionCrossFade({this.collapsed, this.expanded, this.isExpanded});
  549. @override
  550. Widget build(BuildContext context) {
  551. return new Flexible(
  552. flex: 1,
  553. child: new AnimatedCrossFade(
  554. firstChild: collapsed,
  555. secondChild: expanded,
  556. firstCurve: const Interval(0.0, 1.0, curve: Curves.fastOutSlowIn),
  557. secondCurve: const Interval(0.0, 1.0, curve: Curves.fastOutSlowIn),
  558. sizeCurve: Curves.decelerate,
  559. crossFadeState:
  560. isExpanded ? CrossFadeState.showSecond : CrossFadeState.showFirst,
  561. duration: const Duration(milliseconds: 100),
  562. ),
  563. );
  564. }
  565. }