Commit 61df77a12c0bfbbd6a5d968afa2931d09d78d514

Authored by wdn127929
1 parent e1bd456d

修改日历

@@ -11,14 +11,14 @@ if (flutterRoot == null) { @@ -11,14 +11,14 @@ if (flutterRoot == null) {
11 throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 11 throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
12 } 12 }
13 13
14 -def flutterVersionCode = "316" 14 +def flutterVersionCode = "317"
15 if (flutterVersionCode == null) { 15 if (flutterVersionCode == null) {
16 - flutterVersionCode = '316' 16 + flutterVersionCode = '317'
17 } 17 }
18 18
19 -def flutterVersionName = "3.1.6" 19 +def flutterVersionName = "3.1.7"
20 if (flutterVersionName == null) { 20 if (flutterVersionName == null) {
21 - flutterVersionName = '3.1.6' 21 + flutterVersionName = '3.1.7'
22 } 22 }
23 23
24 apply plugin: 'com.android.application' 24 apply plugin: 'com.android.application'
@@ -193,8 +193,7 @@ class _EditReserverPageState extends State<EditReserverPage> { @@ -193,8 +193,7 @@ class _EditReserverPageState extends State<EditReserverPage> {
193 193
194 VEmptyView(40), 194 VEmptyView(40),
195 195
196 - Expanded(  
197 - child: Column( 196 + Column(
198 children: [ 197 children: [
199 Row( 198 Row(
200 mainAxisAlignment: MainAxisAlignment.spaceBetween, 199 mainAxisAlignment: MainAxisAlignment.spaceBetween,
@@ -365,300 +364,307 @@ class _EditReserverPageState extends State<EditReserverPage> { @@ -365,300 +364,307 @@ class _EditReserverPageState extends State<EditReserverPage> {
365 ), 364 ),
366 ], 365 ],
367 ), 366 ),
368 - Stack(  
369 - children: [  
370 - Container(  
371 - height: ScreenUtil().setWidth(180),  
372 - width: double.infinity,  
373 - color: MyColours.color_ffffff,  
374 - ),  
375 - Offstage(  
376 - offstage: !(showPhoneHistory &&  
377 - detailModel.userHistorys.length > 0),  
378 - child: Container(  
379 - decoration: BoxDecoration(  
380 - borderRadius: BorderRadius.circular(8),  
381 - border: Border.all(color: Colors.white),  
382 - color: MyColours.color_ffffff,  
383 - boxShadow: [  
384 - BoxShadow(  
385 - color: MyColours.color_e5e5e5,  
386 - blurRadius:  
387 - ScreenUtil().setWidth(20))  
388 - ]),  
389 - width: ScreenUtil().setWidth(440),  
390 - height: detailModel.userHistorys.length > 1  
391 - ? ScreenUtil().setWidth(180)  
392 - : ScreenUtil().setWidth(104),  
393 - padding: EdgeInsets.symmetric(  
394 - horizontal: ScreenUtil().setWidth(30)),  
395 - child: Align(  
396 - alignment: Alignment.topCenter,  
397 - child: MediaQuery.removePadding(  
398 - context: context,  
399 - removeTop: true,  
400 - child: ListView.builder(  
401 - itemBuilder: (context, index) {  
402 - return GestureDetector(  
403 - onTap: () {  
404 - setState(() {  
405 - showPhoneHistory = false;  
406 - detailModel.phoneController  
407 - .text = detailModel  
408 - .userHistorys[  
409 - index]  
410 - .phone !=  
411 - null  
412 - ? detailModel  
413 - .userHistorys[index]  
414 - .phone  
415 - : '';  
416 - // _homeEnterModel.nameController.text =  
417 - // _homeEnterModel  
418 - // .userHistorys[index].rname +  
419 - // _nameSuffix();  
420 - _addNameSuffix(  
421 - detailModel 367 + ],
  368 + ),
  369 + VEmptyView(60),
  370 + Stack(
  371 + children: [
  372 + Padding(
  373 + padding: EdgeInsets.only(
  374 + top: ScreenUtil().setWidth(60)),
  375 + child: Row(
  376 + mainAxisAlignment:
  377 + MainAxisAlignment.spaceEvenly,
  378 + children: [
  379 + RoundButton(
  380 + text: '返回',
  381 + fontSize: 28,
  382 + isBold: false,
  383 + height: ScreenUtil().setWidth(70),
  384 + width: ScreenUtil().setWidth(180),
  385 + radius: ScreenUtil().setWidth(10),
  386 + gradientStart: MyColours.color_ffffff,
  387 + textColor: MyColours.color_333333,
  388 + borderColor: MyColours.color_199095,
  389 + gradientEnd: MyColours.color_ffffff,
  390 + onPressed: () {
  391 + // setState(() {
  392 + // nameStr = '';
  393 + // detailModel.nameController.text = '';
  394 + // detailModel.phoneController.text = '';
  395 + // });
  396 + Navigator.of(context).pop();
  397 + },
  398 + ),
  399 + widget.needBtn
  400 + ? RoundButton(
  401 + text: '保存并发短信',
  402 + fontSize: 28,
  403 + isBold: false,
  404 + height: ScreenUtil().setWidth(70),
  405 + width: ScreenUtil().setWidth(200),
  406 + radius: ScreenUtil().setWidth(10),
  407 + gradientStart: MyColours.color_199095,
  408 + textColor: MyColours.color_ffffff,
  409 + borderColor: MyColours.color_199095,
  410 + gradientEnd: MyColours.color_199095,
  411 + onPressed: () async {
  412 + if (nameStr == null ||
  413 + nameStr.trim().length == 0) {
  414 + Utils.showToast('请填写客人姓名');
  415 + return;
  416 + }
  417 +
  418 + if (detailModel.phoneController.text
  419 + .trim()
  420 + .length ==
  421 + 0) {
  422 + Utils.showToast('请填写电话');
  423 + return;
  424 + }
  425 + if (!Utils.phoneRegExp(detailModel
  426 + .phoneController.text)) {
  427 + Utils.showToast('手机号错误,请修改正确');
  428 + return;
  429 + }
  430 + String sex = '1';
  431 + for (var item
  432 + in detailModel.sexList) {
  433 + if (item['select']) {
  434 + sex = item['code'];
  435 + }
  436 + }
  437 + bool sucess =
  438 + await detailModel.upReserveInfo(
  439 + context, widget.rid,
  440 + name: nameStr,
  441 + sex: sex,
  442 + phone: detailModel
  443 + .phoneController.text,
  444 + showLoading: true);
  445 + if (sucess) {
  446 + bus.emit(
  447 + "refresh_tablemanager"); //刷新桌位
  448 + bus.emit(
  449 + "refresh_book_list"); //刷新已预订列表
  450 + bus.emit("refresh_detail");
  451 + UserModel userModel =
  452 + Provider.of<UserModel>(
  453 + context,
  454 + listen: false);
  455 + Map<String, String> params = {
  456 + "rid": widget.rid,
  457 + "sid": userModel.user.sellerid
  458 + };
  459 + CouponProvider couponProvider =
  460 + Provider.of<CouponProvider>(
  461 + context,
  462 + listen: false);
  463 + bool success =
  464 + await couponProvider
  465 + .sendSMSWxSendSms(
  466 + context, params);
  467 + print(success);
  468 + if (success) {
  469 + Navigator.of(context).pop(
  470 + detailModel
  471 + .phoneController.text);
  472 + }
  473 + }
  474 + },
  475 + )
  476 + : SizedBox(),
  477 + RoundButton(
  478 + text: widget.needBtn ? '仅保存' : '保存',
  479 + fontSize: 28,
  480 + isBold: false,
  481 + height: ScreenUtil().setWidth(70),
  482 + width: ScreenUtil().setWidth(180),
  483 + radius: ScreenUtil().setWidth(10),
  484 + gradientStart: widget.needBtn
  485 + ? MyColours.color_ffffff
  486 + : MyColours.color_199095,
  487 + gradientEnd: widget.needBtn
  488 + ? MyColours.color_ffffff
  489 + : MyColours.color_199095,
  490 + textColor: widget.needBtn
  491 + ? MyColours.color_333333
  492 + : MyColours.color_ffffff,
  493 + borderColor: MyColours.color_199095,
  494 + onPressed: () async {
  495 + if (nameStr == null ||
  496 + nameStr.trim().length == 0) {
  497 + Utils.showToast('请填写客人姓名');
  498 + return;
  499 + }
  500 +
  501 + if (detailModel.phoneController.text
  502 + .trim()
  503 + .length ==
  504 + 0) {
  505 + Utils.showToast('请填写电话');
  506 + return;
  507 + }
  508 + if (!Utils.phoneRegExp(
  509 + detailModel.phoneController.text)) {
  510 + Utils.showToast('手机号错误,请修改正确');
  511 + return;
  512 + }
  513 + String sex = '1';
  514 + for (var item in detailModel.sexList) {
  515 + if (item['select']) {
  516 + sex = item['code'];
  517 + }
  518 + }
  519 + bool sucess = await detailModel
  520 + .upReserveInfo(context, widget.rid,
  521 + name: nameStr,
  522 + sex: sex,
  523 + phone: detailModel
  524 + .phoneController.text);
  525 + if (sucess) {
  526 + EventBus().emit(
  527 + "refresh_tablemanager"); //刷新桌位
  528 + bus.emit("refresh_book_list"); //刷新已预订列表
  529 + bus.emit("refresh_detail");
  530 +
  531 + Navigator.of(context).pop(
  532 + detailModel.phoneController.text);
  533 + }
  534 + },
  535 + )
  536 + ],
  537 + )),
  538 + Offstage(
  539 + offstage: !(showPhoneHistory &&
  540 + detailModel.userHistorys.length > 0),
  541 + child: Container(
  542 + decoration: BoxDecoration(
  543 + borderRadius: BorderRadius.circular(8),
  544 + border: Border.all(color: Colors.white),
  545 + color: MyColours.color_ffffff,
  546 + boxShadow: [
  547 + BoxShadow(
  548 + color: MyColours.color_e5e5e5,
  549 + blurRadius: ScreenUtil().setWidth(20))
  550 + ]),
  551 + width: ScreenUtil().setWidth(440),
  552 + height: detailModel.userHistorys.length > 1
  553 + ? ScreenUtil().setWidth(260)
  554 + : ScreenUtil().setWidth(104),
  555 + padding: EdgeInsets.symmetric(
  556 + horizontal: ScreenUtil().setWidth(30)),
  557 + child: Align(
  558 + alignment: Alignment.topCenter,
  559 + child: MediaQuery.removePadding(
  560 + context: context,
  561 + removeTop: true,
  562 + child: ListView.builder(
  563 + shrinkWrap: true,
  564 + itemBuilder: (context, index) {
  565 + return GestureDetector(
  566 + onTap: () {
  567 + setState(() {
  568 + showPhoneHistory = false;
  569 + detailModel.phoneController
  570 + .text = detailModel
422 .userHistorys[index] 571 .userHistorys[index]
423 - .rname,  
424 - _nameSuffix());  
425 - nameStr = detailModel 572 + .phone !=
  573 + null
  574 + ? detailModel
426 .userHistorys[index] 575 .userHistorys[index]
427 - .rname;  
428 - _phoneNode.unfocus();  
429 - detailModel.userHistorys  
430 - .clear();  
431 - });  
432 - },  
433 - child: Container(  
434 - width: double.infinity,  
435 - height: ScreenUtil()  
436 - .setWidth(102),  
437 - decoration: BoxDecoration(  
438 - border: Border(  
439 - bottom: (index !=  
440 - (detailModel  
441 - .userHistorys  
442 - .length -  
443 - 1) &&  
444 - detailModel 576 + .phone
  577 + : '';
  578 + // _homeEnterModel.nameController.text =
  579 + // _homeEnterModel
  580 + // .userHistorys[index].rname +
  581 + // _nameSuffix();
  582 + _addNameSuffix(
  583 + detailModel
  584 + .userHistorys[index]
  585 + .rname,
  586 + _nameSuffix());
  587 + nameStr = detailModel
  588 + .userHistorys[index].rname;
  589 + _phoneNode.unfocus();
  590 + detailModel.userHistorys
  591 + .clear();
  592 + });
  593 + },
  594 + child: Container(
  595 + width: double.infinity,
  596 + height:
  597 + ScreenUtil().setWidth(102),
  598 + decoration: BoxDecoration(
  599 + border: Border(
  600 + bottom: (index !=
  601 + (detailModel
445 .userHistorys 602 .userHistorys
446 - .length >  
447 - 1)  
448 - ? BorderSide(  
449 - color: MyColours  
450 - .color_e5e5e5,  
451 - width: ScreenUtil() 603 + .length -
  604 + 1) &&
  605 + detailModel
  606 + .userHistorys
  607 + .length >
  608 + 1)
  609 + ? BorderSide(
  610 + color: MyColours
  611 + .color_e5e5e5,
  612 + width:
  613 + ScreenUtil()
452 .setWidth( 614 .setWidth(
453 2)) 615 2))
454 - : BorderSide  
455 - .none)),  
456 - child: Row(  
457 - mainAxisAlignment:  
458 - MainAxisAlignment  
459 - .spaceBetween,  
460 - children: [  
461 - Text(  
462 - detailModel 616 + : BorderSide.none)),
  617 + child: Row(
  618 + mainAxisAlignment:
  619 + MainAxisAlignment
  620 + .spaceBetween,
  621 + children: [
  622 + Text(
  623 + detailModel
  624 + .userHistorys[
  625 + index]
  626 + .phone ==
  627 + null
  628 + ? ''
  629 + : detailModel
463 .userHistorys[index] 630 .userHistorys[index]
464 .phone, 631 .phone,
465 - style: TextStyle(  
466 - color: MyColours  
467 - .color_333333,  
468 - fontSize:  
469 - ScreenUtil()  
470 - .setSp(32)),  
471 - ),  
472 - Expanded(  
473 - child: Text(  
474 - detailModel 632 + style: TextStyle(
  633 + color: MyColours
  634 + .color_333333,
  635 + fontSize: ScreenUtil()
  636 + .setSp(32)),
  637 + ),
  638 + Expanded(
  639 + child: Text(
  640 + detailModel
  641 + .userHistorys[
  642 + index]
  643 + .rname ==
  644 + null
  645 + ? ''
  646 + : detailModel
475 .userHistorys[index] 647 .userHistorys[index]
476 .rname, 648 .rname,
477 - style: TextStyle(  
478 - color: MyColours  
479 - .color_333333,  
480 - fontSize:  
481 - ScreenUtil()  
482 - .setSp(32)),  
483 - ))  
484 - ],  
485 - ),  
486 - ),  
487 - );  
488 - },  
489 - itemExtent:  
490 - ScreenUtil().setWidth(104),  
491 - itemCount:  
492 - detailModel.userHistorys.length,  
493 - ))),  
494 - ),  
495 - )  
496 - ], 649 + style: TextStyle(
  650 + color: MyColours
  651 + .color_333333,
  652 + fontSize: ScreenUtil()
  653 + .setSp(32)),
  654 + ))
  655 + ],
  656 + ),
  657 + ),
  658 + );
  659 + },
  660 + itemExtent: ScreenUtil().setWidth(104),
  661 + itemCount:
  662 + detailModel.userHistorys.length,
  663 + ))),
  664 + ),
497 ), 665 ),
498 ], 666 ],
499 - )),  
500 -  
501 - Padding(  
502 - padding:  
503 - EdgeInsets.only(top: ScreenUtil().setWidth(60)),  
504 - child: Row(  
505 - mainAxisAlignment: MainAxisAlignment.spaceEvenly,  
506 - children: [  
507 - RoundButton(  
508 - text: '返回',  
509 - fontSize: 28,  
510 - isBold: false,  
511 - height: ScreenUtil().setWidth(70),  
512 - width: ScreenUtil().setWidth(180),  
513 - radius: ScreenUtil().setWidth(10),  
514 - gradientStart: MyColours.color_ffffff,  
515 - textColor: MyColours.color_333333,  
516 - borderColor: MyColours.color_199095,  
517 - gradientEnd: MyColours.color_ffffff,  
518 - onPressed: () {  
519 - // setState(() {  
520 - // nameStr = '';  
521 - // detailModel.nameController.text = '';  
522 - // detailModel.phoneController.text = '';  
523 - // });  
524 - Navigator.of(context).pop();  
525 - },  
526 - ),  
527 - widget.needBtn  
528 - ? RoundButton(  
529 - text: '保存并发短信',  
530 - fontSize: 28,  
531 - isBold: false,  
532 - height: ScreenUtil().setWidth(70),  
533 - width: ScreenUtil().setWidth(200),  
534 - radius: ScreenUtil().setWidth(10),  
535 - gradientStart: MyColours.color_199095,  
536 - textColor: MyColours.color_ffffff,  
537 - borderColor: MyColours.color_199095,  
538 - gradientEnd: MyColours.color_199095,  
539 - onPressed: () async {  
540 - if (nameStr == null ||  
541 - nameStr.trim().length == 0) {  
542 - Utils.showToast('请填写客人姓名');  
543 - return;  
544 - }  
545 -  
546 - if (detailModel.phoneController.text  
547 - .trim()  
548 - .length ==  
549 - 0) {  
550 - Utils.showToast('请填写电话');  
551 - return;  
552 - }  
553 - if (!Utils.phoneRegExp(  
554 - detailModel.phoneController.text)) {  
555 - Utils.showToast('手机号错误,请修改正确');  
556 - return;  
557 - }  
558 - String sex = '1';  
559 - for (var item in detailModel.sexList) {  
560 - if (item['select']) {  
561 - sex = item['code'];  
562 - }  
563 - }  
564 - bool sucess = await detailModel  
565 - .upReserveInfo(context, widget.rid,  
566 - name: nameStr,  
567 - sex: sex,  
568 - phone: detailModel  
569 - .phoneController.text,  
570 - showLoading: true);  
571 - if (sucess) {  
572 - bus.emit(  
573 - "refresh_tablemanager"); //刷新桌位  
574 - bus.emit(  
575 - "refresh_book_list"); //刷新已预订列表  
576 - bus.emit("refresh_detail");  
577 - UserModel userModel =  
578 - Provider.of<UserModel>(context,  
579 - listen: false);  
580 - Map<String, String> params = {  
581 - "rid": widget.rid,  
582 - "sid": userModel.user.sellerid  
583 - };  
584 - CouponProvider couponProvider =  
585 - Provider.of<CouponProvider>(  
586 - context,  
587 - listen: false);  
588 - bool success = await couponProvider  
589 - .sendSMSWxSendSms(  
590 - context, params);  
591 - print(success);  
592 - if (success) {  
593 - Navigator.of(context).pop(  
594 - detailModel  
595 - .phoneController.text);  
596 - }  
597 - }  
598 - },  
599 - )  
600 - : SizedBox(),  
601 - RoundButton(  
602 - text: widget.needBtn ? '仅保存' : '保存',  
603 - fontSize: 28,  
604 - isBold: false,  
605 - height: ScreenUtil().setWidth(70),  
606 - width: ScreenUtil().setWidth(180),  
607 - radius: ScreenUtil().setWidth(10),  
608 - gradientStart: widget.needBtn  
609 - ? MyColours.color_ffffff  
610 - : MyColours.color_199095,  
611 - gradientEnd: widget.needBtn  
612 - ? MyColours.color_ffffff  
613 - : MyColours.color_199095,  
614 - textColor: widget.needBtn  
615 - ? MyColours.color_333333  
616 - : MyColours.color_ffffff,  
617 - borderColor: MyColours.color_199095,  
618 - onPressed: () async {  
619 - if (nameStr == null ||  
620 - nameStr.trim().length == 0) {  
621 - Utils.showToast('请填写客人姓名');  
622 - return;  
623 - }  
624 -  
625 - if (detailModel.phoneController.text  
626 - .trim()  
627 - .length ==  
628 - 0) {  
629 - Utils.showToast('请填写电话');  
630 - return;  
631 - }  
632 - if (!Utils.phoneRegExp(  
633 - detailModel.phoneController.text)) {  
634 - Utils.showToast('手机号错误,请修改正确');  
635 - return;  
636 - }  
637 - String sex = '1';  
638 - for (var item in detailModel.sexList) {  
639 - if (item['select']) {  
640 - sex = item['code'];  
641 - }  
642 - }  
643 - bool sucess = await detailModel.upReserveInfo(  
644 - context, widget.rid,  
645 - name: nameStr,  
646 - sex: sex,  
647 - phone: detailModel.phoneController.text);  
648 - if (sucess) {  
649 - EventBus()  
650 - .emit("refresh_tablemanager"); //刷新桌位  
651 - bus.emit("refresh_book_list"); //刷新已预订列表  
652 - bus.emit("refresh_detail");  
653 -  
654 - Navigator.of(context)  
655 - .pop(detailModel.phoneController.text);  
656 - }  
657 - },  
658 - )  
659 - ],  
660 - )),  
661 - VEmptyView(40) 667 + ),
662 ]))))); 668 ])))));
663 } 669 }
664 } 670 }
This diff could not be displayed because it is too large.
@@ -102,10 +102,10 @@ class NotebookDetailChangeModel with ChangeNotifier { @@ -102,10 +102,10 @@ class NotebookDetailChangeModel with ChangeNotifier {
102 // getReserveList(context, needLoading: false); 102 // getReserveList(context, needLoading: false);
103 } 103 }
104 104
105 - _returnDate(DateTime day) {  
106 - String time = Utils.lunarCalendarHolidays(day); 105 + _returnDate(DateTime day) {
  106 + // String time = Utils.lunarCalendarHolidays(day);
107 String date = _returnDayDateWeek(day); 107 String date = _returnDayDateWeek(day);
108 - date += ' ${time}'; 108 + // date += ' ${time}';
109 return date; 109 return date;
110 } 110 }
111 111
@@ -1274,7 +1274,7 @@ class DialogUtil { @@ -1274,7 +1274,7 @@ class DialogUtil {
1274 } else if (Utils.isOneDay(dateTime, now.add(Duration(days: 2)))) { 1274 } else if (Utils.isOneDay(dateTime, now.add(Duration(days: 2)))) {
1275 return "后"; 1275 return "后";
1276 } else { 1276 } else {
1277 - return dateTime.day.toString(); 1277 + return '${Utils.lunarCalendarHolidaysShow(dateTime)}';
1278 } 1278 }
1279 } 1279 }
1280 1280
@@ -1301,227 +1301,302 @@ class DialogUtil { @@ -1301,227 +1301,302 @@ class DialogUtil {
1301 BuildContext dialogContext = context; 1301 BuildContext dialogContext = context;
1302 Widget widget = StatefulBuilder(builder: (context, _setState) { 1302 Widget widget = StatefulBuilder(builder: (context, _setState) {
1303 return Container( 1303 return Container(
1304 - color: MyColours.color_ffffff,  
1305 - child: Column(  
1306 - children: <Widget>[  
1307 - TableCalendar(  
1308 - calendarController: _calendarController,  
1309 - initialSelectedDay: selectDateTime,  
1310 - onDaySelected: (day, events, holidays) {  
1311 - Navigator.of(dialogContext).pop(day);  
1312 - },  
1313 - // holidays: _holidays,  
1314 - availableGestures: AvailableGestures.none,  
1315 - events: _events,  
1316 - locale: "zh_CN",  
1317 - initialCalendarFormat: CalendarFormat.month,  
1318 - headerStyle: HeaderStyle(  
1319 - decoration:  
1320 - BoxDecoration(color: MyColours.color_2bb5b7),  
1321 - headerPadding: EdgeInsets.zero,  
1322 - formatButtonVisible: false,  
1323 - centerHeaderTitle: false,  
1324 - titleTextBuilder: (dateTime, _) {  
1325 - return dateTime.year.toString() +  
1326 - "年-" +  
1327 - Utils.addZeroNumber(dateTime.month) +  
1328 - "月";  
1329 - },  
1330 - titleTextStyle: TextStyle(  
1331 - color: MyColours.color_ffffff,  
1332 - fontSize: ScreenUtil().setSp(30)),  
1333 - leftChevronIcon:  
1334 - const Icon(Icons.chevron_left, color: Colors.white),  
1335 - rightChevronIcon: const Icon(Icons.chevron_right,  
1336 - color: Colors.white),  
1337 - ),  
1338 - calendarStyle: CalendarStyle(  
1339 - contentPadding:  
1340 - EdgeInsets.only(bottom: ScreenUtil().setWidth(8)),  
1341 - weekdayStyle: TextStyle(  
1342 - color: MyColours.color_2bb5b7,  
1343 - fontSize: ScreenUtil().setSp(32)),  
1344 - weekendStyle: TextStyle(  
1345 - color: MyColours.color_f49a5e,  
1346 - fontSize: ScreenUtil().setSp(32)),  
1347 - selectedColor: MyColours.color_2bb5b7,  
1348 - outsideDaysVisible: false,  
1349 - ),  
1350 - builders: CalendarBuilders(  
1351 - dowWeekdayBuilder: (context, weekday) {  
1352 - return Container(  
1353 - color: MyColours.color_2bb5b7,  
1354 - alignment: Alignment.center,  
1355 - margin: EdgeInsets.only(  
1356 - bottom: ScreenUtil().setWidth(40)),  
1357 - padding: EdgeInsets.symmetric(  
1358 - vertical: ScreenUtil().setHeight(25)),  
1359 - child: Text(  
1360 - weekday,  
1361 - style: TextStyle(  
1362 - color: MyColours.color_97e9ea,  
1363 - fontSize: ScreenUtil().setSp(32)),  
1364 - ),  
1365 - );  
1366 - },  
1367 - dayBuilder: (context, date, _) {  
1368 - return Container(  
1369 - height: ScreenUtil().setWidth(200),  
1370 - decoration: BoxDecoration(  
1371 - shape: BoxShape.circle,  
1372 - // color: Colors.blue,  
1373 - ),  
1374 - alignment: Alignment.center,  
1375 - margin: EdgeInsets.fromLTRB(  
1376 - ScreenUtil().setWidth(12),  
1377 - ScreenUtil().setWidth(12),  
1378 - ScreenUtil().setWidth(12),  
1379 - ScreenUtil().setWidth(32)),  
1380 - padding: EdgeInsets.only(  
1381 - bottom: ScreenUtil().setWidth(8),  
1382 - left: ScreenUtil().setWidth(16),  
1383 - right: ScreenUtil().setWidth(16),  
1384 - top: ScreenUtil().setWidth(8)),  
1385 - child: Text(  
1386 - // "${_parseDateDay(date)}",  
1387 - '${date.day}',  
1388 - style: TextStyle().copyWith(  
1389 - fontSize: ScreenUtil().setSp(32),  
1390 - color: MyColours.color_353535),  
1391 - ),  
1392 - );  
1393 - },  
1394 - selectedDayBuilder: (context, date, _) {  
1395 - return Container(  
1396 - decoration: BoxDecoration(  
1397 - shape: BoxShape.circle,  
1398 - color: MyColours.color_2bb5b7),  
1399 - alignment: Alignment.center,  
1400 - margin: EdgeInsets.fromLTRB(  
1401 - ScreenUtil().setWidth(12),  
1402 - ScreenUtil().setWidth(12),  
1403 - ScreenUtil().setWidth(12),  
1404 - ScreenUtil().setWidth(32)),  
1405 - padding: EdgeInsets.only(  
1406 - bottom: ScreenUtil().setWidth(8),  
1407 - left: ScreenUtil().setWidth(16),  
1408 - right: ScreenUtil().setWidth(16),  
1409 - top: ScreenUtil().setWidth(8)),  
1410 - child: Text(  
1411 - // "${_parseDateDay(date)}",  
1412 - '${date.day}',  
1413 - style: TextStyle().copyWith(  
1414 - fontSize: ScreenUtil().setSp(32),  
1415 - color: MyColours.color_ffffff),  
1416 - ),  
1417 - );  
1418 - },  
1419 - todayDayBuilder: (context, date, _) {  
1420 - return Container(  
1421 - decoration: BoxDecoration(  
1422 - shape: BoxShape.circle,  
1423 - border: Border.all(  
1424 - color: MyColours.color_2bb5b7,  
1425 - width: ScreenUtil().setWidth(2))),  
1426 - alignment: Alignment.center,  
1427 - margin: EdgeInsets.fromLTRB(  
1428 - ScreenUtil().setWidth(12),  
1429 - ScreenUtil().setWidth(12),  
1430 - ScreenUtil().setWidth(12),  
1431 - ScreenUtil().setWidth(32)),  
1432 - padding: EdgeInsets.only(  
1433 - bottom: ScreenUtil().setWidth(8),  
1434 - left: ScreenUtil().setWidth(16),  
1435 - right: ScreenUtil().setWidth(16),  
1436 - top: ScreenUtil().setWidth(8)),  
1437 - child: Text(  
1438 - // '今',  
1439 - '${date.day}',  
1440 - style: TextStyle().copyWith(  
1441 - fontSize: ScreenUtil().setSp(32),  
1442 - color: MyColours.color_2bb5b7),  
1443 - ),  
1444 - );  
1445 - },  
1446 - markersBuilder: (context, date, events, holidays) {  
1447 - final children = <Widget>[]; 1304 + color: MyColours.color_ffffff,
  1305 + child: Column(
  1306 + children: <Widget>[
  1307 + TableCalendar(
  1308 + // rowHeight: ScreenUtil().setWidth(100),
  1309 + calendarController: _calendarController,
  1310 + initialSelectedDay: selectDateTime,
  1311 + onDaySelected: (day, events, holidays) {
  1312 + Navigator.of(dialogContext).pop(day);
  1313 + },
  1314 + // holidays: _holidays,
  1315 + availableGestures: AvailableGestures.none,
  1316 + events: _events,
  1317 + locale: "zh_CN",
  1318 + initialCalendarFormat: CalendarFormat.month,
  1319 + headerStyle: HeaderStyle(
  1320 + decoration:
  1321 + BoxDecoration(color: MyColours.color_2bb5b7),
  1322 + headerPadding: EdgeInsets.zero,
  1323 + formatButtonVisible: false,
  1324 + centerHeaderTitle: false,
  1325 + titleTextBuilder: (dateTime, _) {
  1326 + return dateTime.year.toString() +
  1327 + "年-" +
  1328 + Utils.addZeroNumber(dateTime.month) +
  1329 + "月";
  1330 + },
  1331 + titleTextStyle: TextStyle(
  1332 + color: MyColours.color_ffffff,
  1333 + fontSize: ScreenUtil().setSp(30)),
  1334 + leftChevronIcon: const Icon(Icons.chevron_left,
  1335 + color: Colors.white),
  1336 + rightChevronIcon: const Icon(Icons.chevron_right,
  1337 + color: Colors.white),
  1338 + ),
  1339 + calendarStyle: CalendarStyle(
  1340 + contentPadding: EdgeInsets.only(
  1341 + bottom: ScreenUtil().setWidth(8)),
  1342 + weekdayStyle: TextStyle(
  1343 + color: MyColours.color_2bb5b7,
  1344 + fontSize: ScreenUtil().setSp(32)),
  1345 + weekendStyle: TextStyle(
  1346 + color: MyColours.color_f49a5e,
  1347 + fontSize: ScreenUtil().setSp(32)),
  1348 + selectedColor: MyColours.color_2bb5b7,
  1349 + outsideDaysVisible: false,
  1350 + ),
  1351 + builders: CalendarBuilders(
  1352 + dowWeekdayBuilder: (context, weekday) {
  1353 + return Container(
  1354 + color: MyColours.color_2bb5b7,
  1355 + alignment: Alignment.center,
  1356 + margin: EdgeInsets.only(
  1357 + bottom: ScreenUtil().setWidth(30)),
  1358 + padding: EdgeInsets.symmetric(
  1359 + vertical: ScreenUtil().setWidth(15)),
  1360 + child: Text(
  1361 + weekday,
  1362 + style: TextStyle(
  1363 + color: MyColours.color_97e9ea,
  1364 + fontSize: ScreenUtil().setSp(28)),
  1365 + ),
  1366 + );
  1367 + },
  1368 + dayBuilder: (context, date, _) {
  1369 + return Container(
  1370 + // height: ScreenUtil().setWidth(210),
  1371 + decoration: BoxDecoration(
  1372 + // shape: BoxShape.circle,
  1373 + // color: Colors.blue,
  1374 + ),
  1375 + // alignment: Alignment.center,
  1376 + // margin: EdgeInsets.fromLTRB(
  1377 + // ScreenUtil().setWidth(12),
  1378 + // ScreenUtil().setWidth(12),
  1379 + // ScreenUtil().setWidth(12),
  1380 + // ScreenUtil().setWidth(10)),
  1381 + // padding: EdgeInsets.symmetric(
  1382 + // // horizontal: ScreenUtil().setWidth(12),
  1383 + // vertical: ScreenUtil().setWidth(8),
  1384 + // ),
  1385 + child: Column(
  1386 + mainAxisAlignment: MainAxisAlignment.center,
  1387 + children: [
  1388 + Text(
  1389 + // "${_parseDateDay(date)}",
  1390 + '${Utils.addZeroNumber(date.day)}',
  1391 + style: TextStyle().copyWith(
  1392 + fontSize: ScreenUtil().setSp(32),
  1393 + color: MyColours.color_353535,
  1394 + fontWeight: FontWeight.bold)),
  1395 + // Text(
  1396 + // // "${_parseDateDay(date)}",
  1397 + // '${Utils.getLunarSpecialDate(date)}',
  1398 + // style: TextStyle().copyWith(
  1399 + // fontSize: ScreenUtil().setSp(22),
  1400 + // color: MyColours.color_353535),
  1401 + // ),
  1402 + Text(
  1403 + "${_parseDateDay(date)}",
  1404 + style: TextStyle().copyWith(
  1405 + fontSize: ScreenUtil().setSp(18),
  1406 + color: MyColours.color_353535),
  1407 + ),
  1408 + ],
  1409 + ),
  1410 + );
  1411 + },
  1412 + selectedDayBuilder: (context, date, _) {
  1413 + return Container(
  1414 + // alignment: Alignment.center,
  1415 + // margin: EdgeInsets.fromLTRB(
  1416 + // ScreenUtil().setWidth(12),
  1417 + // ScreenUtil().setWidth(12),
  1418 + // ScreenUtil().setWidth(12),
  1419 + // ScreenUtil().setWidth(32)),
  1420 + padding: EdgeInsets.only(
  1421 + bottom: ScreenUtil().setWidth(10),
  1422 + left: ScreenUtil().setWidth(5),
  1423 + right: ScreenUtil().setWidth(5),
  1424 + top: ScreenUtil().setWidth(10)),
  1425 + child: Container(
  1426 + decoration: BoxDecoration(
  1427 + borderRadius: BorderRadius.circular(
  1428 + ScreenUtil().setWidth(10)),
  1429 + color: Color.fromRGBO(42, 110, 109, 1)),
  1430 + child: Column(
  1431 + mainAxisAlignment: MainAxisAlignment.center,
  1432 + children: [
  1433 + Text(
  1434 + // "${_parseDateDay(date)}",
  1435 + '${Utils.addZeroNumber(date.day)}',
  1436 + style: TextStyle().copyWith(
  1437 + color: MyColours.color_ffffff,
  1438 + fontSize: ScreenUtil().setSp(32),
  1439 + fontWeight: FontWeight.bold),
  1440 + ),
  1441 + Text(
  1442 + "${_parseDateDay(date)}",
  1443 + // '${Utils.lunarCalendarHolidaysShow(date)}',
  1444 + style: TextStyle().copyWith(
  1445 + fontSize: ScreenUtil().setSp(22),
  1446 + color: MyColours.color_ffffff),
  1447 + )
  1448 + ],
  1449 + ),
  1450 + ),
  1451 + );
  1452 + },
  1453 + todayDayBuilder: (context, date, _) {
  1454 + return Container(
  1455 + // alignment: Alignment.center,
  1456 + // margin: EdgeInsets.fromLTRB(
  1457 + // ScreenUtil().setWidth(12),
  1458 + // ScreenUtil().setWidth(12),
  1459 + // ScreenUtil().setWidth(12),
  1460 + // ScreenUtil().setWidth(32)),
  1461 + padding: EdgeInsets.only(
  1462 + bottom: ScreenUtil().setWidth(10),
  1463 + left: ScreenUtil().setWidth(5),
  1464 + right: ScreenUtil().setWidth(5),
  1465 + top: ScreenUtil().setWidth(10)),
  1466 + child: Container(
  1467 + decoration: BoxDecoration(
  1468 + borderRadius: BorderRadius.circular(
  1469 + ScreenUtil().setWidth(10)),
  1470 + color: MyColours.color_2bb5b7),
  1471 + child: Column(
  1472 + mainAxisAlignment: MainAxisAlignment.center,
  1473 + children: [
  1474 + Text(
  1475 + // "${_parseDateDay(date)}",
  1476 + '${Utils.addZeroNumber(date.day)}',
  1477 + style: TextStyle().copyWith(
  1478 + color: MyColours.color_ffffff,
  1479 + fontSize: ScreenUtil().setSp(32),
  1480 + fontWeight: FontWeight.bold),
  1481 + ),
  1482 + Text(
  1483 + "${_parseDateDay(date)}",
  1484 + // '${Utils.lunarCalendarHolidaysShow(date)}',
  1485 + style: TextStyle().copyWith(
  1486 + fontSize: ScreenUtil().setSp(22),
  1487 + color: MyColours.color_ffffff),
  1488 + )
  1489 + ],
  1490 + ),
  1491 + ),
  1492 + );
  1493 + // return Container(
  1494 + // decoration: BoxDecoration(
  1495 + // shape: BoxShape.circle,
  1496 + // border: Border.all(
  1497 + // color: MyColours.color_2bb5b7,
  1498 + // width: ScreenUtil().setWidth(2))),
  1499 + // alignment: Alignment.center,
  1500 + // margin: EdgeInsets.fromLTRB(
  1501 + // ScreenUtil().setWidth(12),
  1502 + // ScreenUtil().setWidth(12),
  1503 + // ScreenUtil().setWidth(12),
  1504 + // ScreenUtil().setWidth(32)),
  1505 + // padding: EdgeInsets.only(
  1506 + // bottom: ScreenUtil().setWidth(8),
  1507 + // left: ScreenUtil().setWidth(16),
  1508 + // right: ScreenUtil().setWidth(16),
  1509 + // top: ScreenUtil().setWidth(8)),
  1510 + // child: Text(
  1511 + // // '今',
  1512 + // '${Utils.addZeroNumber(date.day)}',
  1513 + // style: TextStyle().copyWith(
  1514 + // fontSize: ScreenUtil().setSp(32),
  1515 + // color: MyColours.color_2bb5b7),
  1516 + // ),
  1517 + // );
  1518 + },
  1519 + markersBuilder: (context, date, events, holidays) {
  1520 + final children = <Widget>[];
1448 1521
1449 - // if (events.isNotEmpty) {  
1450 - // children.add(  
1451 - // Positioned(  
1452 - // right: 1,  
1453 - // bottom: 1,  
1454 - // child: _buildEventsMarker(date, events),  
1455 - // ),  
1456 - // );  
1457 - // } 1522 + // if (events.isNotEmpty) {
  1523 + // children.add(
  1524 + // Positioned(
  1525 + // right: 1,
  1526 + // bottom: 1,
  1527 + // child: _buildEventsMarker(date, events),
  1528 + // ),
  1529 + // );
  1530 + // }
1458 1531
1459 - // if (holidays.isNotEmpty) {  
1460 - children.add(  
1461 - Positioned(  
1462 - right: ScreenUtil().setWidth(27),  
1463 - bottom: 0,  
1464 - top: ScreenUtil().setWidth(30),  
1465 - child: buildMarker(date)),  
1466 - // Align(  
1467 - // alignment: Alignment.bottomCenter,  
1468 - // child: buildMarker(date),  
1469 - // )  
1470 - );  
1471 - // } 1532 + // if (holidays.isNotEmpty) {
  1533 + children.add(
  1534 + Positioned(
  1535 + right: ScreenUtil().setWidth(27),
  1536 + bottom: 0,
  1537 + top: ScreenUtil().setWidth(30),
  1538 + child: buildMarker(date)),
  1539 + // Align(
  1540 + // alignment: Alignment.bottomCenter,
  1541 + // child: buildMarker(date),
  1542 + // )
  1543 + );
  1544 + // }
1472 1545
1473 - return children;  
1474 - },  
1475 - // singleMarkerBuilder: (context, dateTime, event) {  
1476 - // return Container(  
1477 - // width: ScreenUtil().setWidth(6),  
1478 - // height: ScreenUtil().setWidth(6),  
1479 - // margin:  
1480 - // const EdgeInsets.symmetric(horizontal: 0.3),  
1481 - // decoration: BoxDecoration(  
1482 - // shape: BoxShape.circle,  
1483 - // color: MyColours.color_ff0000,  
1484 - // ),  
1485 - // );  
1486 - // },  
1487 - ),  
1488 - ),  
1489 - Row(  
1490 - mainAxisAlignment: MainAxisAlignment.spaceEvenly,  
1491 - children: [  
1492 - RoundButton(  
1493 - onPressed: () async {  
1494 - _calendarController.setSelectedDay(DateTime.now());  
1495 - _setState(() {});  
1496 - },  
1497 - text: '回到今天',  
1498 - fontSize: 28,  
1499 - isBold: false,  
1500 - height: ScreenUtil().setWidth(70),  
1501 - width: ScreenUtil().setWidth(220),  
1502 - gradientStart: MyColours.color_2bb5b7,  
1503 - gradientEnd: MyColours.color_2bb5b7,  
1504 - radius: ScreenUtil().setWidth(10), 1546 + return [];
  1547 + },
  1548 + // singleMarkerBuilder: (context, dateTime, event) {
  1549 + // return Container(
  1550 + // width: ScreenUtil().setWidth(6),
  1551 + // height: ScreenUtil().setWidth(6),
  1552 + // margin:
  1553 + // const EdgeInsets.symmetric(horizontal: 0.3),
  1554 + // decoration: BoxDecoration(
  1555 + // shape: BoxShape.circle,
  1556 + // color: MyColours.color_ff0000,
  1557 + // ),
  1558 + // );
  1559 + // },
  1560 + ),
1505 ), 1561 ),
1506 - RoundButton(  
1507 - onPressed: () async {  
1508 - Navigator.pop(context);  
1509 - },  
1510 - text: '取消',  
1511 - fontSize: 28,  
1512 - isBold: false,  
1513 - textColor: MyColours.color_333333,  
1514 - borderColor: Color.fromRGBO(119, 119, 119, 1),  
1515 - height: ScreenUtil().setWidth(70),  
1516 - width: ScreenUtil().setWidth(220),  
1517 - gradientStart: MyColours.color_ffffff,  
1518 - gradientEnd: MyColours.color_ffffff,  
1519 - radius: ScreenUtil().setWidth(10), 1562 + VEmptyView(4),
  1563 + Row(
  1564 + mainAxisAlignment: MainAxisAlignment.spaceEvenly,
  1565 + children: [
  1566 + RoundButton(
  1567 + onPressed: () async {
  1568 + _calendarController
  1569 + .setSelectedDay(DateTime.now());
  1570 + _setState(() {});
  1571 + },
  1572 + text: '回到今天',
  1573 + fontSize: 28,
  1574 + isBold: false,
  1575 + height: ScreenUtil().setWidth(70),
  1576 + width: ScreenUtil().setWidth(220),
  1577 + gradientStart: MyColours.color_2bb5b7,
  1578 + gradientEnd: MyColours.color_2bb5b7,
  1579 + radius: ScreenUtil().setWidth(10),
  1580 + ),
  1581 + RoundButton(
  1582 + onPressed: () async {
  1583 + Navigator.pop(context);
  1584 + },
  1585 + text: '取消',
  1586 + fontSize: 28,
  1587 + isBold: false,
  1588 + textColor: MyColours.color_333333,
  1589 + borderColor: Color.fromRGBO(119, 119, 119, 1),
  1590 + height: ScreenUtil().setWidth(70),
  1591 + width: ScreenUtil().setWidth(220),
  1592 + gradientStart: MyColours.color_ffffff,
  1593 + gradientEnd: MyColours.color_ffffff,
  1594 + radius: ScreenUtil().setWidth(10),
  1595 + )
  1596 + ],
1520 ) 1597 )
1521 ], 1598 ],
1522 - )  
1523 - ],  
1524 - ) 1599 + ))
1525 1600
1526 // Positioned( 1601 // Positioned(
1527 // right: ScreenUtil().setWidth(62), 1602 // right: ScreenUtil().setWidth(62),
@@ -1551,7 +1626,7 @@ class DialogUtil { @@ -1551,7 +1626,7 @@ class DialogUtil {
1551 // ), 1626 // ),
1552 // ) 1627 // )
1553 // ], 1628 // ],
1554 - ); 1629 + ;
1555 }); 1630 });
1556 return SizedBox( 1631 return SizedBox(
1557 width: double.infinity, 1632 width: double.infinity,
@@ -11,6 +11,22 @@ class LunarCalendar { @@ -11,6 +11,22 @@ class LunarCalendar {
11 bool leap; 11 bool leap;
12 12
13 ///中文月名称 13 ///中文月名称
  14 + static List<String> chineseNumberShow = [
  15 + "一月",
  16 + "二月",
  17 + "三月",
  18 + "四月",
  19 + "五月",
  20 + "六月",
  21 + "七月",
  22 + "八月",
  23 + "九月",
  24 + "十月",
  25 + "冬月",
  26 + "腊月"
  27 + ];
  28 +
  29 + ///中文月名称
14 static List<String> chineseNumber = [ 30 static List<String> chineseNumber = [
15 "一", 31 "一",
16 "二", 32 "二",
@@ -276,6 +292,10 @@ class LunarCalendar { @@ -276,6 +292,10 @@ class LunarCalendar {
276 return chineseNumber[month - 1]; 292 return chineseNumber[month - 1];
277 } 293 }
278 294
  295 + String getChinaMonthStringShow() {
  296 + return chineseNumberShow[month - 1];
  297 + }
  298 +
279 String toString() { 299 String toString() {
280 return "$year" + 300 return "$year" +
281 "年" + 301 "年" +
@@ -28,8 +28,520 @@ import 'package:webview_flutter/webview_flutter.dart'; @@ -28,8 +28,520 @@ import 'package:webview_flutter/webview_flutter.dart';
28 import '../app.dart'; 28 import '../app.dart';
29 29
30 typedef BookTimeSetCallback = void Function(bool needChange); 30 typedef BookTimeSetCallback = void Function(bool needChange);
  31 +const int START_YEAR = 1901;
  32 +const int END_YEAR = 2050;
31 33
32 class Utils { 34 class Utils {
  35 + static List gLunarHolDay = [
  36 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
  37 + 0X77, //1901
  38 +
  39 + 0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X79, 0X69, 0X78,
  40 + 0X78, //1902
  41 +
  42 + 0X96, 0XA5, 0X87, 0X96, 0X87, 0X87, 0X79, 0X69, 0X69, 0X69, 0X78,
  43 + 0X78, //1903
  44 +
  45 + 0X86, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X78,
  46 + 0X87, //1904
  47 +
  48 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
  49 + 0X77, //1905
  50 +
  51 + 0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
  52 + 0X78, //1906
  53 +
  54 + 0X96, 0XA5, 0X87, 0X96, 0X87, 0X87, 0X79, 0X69, 0X69, 0X69, 0X78,
  55 + 0X78, //1907
  56 +
  57 + 0X86, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
  58 + 0X87, //1908
  59 +
  60 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
  61 + 0X77, //1909
  62 +
  63 + 0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
  64 + 0X78, //1910
  65 +
  66 + 0X96, 0XA5, 0X87, 0X96, 0X87, 0X87, 0X79, 0X69, 0X69, 0X69, 0X78,
  67 + 0X78, //1911
  68 +
  69 + 0X86, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
  70 + 0X87, //1912
  71 +
  72 + 0X95, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
  73 + 0X77, //1913
  74 +
  75 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
  76 + 0X78, //1914
  77 +
  78 + 0X96, 0XA5, 0X97, 0X96, 0X97, 0X87, 0X79, 0X79, 0X69, 0X69, 0X78,
  79 + 0X78, //1915
  80 +
  81 + 0X96, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
  82 + 0X87, //1916
  83 +
  84 + 0X95, 0XB4, 0X96, 0XA6, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
  85 + 0X87, //1917
  86 +
  87 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
  88 + 0X77, //1918
  89 +
  90 + 0X96, 0XA5, 0X97, 0X96, 0X97, 0X87, 0X79, 0X79, 0X69, 0X69, 0X78,
  91 + 0X78, //1919
  92 +
  93 + 0X96, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
  94 + 0X87, //1920
  95 +
  96 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
  97 + 0X87, //1921
  98 +
  99 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
  100 + 0X77, //1922
  101 +
  102 + 0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X69, 0X69, 0X78,
  103 + 0X78, //1923
  104 +
  105 + 0X96, 0XA5, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
  106 + 0X87, //1924
  107 +
  108 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
  109 + 0X87, //1925
  110 +
  111 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
  112 + 0X77, //1926
  113 +
  114 + 0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X79, 0X69, 0X78,
  115 + 0X78, //1927
  116 +
  117 + 0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
  118 + 0X87, //1928
  119 +
  120 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
  121 + 0X87, //1929
  122 +
  123 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
  124 + 0X77, //1930
  125 +
  126 + 0X96, 0XA4, 0X96, 0X96, 0X97, 0X87, 0X79, 0X79, 0X79, 0X69, 0X78,
  127 + 0X78, //1931
  128 +
  129 + 0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
  130 + 0X87, //1932
  131 +
  132 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
  133 + 0X87, //1933
  134 +
  135 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
  136 + 0X77, //1934
  137 +
  138 + 0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
  139 + 0X78, //1935
  140 +
  141 + 0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
  142 + 0X87, //1936
  143 +
  144 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
  145 + 0X87, //1937
  146 +
  147 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
  148 + 0X77, //1938
  149 +
  150 + 0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
  151 + 0X78, //1939
  152 +
  153 + 0X96, 0XA5, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
  154 + 0X87, //1940
  155 +
  156 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
  157 + 0X87, //1941
  158 +
  159 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
  160 + 0X77, //1942
  161 +
  162 + 0X96, 0XA4, 0X96, 0X96, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
  163 + 0X78, //1943
  164 +
  165 + 0X96, 0XA5, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
  166 + 0X87, //1944
  167 +
  168 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
  169 + 0X87, //1945
  170 +
  171 + 0X95, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
  172 + 0X77, //1946
  173 +
  174 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
  175 + 0X78, //1947
  176 +
  177 + 0X96, 0XA5, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
  178 + 0X87, //1948
  179 +
  180 + 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X79, 0X78, 0X79, 0X77,
  181 + 0X87, //1949
  182 +
  183 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
  184 + 0X77, //1950
  185 +
  186 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X79, 0X79, 0X79, 0X69, 0X78,
  187 + 0X78, //1951
  188 +
  189 + 0X96, 0XA5, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
  190 + 0X87, //1952
  191 +
  192 + 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
  193 + 0X87, //1953
  194 +
  195 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X68, 0X78,
  196 + 0X87, //1954
  197 +
  198 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
  199 + 0X77, //1955
  200 +
  201 + 0X96, 0XA5, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
  202 + 0X87, //1956
  203 +
  204 + 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
  205 + 0X87, //1957
  206 +
  207 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
  208 + 0X87, //1958
  209 +
  210 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
  211 + 0X77, //1959
  212 +
  213 + 0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87,
  214 + 0X87, //1960
  215 +
  216 + 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
  217 + 0X87, //1961
  218 +
  219 + 0X96, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
  220 + 0X87, //1962
  221 +
  222 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
  223 + 0X77, //1963
  224 +
  225 + 0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87,
  226 + 0X87, //1964
  227 +
  228 + 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
  229 + 0X87, //1965
  230 +
  231 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
  232 + 0X87, //1966
  233 +
  234 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
  235 + 0X77, //1967
  236 +
  237 + 0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
  238 + 0X87, //1968
  239 +
  240 + 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
  241 + 0X87, //1969
  242 +
  243 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
  244 + 0X87, //1970
  245 +
  246 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X79, 0X69, 0X78,
  247 + 0X77, //1971
  248 +
  249 + 0X96, 0XA4, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
  250 + 0X87, //1972
  251 +
  252 + 0XA5, 0XB5, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
  253 + 0X87, //1973
  254 +
  255 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
  256 + 0X87, //1974
  257 +
  258 + 0X96, 0XB4, 0X96, 0XA6, 0X97, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
  259 + 0X77, //1975
  260 +
  261 + 0X96, 0XA4, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X89, 0X88, 0X78, 0X87,
  262 + 0X87, //1976
  263 +
  264 + 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
  265 + 0X87, //1977
  266 +
  267 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X78,
  268 + 0X87, //1978
  269 +
  270 + 0X96, 0XB4, 0X96, 0XA6, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
  271 + 0X77, //1979
  272 +
  273 + 0X96, 0XA4, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
  274 + 0X87, //1980
  275 +
  276 + 0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X77,
  277 + 0X87, //1981
  278 +
  279 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
  280 + 0X87, //1982
  281 +
  282 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X78, 0X79, 0X78, 0X69, 0X78,
  283 + 0X77, //1983
  284 +
  285 + 0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
  286 + 0X87, //1984
  287 +
  288 + 0XA5, 0XB4, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
  289 + 0X87, //1985
  290 +
  291 + 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
  292 + 0X87, //1986
  293 +
  294 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X79, 0X78, 0X69, 0X78,
  295 + 0X87, //1987
  296 +
  297 + 0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
  298 + 0X86, //1988
  299 +
  300 + 0XA5, 0XB4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87,
  301 + 0X87, //1989
  302 +
  303 + 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X79, 0X77,
  304 + 0X87, //1990
  305 +
  306 + 0X95, 0XB4, 0X96, 0XA5, 0X86, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
  307 + 0X87, //1991
  308 +
  309 + 0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
  310 + 0X86, //1992
  311 +
  312 + 0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87,
  313 + 0X87, //1993
  314 +
  315 + 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
  316 + 0X87, //1994
  317 +
  318 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X76, 0X78, 0X69, 0X78,
  319 + 0X87, //1995
  320 +
  321 + 0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
  322 + 0X86, //1996
  323 +
  324 + 0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
  325 + 0X87, //1997
  326 +
  327 + 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
  328 + 0X87, //1998
  329 +
  330 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
  331 + 0X87, //1999
  332 +
  333 + 0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
  334 + 0X86, //2000
  335 +
  336 + 0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
  337 + 0X87, //2001
  338 +
  339 + 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
  340 + 0X87, //2002
  341 +
  342 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
  343 + 0X87, //2003
  344 +
  345 + 0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
  346 + 0X86, //2004
  347 +
  348 + 0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
  349 + 0X87, //2005
  350 +
  351 + 0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
  352 + 0X87, //2006
  353 +
  354 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X69, 0X78,
  355 + 0X87, //2007
  356 +
  357 + 0X96, 0XB4, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87,
  358 + 0X86, //2008
  359 +
  360 + 0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
  361 + 0X87, //2009
  362 +
  363 + 0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
  364 + 0X87, //2010
  365 +
  366 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X78,
  367 + 0X87, //2011
  368 +
  369 + 0X96, 0XB4, 0XA5, 0XB5, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87,
  370 + 0X86, //2012
  371 +
  372 + 0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
  373 + 0X87, //2013
  374 +
  375 + 0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
  376 + 0X87, //2014
  377 +
  378 + 0X95, 0XB4, 0X96, 0XA5, 0X96, 0X97, 0X88, 0X78, 0X78, 0X79, 0X77,
  379 + 0X87, //2015
  380 +
  381 + 0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87,
  382 + 0X86, //2016
  383 +
  384 + 0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
  385 + 0X87, //2017
  386 +
  387 + 0XA5, 0XB4, 0XA6, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
  388 + 0X87, //2018
  389 +
  390 + 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X79, 0X77,
  391 + 0X87, //2019
  392 +
  393 + 0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
  394 + 0X86, //2020
  395 +
  396 + 0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
  397 + 0X86, //2021
  398 +
  399 + 0XA5, 0XB4, 0XA5, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X88, 0X78, 0X87,
  400 + 0X87, //2022
  401 +
  402 + 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X79, 0X77,
  403 + 0X87, //2023
  404 +
  405 + 0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
  406 + 0X96, //2024
  407 +
  408 + 0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
  409 + 0X86, //2025
  410 +
  411 + 0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
  412 + 0X87, //2026
  413 +
  414 + 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
  415 + 0X87, //2027
  416 +
  417 + 0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
  418 + 0X96, //2028
  419 +
  420 + 0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
  421 + 0X86, //2029
  422 +
  423 + 0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
  424 + 0X87, //2030
  425 +
  426 + 0XA5, 0XB4, 0X96, 0XA5, 0X96, 0X96, 0X88, 0X78, 0X78, 0X78, 0X87,
  427 + 0X87, //2031
  428 +
  429 + 0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
  430 + 0X96, //2032
  431 +
  432 + 0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
  433 + 0X86, //2033
  434 +
  435 + 0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X78, 0X88, 0X78, 0X87,
  436 + 0X87, //2034
  437 +
  438 + 0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
  439 + 0X87, //2035
  440 +
  441 + 0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
  442 + 0X96, //2036
  443 +
  444 + 0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
  445 + 0X86, //2037
  446 +
  447 + 0XA5, 0XB3, 0XA5, 0XA5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
  448 + 0X87, //2038
  449 +
  450 + 0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
  451 + 0X87, //2039
  452 +
  453 + 0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
  454 + 0X96, //2040
  455 +
  456 + 0XA5, 0XC3, 0XA5, 0XB5, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87,
  457 + 0X86, //2041
  458 +
  459 + 0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X88, 0X88, 0X88, 0X78, 0X87,
  460 + 0X87, //2042
  461 +
  462 + 0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
  463 + 0X87, //2043
  464 +
  465 + 0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X88, 0X87,
  466 + 0X96, //2044
  467 +
  468 + 0XA5, 0XC3, 0XA5, 0XB4, 0XA5, 0XA6, 0X87, 0X88, 0X87, 0X78, 0X87,
  469 + 0X86, //2045
  470 +
  471 + 0XA5, 0XB3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X88, 0X78, 0X87,
  472 + 0X87, //2046
  473 +
  474 + 0XA5, 0XB4, 0X96, 0XA5, 0XA6, 0X96, 0X88, 0X88, 0X78, 0X78, 0X87,
  475 + 0X87, //2047
  476 +
  477 + 0X95, 0XB4, 0XA5, 0XB4, 0XA5, 0XA5, 0X97, 0X87, 0X87, 0X88, 0X86,
  478 + 0X96, //2048
  479 +
  480 + 0XA4, 0XC3, 0XA5, 0XA5, 0XA5, 0XA6, 0X97, 0X87, 0X87, 0X78, 0X87,
  481 + 0X86, //2049
  482 +
  483 + 0XA5, 0XC3, 0XA5, 0XB5, 0XA6, 0XA6, 0X87, 0X88, 0X78, 0X78, 0X87,
  484 + 0X87 //2050
  485 + ];
  486 +
  487 + static String getLunarSpecialDate(DateTime dateTime) {
  488 + String _day = '';
  489 + int iYear = dateTime.year;
  490 + int iMonth = dateTime.month;
  491 + int iDay = dateTime.day;
  492 + List chineseDays = [
  493 + "小寒",
  494 + "大寒",
  495 + "立春",
  496 + "雨水",
  497 + "惊蛰",
  498 + "春分",
  499 + "清明",
  500 + "谷雨",
  501 + "立夏",
  502 + "小满",
  503 + "芒种",
  504 + "夏至",
  505 + "小暑",
  506 + "大暑",
  507 + "立秋",
  508 + "处暑",
  509 + "白露",
  510 + "秋分",
  511 + "寒露",
  512 + "霜降",
  513 + "立冬",
  514 + "小雪",
  515 + "大雪",
  516 + "冬至"
  517 + ];
  518 +
  519 + int array_index = (iYear - START_YEAR) * 12 + iMonth - 1;
  520 +
  521 + int flag = gLunarHolDay[array_index];
  522 +
  523 + int day;
  524 +
  525 + if (iDay < 15)
  526 + day = 15 - ((flag >> 4) & 0x0f);
  527 + else
  528 + day = ((flag) & 0x0f) + 15;
  529 +
  530 + int index = -1;
  531 +
  532 + if (iDay == day) {
  533 + index = (iMonth - 1) * 2 + (iDay > 15 ? 1 : 0);
  534 + }
  535 +
  536 + if (index >= 0 && index < chineseDays.length) {
  537 + _day = chineseDays[index];
  538 +
  539 + return _day;
  540 + } else {
  541 + return '';
  542 + }
  543 + }
  544 +
33 static String lunarCalendarUtils(DateTime day) { 545 static String lunarCalendarUtils(DateTime day) {
34 LunarCalendar lunarCalendar = LunarCalendar(day); 546 LunarCalendar lunarCalendar = LunarCalendar(day);
35 String time = 547 String time =
@@ -37,6 +549,68 @@ class Utils { @@ -37,6 +549,68 @@ class Utils {
37 return time; 549 return time;
38 } 550 }
39 551
  552 + static String lunarCalendarUtilsShow(DateTime day) {
  553 + LunarCalendar lunarCalendar = LunarCalendar(day);
  554 + if (lunarCalendar.day == 1) {
  555 + return lunarCalendar.getChinaMonthStringShow();
  556 + }
  557 + // String time =
  558 + // '${lunarCalendar.getChinaMonthString()}月${LunarCalendar.getChinaDayString(lunarCalendar.day)}';
  559 + return LunarCalendar.getChinaDayString(lunarCalendar.day);
  560 + }
  561 +
  562 + //农历节日 *表示放假日 日历上面使用
  563 + static String lunarCalendarHolidaysShow(DateTime day) {
  564 + LunarCalendar lunarCalendar = LunarCalendar(day);
  565 + //阴历月-日
  566 + String keyLunar =
  567 + addZeroNumber(lunarCalendar.month) + addZeroNumber(lunarCalendar.day);
  568 + //阳历月-日
  569 + String keySolar =
  570 + Utils.addZeroNumber(day.month) + Utils.addZeroNumber(day.day);
  571 + Map<String, String> holiday1 = {
  572 + "0101": "春节",
  573 + "0102": "大年初二",
  574 + "0103": "大年初三",
  575 + "0104": "大年初四",
  576 + "0105": "大年初五",
  577 + "0106": "大年初六",
  578 + "0107": "大年初七",
  579 + "0115": "元宵节",
  580 + "0505": "端午节",
  581 + "0707": "七夕情人节",
  582 + "0815": "中秋节",
  583 + "0909": "重阳节",
  584 + "1208": "腊八节",
  585 + "1223": "过小年",
  586 + "0100": "除夕"
  587 + };
  588 + // Map<String, String> holiday2 = {
  589 + // "0101": '元旦',
  590 + // "0214": "情人节",
  591 + // "0308": "妇女节",
  592 + // "0501": "劳动节",
  593 + // "0504": "青年节",
  594 + // "0601": "国际儿童节",
  595 + // "0801": "八一建军节",
  596 + // "0910": "教师节",
  597 + // "1001": "国庆节",
  598 + // "1224": "平安夜",
  599 + // "1225": "圣诞节",
  600 + // };
  601 + if (holiday1.containsKey(keyLunar)) {
  602 + return holiday1[keyLunar];
  603 + }
  604 + String jieqi = getLunarSpecialDate(day);
  605 + if (jieqi != '') {
  606 + return jieqi;
  607 + }
  608 + // if (holiday2.containsKey(keySolar)) {
  609 + // return holiday2[keySolar];
  610 + // }
  611 + return lunarCalendarUtilsShow(day);
  612 + }
  613 +
40 //农历节日 *表示放假日 614 //农历节日 *表示放假日
41 static String lunarCalendarHolidays(DateTime day) { 615 static String lunarCalendarHolidays(DateTime day) {
42 LunarCalendar lunarCalendar = LunarCalendar(day); 616 LunarCalendar lunarCalendar = LunarCalendar(day);