美文网首页Flutter教学
Flutter(23):Material组件之Date & Ti

Flutter(23):Material组件之Date & Ti

作者: starryxp | 来源:发表于2020-09-29 15:39 被阅读0次

Flutter教学目录持续更新中

Github源代码持续更新中

1.Date & Time Pickers介绍

  • DatePicker:日期选择器
  • DateRangePicker:范围日期选择器
  • TimePicker:时间选择器

2.DatePicker属性

  • context:BuildContext
  • initialDate:DateTime 初始化选中日期
  • firstDate:DateTime 日历开始日期
  • lastDate:DateTime 日历结束日期
  • currentDate:DateTime 当前日期
  • initialEntryMode:DatePickerEntryMode.calendar 初始化样式,是日历样式还是输入框样式
  • selectableDayPredicate:SelectableDayPredicate 日历可选日期范围
  • helpText:帮助文本
  • cancelText:取消文本
  • confirmText:确认文本
  • locale:Locale
  • textDirection:TextDirection 文本方向
  • builder:TransitionBuilder
  • initialDatePickerMode:DatePickerMode.day 日历初始化展示日还是年
  • errorFormatText:DatePickerEntryMode.input模式下输入日期时格式错误提示
  • errorInvalidText:DatePickerEntryMode.input模式下日期超出范围提醒
  • fieldHintText:DatePickerEntryMode.input模式下日期输入的提示文本
  • fieldLabelText:DatePickerEntryMode.input模式下日期输入悬浮提示文本

3.DateRangePicker属性

  • context:BuildContext
  • initialDateRange:DateTime 初始化选中日期范围
  • firstDate:DateTime 日历开始日期
  • lastDate:DateTime 日历结束日期
  • currentDate:DateTime 当前日期
  • initialEntryMode:DatePickerEntryMode.calendar 初始化样式,是日历样式还是输入框样式
  • helpText:帮助文本
  • cancelText:取消文本
  • confirmText:确认文本
  • saveText: 保存文本
  • locale:Locale
  • textDirection:TextDirection 文本方向
  • builder:TransitionBuilder
  • initialDatePickerMode:DatePickerMode.day 日历初始化展示日还是年
  • errorFormatText:DatePickerEntryMode.input模式下输入日期时格式错误提示
  • errorInvalidText:DatePickerEntryMode.input模式下日期超出范围提醒
  • fieldStartLabelText: DatePickerEntryMode.input模式下开始日期悬浮提示
  • fieldStartHintText: DatePickerEntryMode.input模式下开始日期输入提示
  • fieldEndHintText: DatePickerEntryMode.input模式下结束日期悬浮提示
  • fieldEndLabelText: DatePickerEntryMode.input模式下结束日期输入提示

4.TimePicker属性

  • context,
  • initialTime:TimeOfDay 初始化时间
  • builder:TransitionBuilder
  • initialEntryMode:TimePickerEntryMode.dial
  • helpText:帮助文本
  • cancelText:取消文本
  • confirmText:确认文本

5. DatePicker

  • selectableDayPredicate这个属性,这个是控制日历可点选范围了,返回true就是可选,返回false就是不可选,如果设置了选择范围吗,initialDate的日期必须是在可选范围之内,不然会报错
  • initialEntryMode是决定日历初始样式的,一种是输入样式,一种是日历样式


    DatePickerEntryMode.calendar.jpg
DatePickerEntryMode.input.jpg
  • initialDatePickerMode是决定日历样式下是直接展示日还是展示年,选则年之后再展示日
DatePickerMode.day.jpg DatePickerMode.year.jpg
  • builder这个属性可以设置日历的样式,例如夜间模式


    1601364056701.jpg
