feast_board.dart 20.3 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450
/**
 * 宴会看板
 */

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:one_key/res/colors.dart';
import 'package:one_key/widgets/system_app_bar.dart';
import 'package:table_calendar/table_calendar.dart';

import '../../utils/utils.dart';
import '../../widgets/round_button.dart';
import '../../widgets/v_empty_view.dart';
import 'feast_board.item.dart';

class FeastBoardPage extends StatefulWidget {
  FeastBoardPage({Key key}) : super(key: key);

  @override
  _FeastBoardPageState createState() => _FeastBoardPageState();
}

class _FeastBoardPageState extends State<FeastBoardPage> {
  CalendarController _calendarController = CalendarController();
  DateTime dateTimeNow; //当前日期
  bool calendarShow = true; //日历展开
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    dateTimeNow = DateTime.now();
    Utils.changeStatusColor(color: MyColours.color_438E93);
  }

  //解析返回显示的日期
  static String _parseDateDay(DateTime dateTime) {
    DateTime now = DateTime.now();
    if (Utils.isOneDay(dateTime, now)) {
      return "今";
    }
    //  else if (Utils.isOneDay(dateTime, now.add(Duration(days: 1)))) {
    //   return "明";
    // } else if (Utils.isOneDay(dateTime, now.add(Duration(days: 2)))) {
    //   return "后";
    // }
    else {
      return '${Utils.lunarCalendarHolidaysShow(dateTime)}';
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: MyColours.color_ffffff,
      appBar: SystemAppBar(
        '宴会看板',
        needWhite: true,
        bgColor: MyColours.color_438E93,
        titleColor: MyColours.color_F6F6F6,
        onTap: () {
          Navigator.pop(context);
        },
      ),
      body: Column(
        children: <Widget>[
          Container(
              decoration:
                  BoxDecoration(color: MyColours.color_ffffff, boxShadow: [
                BoxShadow(
                    offset: Offset(
                      0,
                      ScreenUtil().setWidth(8),
                    ),
                    blurRadius: ScreenUtil().setWidth(8),
                    color: MyColours.color_26000000)
              ]),
              child: Column(
                children: [
                  TableCalendar(
                    // rowHeight: ScreenUtil().setWidth(100),
                    rowHeight: ScreenUtil().setWidth(114),
                    calendarController: _calendarController,
                    initialSelectedDay: dateTimeNow,
                    onDaySelected: (day, events, holidays) {
                      if (!Utils.isOneDay(day, dateTimeNow)) {
                        //不是一天
                        dateTimeNow = day;
                      }
                    },
                    // holidays: _holidays,
                    availableGestures: AvailableGestures.none,

                    locale: "zh_CN",
                    initialCalendarFormat: calendarShow
                        ? CalendarFormat.month
                        : CalendarFormat.week,
                    headerStyle: HeaderStyle(
                      decoration: BoxDecoration(color: MyColours.color_ffffff),
                      headerPadding: EdgeInsets.symmetric(
                          // vertical: ScreenUtil().setWidth(24),
                          horizontal: ScreenUtil().setWidth(66)),
                      formatButtonVisible: false,
                      centerHeaderTitle: true,
                      titleTextBuilder: (dateTime, _) {
                        return dateTime.year.toString() +
                            ' ' +
                            "年" +
                            ' ' +
                            dateTime.month.toString() +
                            ' ' +
                            "月";
                      },
                      titleTextStyle: TextStyle(
                          fontWeight: FontWeight.bold,
                          color: MyColours.color_515151,
                          fontSize: ScreenUtil().setSp(44)),
                      leftChevronIcon: Icon(Icons.chevron_left,
                          color: MyColours.color_000000,
                          size: ScreenUtil().setWidth(48)),
                      rightChevronIcon: Icon(Icons.chevron_right,
                          color: MyColours.color_000000,
                          size: ScreenUtil().setWidth(48)),
                    ),
                    calendarStyle: CalendarStyle(
                      contentPadding:
                          EdgeInsets.only(bottom: ScreenUtil().setWidth(8)),
                      weekdayStyle: TextStyle(
                          color: MyColours.color_2bb5b7,
                          fontSize: ScreenUtil().setSp(32)),
                      weekendStyle: TextStyle(
                          color: MyColours.color_f49a5e,
                          fontSize: ScreenUtil().setSp(32)),
                      selectedColor: MyColours.color_2bb5b7,
                      outsideDaysVisible: false,
                    ),
                    builders: CalendarBuilders(
                      dowWeekdayBuilder: (context, weekday) {
                        return Container(
                          color: MyColours.color_ffffff,
                          alignment: Alignment.center,
                          // margin:
                          //     EdgeInsets.only(bottom: ScreenUtil().setWidth(20)),
                          padding: EdgeInsets.symmetric(
                              vertical: ScreenUtil().setWidth(15)),
                          child: Text(
                            weekday,
                            style: TextStyle(
                                color: MyColours.color_999999,
                                fontSize: ScreenUtil().setSp(32)),
                          ),
                        );
                      },
                      dayBuilder: (context, date, _) {
                        return Container(
                          // height: ScreenUtil().setWidth(210),
                          decoration: BoxDecoration(
                              // shape: BoxShape.circle,
                              // color: Colors.blue,
                              ),
                          // alignment: Alignment.center,
                          // margin: EdgeInsets.fromLTRB(
                          //     ScreenUtil().setWidth(12),
                          //     ScreenUtil().setWidth(12),
                          //     ScreenUtil().setWidth(12),
                          //     ScreenUtil().setWidth(10)),
                          // padding: EdgeInsets.symmetric(
                          //   // horizontal: ScreenUtil().setWidth(12),
                          //   vertical: ScreenUtil().setWidth(8),
                          // ),
                          child: Column(
                            mainAxisAlignment: MainAxisAlignment.center,
                            children: [
                              Text(
                                  // "${_parseDateDay(date)}",
                                  // '${Utils.addZeroNumber(date.day)}',
                                  '${date.day}',
                                  style: TextStyle().copyWith(
                                      fontSize: ScreenUtil().setSp(32),
                                      color: MyColours.color_515151,
                                      fontWeight: FontWeight.bold)),
                              VEmptyView(4),
                              // Text(
                              //   // "${_parseDateDay(date)}",
                              //   '${Utils.getLunarSpecialDate(date)}',
                              //   style: TextStyle().copyWith(
                              //       fontSize: ScreenUtil().setSp(22),
                              //       color: MyColours.color_353535),
                              // ),
                              Text(
                                "${_parseDateDay(date)}",
                                style: TextStyle().copyWith(
                                    fontSize: ScreenUtil().setSp(20),
                                    color: MyColours.color_515151),
                              ),
                              Container(
                                margin: EdgeInsets.symmetric(
                                    vertical: ScreenUtil().setWidth(4)),
                                width: ScreenUtil().setWidth(16),
                                height: ScreenUtil().setWidth(16),
                                decoration: BoxDecoration(
                                    color: MyColours.color_E34D59,
                                    borderRadius: BorderRadius.circular(
                                        ScreenUtil().radius(8))),
                              )
                            ],
                          ),
                        );
                      },
                      selectedDayBuilder: (context, date, _) {
                        return Container(
                          // alignment: Alignment.center,
                          // margin: EdgeInsets.fromLTRB(
                          //     ScreenUtil().setWidth(12),
                          //     ScreenUtil().setWidth(12),
                          //     ScreenUtil().setWidth(12),
                          //     ScreenUtil().setWidth(32)),
                          padding: EdgeInsets.only(
                              bottom: ScreenUtil().setWidth(10),
                              left: ScreenUtil().setWidth(5),
                              right: ScreenUtil().setWidth(5),
                              top: ScreenUtil().setWidth(10)),
                          child: Container(
                            decoration: BoxDecoration(
                                borderRadius: BorderRadius.circular(
                                    ScreenUtil().setWidth(10)),
                                color: MyColours.color_438E93),
                            child: Column(
                              mainAxisAlignment: MainAxisAlignment.center,
                              children: [
                                Text(
                                  // "${_parseDateDay(date)}",
                                  // '${Utils.addZeroNumber(date.day)}',
                                  '${date.day}',
                                  style: TextStyle().copyWith(
                                      color: MyColours.color_F6F6F6,
                                      fontSize: ScreenUtil().setSp(32),
                                      fontWeight: FontWeight.bold),
                                ),
                                Text(
                                  "${_parseDateDay(date)}",
                                  // '${Utils.lunarCalendarHolidaysShow(date)}',
                                  style: TextStyle().copyWith(
                                      fontSize: ScreenUtil().setSp(22),
                                      color: MyColours.color_F6F6F6),
                                ),
                                Container(
                                  margin: EdgeInsets.symmetric(
                                      vertical: ScreenUtil().setWidth(4)),
                                  width: ScreenUtil().setWidth(16),
                                  height: ScreenUtil().setWidth(16),
                                  decoration: BoxDecoration(
                                      color: MyColours.color_E34D59,
                                      borderRadius: BorderRadius.circular(
                                          ScreenUtil().radius(8))),
                                )
                              ],
                            ),
                          ),
                        );
                      },
                      todayDayBuilder: (context, date, _) {
                        return Container(
                          // alignment: Alignment.center,
                          // margin: EdgeInsets.fromLTRB(
                          //     ScreenUtil().setWidth(12),
                          //     ScreenUtil().setWidth(12),
                          //     ScreenUtil().setWidth(12),
                          //     ScreenUtil().setWidth(32)),
                          padding: EdgeInsets.only(
                              bottom: ScreenUtil().setWidth(10),
                              left: ScreenUtil().setWidth(5),
                              right: ScreenUtil().setWidth(5),
                              top: ScreenUtil().setWidth(10)),
                          child: Container(
                            decoration: BoxDecoration(
                                borderRadius: BorderRadius.circular(
                                    ScreenUtil().setWidth(10)),
                                color: MyColours.color_2bb5b7),
                            child: Column(
                              mainAxisAlignment: MainAxisAlignment.center,
                              children: [
                                Text(
                                  // "${_parseDateDay(date)}",
                                  // '${Utils.addZeroNumber(date.day)}',
                                  '${date.day}',
                                  style: TextStyle().copyWith(
                                      color: MyColours.color_F6F6F6,
                                      fontSize: ScreenUtil().setSp(32),
                                      fontWeight: FontWeight.bold),
                                ),
                                Text(
                                  "${_parseDateDay(date)}",
                                  // '${Utils.lunarCalendarHolidaysShow(date)}',
                                  style: TextStyle().copyWith(
                                      fontSize: ScreenUtil().setSp(22),
                                      color: MyColours.color_F6F6F6),
                                ),
                                Container(
                                  margin: EdgeInsets.symmetric(
                                      vertical: ScreenUtil().setWidth(4)),
                                  width: ScreenUtil().setWidth(16),
                                  height: ScreenUtil().setWidth(16),
                                  decoration: BoxDecoration(
                                      color: MyColours.color_E34D59,
                                      borderRadius: BorderRadius.circular(
                                          ScreenUtil().radius(8))),
                                )
                              ],
                            ),
                          ),
                        );
                        // return Container(
                        //   decoration: BoxDecoration(
                        //       shape: BoxShape.circle,
                        //       border: Border.all(
                        //           color: MyColours.color_2bb5b7,
                        //           width: ScreenUtil().setWidth(2))),
                        //   alignment: Alignment.center,
                        //   margin: EdgeInsets.fromLTRB(
                        //       ScreenUtil().setWidth(12),
                        //       ScreenUtil().setWidth(12),
                        //       ScreenUtil().setWidth(12),
                        //       ScreenUtil().setWidth(32)),
                        //   padding: EdgeInsets.only(
                        //       bottom: ScreenUtil().setWidth(8),
                        //       left: ScreenUtil().setWidth(16),
                        //       right: ScreenUtil().setWidth(16),
                        //       top: ScreenUtil().setWidth(8)),
                        //   child: Text(
                        //     // '今',
                        //     '${Utils.addZeroNumber(date.day)}',
                        //     style: TextStyle().copyWith(
                        //         fontSize: ScreenUtil().setSp(32),
                        //         color: MyColours.color_2bb5b7),
                        //   ),
                        // );
                      },
                      markersBuilder: (context, date, events, holidays) {
                        final children = <Widget>[];

                        // if (events.isNotEmpty) {
                        //   children.add(
                        //     Positioned(
                        //       right: 1,
                        //       bottom: 1,
                        //       child: _buildEventsMarker(date, events),
                        //     ),
                        //   );
                        // }

                        // if (holidays.isNotEmpty) {
                        // children.add(
                        //   Positioned(
                        //       right: ScreenUtil().setWidth(27),
                        //       bottom: 0,
                        //       top: ScreenUtil().setWidth(30),
                        //       child: buildMarker(date)),
                        // Align(
                        //   alignment: Alignment.bottomCenter,
                        //   child: buildMarker(date),
                        // )
                        // );
                        // }

                        return [];
                      },
                      // singleMarkerBuilder: (context, dateTime, event) {
                      //   return Container(
                      //     width: ScreenUtil().setWidth(6),
                      //     height: ScreenUtil().setWidth(6),
                      //     margin:
                      //         const EdgeInsets.symmetric(horizontal: 0.3),
                      //     decoration: BoxDecoration(
                      //       shape: BoxShape.circle,
                      //       color: MyColours.color_ff0000,
                      //     ),
                      //   );
                      // },
                    ),
                  ),
                  VEmptyView(4),
                  InkWell(
                      onTap: () {
                        calendarShow = !calendarShow;

                        if (calendarShow) {
                          _calendarController
                              .setCalendarFormat(CalendarFormat.month);
                        } else {
                          _calendarController
                              .setCalendarFormat(CalendarFormat.week);
                        }
                        setState(() {});
                      },
                      child: Image.asset(
                          Utils.getImgPath(calendarShow
                              ? 'y_chevron_up_circle'
                              : 'y_chevron_down_circle'),
                          width: ScreenUtil().setWidth(32))),
                  VEmptyView(32),
                ],
              )),
          VEmptyView(48),
          Expanded(
              child: ListView.builder(
            padding: EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(8)),
            itemBuilder: (context, index) {
              return FeastBoardItem();
            },
            itemCount: 100,
          )),
          Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              RoundButton(
                onPressed: () async {
                  _calendarController.setSelectedDay(DateTime.now());
                  setState(() {});
                },
                text: '回到今天',
                fontSize: 28,
                isBold: false,
                height: ScreenUtil().setWidth(70),
                width: ScreenUtil().setWidth(220),
                gradientStart: MyColours.color_2bb5b7,
                gradientEnd: MyColours.color_2bb5b7,
                radius: ScreenUtil().setWidth(10),
              ),
              RoundButton(
                onPressed: () async {
                  Navigator.pop(context);
                },
                text: '取消',
                fontSize: 28,
                isBold: false,
                textColor: MyColours.color_333333,
                borderColor: Color.fromRGBO(119, 119, 119, 1),
                height: ScreenUtil().setWidth(70),
                width: ScreenUtil().setWidth(220),
                gradientStart: Colors.transparent,
                gradientEnd: Colors.transparent,
                radius: ScreenUtil().setWidth(10),
              )
            ],
          ),
        ],
      ),
    );
  }
}