set_time_widget.dart 5.56 KB
import 'package:flutter/material.dart';
import 'package:one_key/utils/dialog_util.dart';
import 'package:one_key/utils/utils.dart';

typedef SetTimeCallback = void Function(List value);

class SetTimeWidget {
  static SetTimeWidget init = SetTimeWidget();
  static List dateData = [
    {
      '深夜00时': [00, 15, 30, 45]
    },
    {
      '深夜01时': [00, 15, 30, 45]
    },
    {
      '深夜02时': [00, 15, 30, 45]
    },
    {
      '深夜03时': [00, 15, 30, 45]
    },
    {
      '深夜04时': [00, 15, 30, 45]
    },
    {
      '深夜05时': [00, 15, 30, 45]
    },
    {
      '早上06时': [00, 15, 30, 45]
    },
    {
      '早上07时': [00, 15, 30, 45]
    },
    {
      '早上08时': [00, 15, 30, 45]
    },
    {
      '早上09时': [00, 15, 30, 45]
    },
    {
      '中午10时': [00, 15, 30, 45]
    },
    {
      '中午11时': [00, 15, 30, 45]
    },
    {
      '中午12时': [00, 15, 30, 45]
    },
    {
      '中午13时': [00, 15, 30, 45]
    },
    {
      '中午14时': [00, 15, 30, 45]
    },
    {
      '下午15时': [00, 15, 30, 45]
    },
    {
      '下午16时': [00, 15, 30, 45]
    },
    {
      '下午17时': [00, 15, 30, 45]
    },
    {
      '下午18时': [00, 15, 30, 45]
    },
    {
      '晚上19时': [00, 15, 30, 45]
    },
    {
      '晚上20时': [00, 15, 30, 45]
    },
    {
      '晚上21时': [00, 15, 30, 45]
    },
    {
      '晚上22时': [00, 15, 30, 45]
    },
    {
      '晚上23时': [00, 15, 30, 45]
    }
  ];

  List feastDateData;

  List getFeastDateData(String hourAndMinuteStr) {
    // '00:00-00:00'
    List hm = _getHourAndMinute(hourAndMinuteStr);
    List temp = [];
    hm.forEach((e) {
      Map map = {e: hm};
      temp.add(map);
    });
    feastDateData = temp;
    return temp;
  }

//根据获取时间 11:00-12:30 获取30分钟间隔组装的数组
  _getHourAndMinute(String hourAndMinuteStr) {
    List tempDate = hourAndMinuteStr.split("-");
    String beginDate = tempDate[0];
    String endDate = tempDate[1];
    List tempHour = beginDate.split(':');

    /*获取开始小时*/
    int beginHour = int.parse(tempHour[0]);
    /*获取开始分钟*/
    int beginMinute = int.parse(tempHour[1]);
    if (beginMinute == 15) {
      beginMinute = 30;
    } else if (beginMinute == 45) {
      beginHour++;
      beginMinute = 0;
    }
    List endTemp = endDate.split(':');
    /*获取结束小时*/
    int endHour = int.parse(endTemp[0]);
    /*获取结束分钟*/
    int endMinute = int.parse(endTemp[1]);
    if (endMinute == 15) {
      endDate = '${endTemp[0]}:00';
    } else if (endMinute == 45) {
      endDate = '${endTemp[0]}:30';
    }
    List res = [];
    bool tempLimit = true;
    while (tempLimit) {
      String temp = _dealTime(beginHour, beginMinute);

      // bool tempSelect = false;

      // Map tempMap = {'title': temp, 'select': tempSelect};
      res.add(temp);
      if (temp == endDate) {
        tempLimit = false;
        break;
      }
      if (beginMinute == 30) {
        beginHour++;
        if (beginHour >= 24) {
          beginHour = 0;
        }
      }
      beginMinute = (beginMinute + 30) % 60;
    }
    return res;
  }

  /// 根据时间和分钟组装 格式:11:00
  _dealTime(int begin, int mm) {
    String sb = '';
    if (begin < 10) {
      sb = '0$begin';
    } else {
      sb = '$begin';
    }
    sb = '$sb:';
    if (mm < 10) {
      sb = '${sb}0${mm}';
    } else {
      sb = '${sb}${mm}';
    }
    return sb;
  }

  showFeastTimeSelector(
      context, data, start, end, SetTimeCallback setTimeCallback) {
    // DialogUtil.showPickerDurationSelect(context);
    DialogUtil.showSelectCusmanDialogNeedCustomHeader(context, data, (value) {
      setTimeCallback(value);
    }, cancelText: '', title: '选择时间', selecteds: [
      _getFirSelectedFeast(start, data),
      _getFirSelectedFeast(end, data)
    ]).then((value) {
      print(value);
    });
  }

  //宴会 ------ 第一列当前选中第几个
  _getFirSelectedFeast(String start, List data) {
    for (int i = 0; i < data.length; i++) {
      Map map = data[i];
      String key = map.keys.first;
      if (key.contains(start)) {
        return i;
      }
    }
    return 0;
  }

  String getSelectTitle(int value) {
    if (feastDateData.length > 0) {
      Map map = feastDateData[0];
      List<dynamic> temp = map[map.keys.first];
      return temp[value];
    }
  }

  showTimeSelector(
      context, data, hourAndMinute, SetTimeCallback setTimeCallback) {
    DialogUtil.showSelectCusmanTimerDialog(context, data, (value) {
      setTimeCallback(value);
    }, selecteds: [
      _getFirSelected(hourAndMinute, data),
      _getSecSelected(hourAndMinute, data)
    ]).then((value) {
      print(value);
    });
  }

  // 第一列当前选中第几个
  _getFirSelected(String hourAndMinute, List data) {
    String hour = Utils.getHourFromhourAndMinute(hourAndMinute);
    for (int i = 0; i < data.length; i++) {
      Map map = data[i];
      String key = map.keys.first;
      if (key.contains(hour)) {
        return i;
      }
    }
    return 0;
  }

  // 第二列当前选中第几个
  _getSecSelected(String hourAndMinute, List data) {
    String minute = Utils.getMinuteFromhourAndMinute(hourAndMinute);

    int indexLeft = _getFirSelected(hourAndMinute, data); //第一列选中的index

    Map map = data[indexLeft];
    List list = map.values.last;
    int item = int.parse(minute);
    return list.indexOf(item);
    // if (minute == '00') {
    //   return 0;
    // } else if (minute == '15') {
    //   return 1;
    // } else if (minute == '30') {
    //   return 2;
    // }
    // return 3;
  }
}