首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在flutter中的showDatePicker上设置日期后显示showTimePicker?

在Flutter中,要在showDatePicker后显示showTimePicker,可以使用showModalBottomSheet方法结合DatePicker和TimePicker来实现。

首先,在showDatePicker的onDateChanged回调函数中,获取选中的日期,并使用Navigator.of(context).pop方法关闭DatePicker。

接下来,在关闭DatePicker后,使用showModalBottomSheet方法显示TimePicker。在TimePicker的onTimeChanged回调函数中,获取选中的时间,并使用Navigator.of(context).pop方法关闭TimePicker。

以下是示例代码:

代码语言:txt
复制
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  DateTime selectedDate;
  TimeOfDay selectedTime;

  Future<void> _selectDateTime(BuildContext context) async {
    final DateTime pickedDate = await showDatePicker(
      context: context,
      initialDate: DateTime.now(),
      firstDate: DateTime(2022),
      lastDate: DateTime(2023),
    );
    if (pickedDate != null) {
      setState(() {
        selectedDate = pickedDate;
      });
      Navigator.of(context).pop(); // 关闭DatePicker
      _selectTime(context); // 打开TimePicker
    }
  }

  Future<void> _selectTime(BuildContext context) async {
    final TimeOfDay pickedTime = await showModalBottomSheet(
      context: context,
      builder: (BuildContext context) {
        return Container(
          height: 200.0,
          child: TimePickerDialog(
            initialTime: TimeOfDay.now(),
            onTimeChanged: (TimeOfDay time) {
              setState(() {
                selectedTime = time;
              });
              Navigator.of(context).pop(); // 关闭TimePicker
            },
          ),
        );
      },
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter DatePicker and TimePicker'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Selected Date:',
              style: TextStyle(fontSize: 20.0),
            ),
            Text(
              selectedDate == null
                  ? 'No date selected'
                  : selectedDate.toString(),
              style: TextStyle(fontSize: 18.0),
            ),
            SizedBox(height: 20.0),
            Text(
              'Selected Time:',
              style: TextStyle(fontSize: 20.0),
            ),
            Text(
              selectedTime == null
                  ? 'No time selected'
                  : selectedTime.toString(),
              style: TextStyle(fontSize: 18.0),
            ),
            SizedBox(height: 20.0),
            ElevatedButton(
              onPressed: () {
                _selectDateTime(context);
              },
              child: Text('Select Date and Time'),
            ),
          ],
        ),
      ),
    );
  }
}

class TimePickerDialog extends StatefulWidget {
  final TimeOfDay initialTime;
  final ValueChanged<TimeOfDay> onTimeChanged;

  TimePickerDialog({
    Key key,
    this.initialTime,
    this.onTimeChanged,
  }) : super(key: key);

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

class _TimePickerDialogState extends State<TimePickerDialog> {
  TimeOfDay _selectedTime;

  @override
  void initState() {
    super.initState();
    _selectedTime = widget.initialTime;
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: EdgeInsets.all(16.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Text(
            'Select Time',
            style: TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold),
          ),
          SizedBox(height: 16.0),
          Row(
            children: <Widget>[
              Text(
                'Hour:',
                style: TextStyle(fontSize: 18.0),
              ),
              SizedBox(width: 16.0),
              DropdownButton<int>(
                value: _selectedTime.hour,
                items: List<DropdownMenuItem<int>>.generate(24, (int index) {
                  return DropdownMenuItem<int>(
                    value: index,
                    child: Text(index.toString()),
                  );
                }),
                onChanged: (int value) {
                  setState(() {
                    _selectedTime = TimeOfDay(hour: value, minute: _selectedTime.minute);
                  });
                },
              ),
            ],
          ),
          SizedBox(height: 16.0),
          Row(
            children: <Widget>[
              Text(
                'Minute:',
                style: TextStyle(fontSize: 18.0),
              ),
              SizedBox(width: 16.0),
              DropdownButton<int>(
                value: _selectedTime.minute,
                items: List<DropdownMenuItem<int>>.generate(60, (int index) {
                  return DropdownMenuItem<int>(
                    value: index,
                    child: Text(index.toString()),
                  );
                }),
                onChanged: (int value) {
                  setState(() {
                    _selectedTime = TimeOfDay(hour: _selectedTime.hour, minute: value);
                  });
                },
              ),
            ],
          ),
          SizedBox(height: 16.0),
          ElevatedButton(
            onPressed: () {
              widget.onTimeChanged(_selectedTime);
            },
            child: Text('Done'),
          ),
        ],
      ),
    );
  }
}

