Flutter(23):Material组件之Date & Time Pickers

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源代码持续更新中

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350