_showDatePicker() async {
    var result = await showDatePicker(
      context: context,
      initialDate: DateTime(2020, 5, 10),
      firstDate: DateTime(2019, 2, 10),
      lastDate: DateTime(2021, 2, 10),
      currentDate: DateTime(2020, 5, 12),
      initialEntryMode: DatePickerEntryMode.calendar,
      selectableDayPredicate: (nowDate) {
        return nowDate.isAfter(DateTime(2020, 5, 9)) &&
            nowDate.isBefore(DateTime(2020, 5, 22));
      },
      helpText: '帮助文本:这是一个单选日期选择器',
      cancelText: '取消',
      confirmText: '确定',
      initialDatePickerMode: DatePickerMode.day,
      errorFormatText: '输入日期格式错误',
      errorInvalidText: '输入日期超出可选范围',
      fieldHintText: '请输入日期',
      fieldLabelText: '日期',
      textDirection: TextDirection.ltr,
      builder: (context, widget) {
        return Theme(
          data: ThemeData.dark(),
          child: widget,
        );
      },
    );
    setState(() {
      if (result != null) {
        _date = '${result.year}年${result.month}月${result.day}日';
      }
    });
  }

6.DateRangePicker

这个跟DatePicker区别不大,就是单选变范围选择


1601364416894.jpg 1601364431264.jpg
_showDateRangePicker() async {
    var result = await showDateRangePicker(
      context: context,
      initialDateRange: DateTimeRange(
          start: DateTime(2020, 5, 9), end: DateTime(2020, 5, 22)),
      firstDate: DateTime(2020, 4, 10),
      lastDate: DateTime(2020, 6, 10),
      currentDate: DateTime(2020, 5, 12),
      initialEntryMode: DatePickerEntryMode.calendar,
      helpText: '帮助文本:这是一个范围日期选择器',
      cancelText: '取消',
      confirmText: '确定',
      errorFormatText: '输入日期格式错误',
      errorInvalidText: '输入日期超出可选范围',
      saveText: '保存',
      fieldStartLabelText: '开始日期',
      fieldStartHintText: '请输入开始日期',
      fieldEndHintText: '请输入结束日期',
      fieldEndLabelText: '结束日期',
      textDirection: TextDirection.ltr,
      builder: (context, widget) {
        return Theme(
          data: ThemeData.dark(),
          child: widget,
        );
      },
    );
    setState(() {
      if (result != null) {
        _dateRange =
            '${result.start.year}年${result.start.month}月${result.start.day}日 - ${result.end.year}年${result.end.month}月${result.end.day}日';
      }
    });
  }

7.TimePicker

这个比较简单


TimePickerEntryMode.dial.jpg TimePickerEntryMode.input.jpg
_showTimePicker() async {
    var result = await showTimePicker(
      context: context,
      initialTime: TimeOfDay(hour: 17, minute: 30),
      // builder: (context, widget) {
      //   return Theme(
      //     data: ThemeData.dark(),
      //     child: widget,
      //   );
      // },
      helpText: '帮助文本:这是一个时间选择器',
      cancelText: '取消',
      confirmText: '确定',
      initialEntryMode: TimePickerEntryMode.dial,
    );
    setState(() {
      if (result != null) {
        _time = '${result.hour}小时${result.minute}分钟';
      }
    });
  }

8.国际化的问题

flutter的自带组件中的语言文字都是英文的,如果需要显示中文那就需要引入国际化

  • 添加依赖
flutter_localizations:
  sdk: flutter
  • MaterialApp中配置国际化
//国际化语言支持
localizationsDelegates:[GlobalMaterialLocalizations.delegate,GlobalWidgetsLocalizations.delegate],
supportedLocales: [Locale('zh','CH')],
1601365034176.jpg

下一节:Material组件之SimpleDialog

Flutter(24):Material组件之SimpleDialog

Flutter教学目录持续更新中

Github源代码持续更新中

相关文章

网友评论

    本文标题:Flutter(23):Material组件之Date & Ti

    本文链接:https://www.haomeiwen.com/subject/fabsuktx.html