在这个示例中,我们创建了一个HomePage Widget,其中包含一个ElevatedButton用于选择日期和时间。在点击按钮时,会调用_selectDateTime方法来打开DatePicker。

在_selectDateTime方法中,首先显示DatePicker。当选择完日期后,会更新selectedDate的值并关闭DatePicker。接着调用_selectTime方法来打开TimePicker。

_selectTime方法使用showModalBottomSheet方法来显示TimePicker。当选择完时间后,会更新selectedTime的值并关闭TimePicker。

最后,我们在HomePage中显示选择的日期和时间,通过文本显示在界面上。

请注意,这里的DatePicker和TimePicker仅作为示例,您可以根据实际需求选择合适的DatePicker和TimePicker组件。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Flutter 日期时间DatePicker控件及国际化

firstDate表示开始时间,设置后,选择器不能选择小于此值的时间。 lastDate表示结束时间,设置后,选择器不能选择大于此值的时间。...showDatePicker方法是Future方法,点击日期选择控件的“确定按钮后,返回选择的日期。 效果如下: ?...builder参数用于控制子控件,可以向DatePicker一样设置深色主题,还可以设置其显示24小时,用法如下: showTimePicker( context: context, initialTime...中文支持 添加国际化支持,步骤同DatePicker中文支持,但showTimePicker并没有local参数,使用builder参数设置,如下: showTimePicker( context...mode参数设置日期的格式: time:只显示时间,效果:4 | 14 | PM date:只显示日期,效果:July | 13 | 2012 dateAndTime:时间和日期都显示,效果: Fri

2.1K20
  • Flutter中的日期、格式化日期、日期选择器组件在

    今天我们来聊聊Flutter中的日期和日期选择器。...Flutter的第三方库 date_format 的使用 实际上,我在之前介绍在Flutter中如何导入第三方库的文章依赖管理(二):第三方组件库在Flutter中要如何管理中,就是以date_format...自带的日期选择器是showDatePicker,时间选择器是showTimePicker。...这两个选择器默认的显示效果都是英文的,我们是在中国,那么就需要将其显示成中文版的,这就涉及到Flutter的国际化的问题。关于Flutter的国际化,接下来我将为大家做详细讲解。...Flutter中的国际化 Flutter中的日期选择器,默认是英文的,如下: ? 那么,如何将其改成中文展示呢?这就需要用到国际化配置。

    26.1K52

    你真的会用Flutter日期类组件吗

    老孟导读:Flutter系统提供了一些日期选择类组件,比如DayPicker、MonthPicker、YearPicker、showDatePicker、CupertinoDatePicker等,其中前...本文介绍了控件的基本用法及如何实现国际化,如果系统提供的国际化不满足你的需要,最后也介绍了如何实现自定义国际化。 DayPicker 显示给定月份的日期,并允许选择一天。...个人觉得showDatePicker的样式风格不是很符合国内的审美,我们可能更多的时候是使用YearPicker、MonthPicker和DayPicker自定义日期控件。...lastDate表示结束时间,不能选择此时间之后的时间。 showDatePicker方法是Future方法,点击日期选择控件的确定按钮后,返回选择的日期。...还可以设置其显示24小时,用法如下: showTimePicker( context: context, initialTime: TimeOfDay.now(), builder

    2.4K20

    Flutter lesson 8:输入框,时间日期选择

    日期时间选择 Flutter自带的 showDatePicker 和 showTimePicker 两个方法可以进行时间和日期的选择。...同时,因为这两个方法是异步实现的,所以,这里使用了ES8中的 async...await 下面我们来看看具体的代码实现 var _chooseDate; var _chooseTime; _showDatePicker...选择时间日期还是挺简单的,不过需要注意的是 flutter: 选择的日期是:2019-07-30 00:00:00.000 flutter: 选择的时间是:TimeOfDay(21:34) 两个方法选择时间...,日期后,时间日期的格式是上面那样的,如果你要使用,或许你需要处理一下。...输入框 TextField TextField 是Flutter中的用户输入框,属性挺多的,不同的配置出不同的效果,就像是HTML中的 input 一样。

    4.8K20

    Flutter 时间选择组件

    在Flutter 应用开发过程中,或多或少的都会涉及到时间选择器相关的内容。...Flutter默认提供了DatePicker日期选择器,如果对样式没有特殊的要求,那么可以使用它来进行时间的选择,默认的样式如下所示。...通常在移动应用开发中,App的涉及多是参考iOS的设计来的,所以这时候,多半需要进行自定义组件了。...不管,为了快速的进行开发我们可以选择一些第三方的组件库,如flutter_custom_calendar,此库具有如下的功能: 支持公历,农历,节气,传统节日,常用节假日 日期范围设置,默认支持的最大日期范围为...1971.01-2055.12 禁用日期范围设置,比如想实现某范围的日期内可以点击,范围外的日期置灰 支持单选、多选模式,提供多选超过限制个数的回调和多选超过指定范围的回调。

    3.7K30

    【Flutter Widgets大全】电子书开源

    【Flutter Widgets大全】是老孟耗费大量精力整理的,总共有330多个组件的详细用法,开源到Github上,希望可以帮助到大家,开源不易,转发一下可不可以?。...,需要的时候进行查阅。...为了方便对比学习,我将相近或相反功能的组件整理到一个文件中,比如所有的 Button 类组件、弹出类组件等。 如果想系统的学习入门知识,请到 Flutter 老孟 实战 查看。...showGeneralDialog 在线查看 showLicensePage 在线查看 showMenu 在线查看 showModalBottomSheet 在线查看 showSearch 在线查看 showTimePicker...在线查看 Flutter Widgets PDF 开源文件为 markdown 格式,为了方便阅读老孟转换成了 PDF 格式,总计 658页,不知不觉已经整理了如此多的资料。

    1.2K10

    Flutter实现一个酷炫带动画的列表型多选日历组件

    通过index与monthStart想加,计算出日历,即8,9,10,11...这些月份,需要注意的是DateTime里面传入的month参数如果超过了12,则前面的年会自动“进位”(Flutter设置的太贴心了...,这是一个典型的子组件调用父组件改变其状态的代码段,通过selectStartTime和selectEndTime是否为null判断用户的点击行为落在哪个if else里面,通过setState重新设置开始和结束日期...总结一下,通过本例可以学习到以下知识点 路由参数传递和参数回传 父子组件正向与逆向通信 日期函数DateTime的运用 Sliver在CustomScrollView中的运用 日历绘制方式 底部弹出组件使用方式...其他各种布局技巧及细节 可以改善的地方 国际化支持 自定义颜色传入 后续发布到Flutter Pub 代码地址 本例中相关的代码放在 github地址:github.com/heruijun/fl…...此例已经作为补充内容添加至我的《Flutter从0到1构建大前端应用》一书的源码中,是一个知识点比较多的综合案例,再版时会根据读者意见考虑加入到书中讲解。

    1.8K30

    基于Flutter手把手教你实现一个日期选择(日历形式)

    今天的主题是,在flutter里面实现一个日期选择的自定义控件,或者说自定义组件,考虑到这个日期自定义组件的通用性,我们将会采用插件开发开始来做,这样就可以发布到 pub.dev 上,供广大flutter...所以,读完本文,你讲学会两个大的知识点:如何在flutter上做一个自定义组件如何开发插件并发布到 pub.dev因为是操作实战,所以,我会给出完整的实现过程来,首先,我们确定的是需要创建一个自定义组件...Flutter中,创建自定义组件(也称为自定义widget)主要有三种方式:通过组合其他组件,自绘和实现RenderObject。...通过组合其他组件:这是创建自定义组件的最基本和最常见的方式。Flutter框架提供了大量的内置组件,如文本、图像、按钮等。你可以通过组合这些内置组件来创建自己的自定义组件。...当用户点击一个日期时,此时判断,如果在起始日期之前,就将起始日期设置为当前选中的日期如果在终止日期之后,就将终止日期设置为当前选中的日期如果在区间内呢?

    2.6K50

    Flutter 中可定制的时间规划器

    构建引人入胜的 UI 从未如此快速。无论您是业余爱好者还是有教养的开发人员,都不难对 Flutter 产生无可救药的迷恋。所有软件开发人员都明白日期是最棘手的事情。同样,时间表也不是特例。...在移动应用程序中,在很多情况下,用户需要输入出生日期、订票、安排会议等日期。 在在这个博客中,我们将**探索 Flutter 中可定制的时间规划器。...每行显示一个小时,每列显示一天,但您可以更改该部分的标题并显示您需要的任何其他内容。 此演示视频展示了如何在 Flutter 中创建可自定义的时间规划器。...它展示了可定制的时间规划器将如何在您的「Flutter」 应用程序中使用「time_planner」包工作。它显示当用户点击任何行和列时,将创建一个随机时间规划器。...「headers」用于从这里创建日期,每一天都是一个 TimePlannerTitle。您应该至少创建一天。 「tasks」用于列出时间规划器上的小部件。 「style」用于时间规划器的Style。

    1.7K20

    Flutter 中渲染3D 模型

    该小部件可将Google的Web部件插入WebView中。3D模型显示3D图片。 该演示视频展示了如何在Flutter中创建模型查看器。...它显示了如何在flutter应用程序中使用model_viewer包来运行模型查看器。它以glTF和GLB格式显示3D模型,并通过鼠标,手触摸和自动旋转将其旋转360度。...(此外,USDZ型号在iOS 12+上。) 支持具有可配置自动播放设置的动画模型。 (可选)它支持将模型启动到AR查看器中。 可以选择以可配置的延迟自动旋转模型。 支持小部件的可配置背景色。...;自动播放是指如果设置为true并且模型具有动画,则设置此属性后,动画将自动开始播放。...当我们运行应用程序时,我们应该获得屏幕的输出,如屏幕下方的截图所示。

    25.4K20

    Flutter中文字体设置指南:打造个性化的应用体验

    今天,我们就来详细探讨如何在Flutter应用中设置中文字体,并结合不同场景提供相应的解决方案和代码示例。 一、为什么需要设置中文字体?...例如,在设计App时可能需要: 使用特定的中文字体来提升用户体验; 保证中文在不同设备上的显示效果一致; 解决默认字体不支持某些特殊字符的问题。 二、如何在Flutter中设置中文字体 1....字体显示不出来怎么办? 如果你发现设置了自定义字体后,中文字符仍然无法正确显示,可能是以下几种原因: 字体文件没有正确加载:检查pubspec.yaml中的字体路径是否正确。...如果某些特殊的中文字符显示不出来(如表情符号或生僻字),建议使用更为通用的字体库,如NotoSansCJK,它支持更多的中文字符。你可以将这个字体添加到项目中,作为后备字体。...希望本文能够帮助你更好地解决Flutter中文字体设置的问题,让你的应用在不同平台上都能拥有一致且美观的显示效果。

    27810
    领券