flutter InkWell容器 和 GestureDetector 手势 和 官方自带日期组件 和第三方 日期格式转换组件

 

Flutter 手势简介

// GestureDetector手势
// 手势是Flutter中用于识别用户与UI之间交互的重要部分,可以是单击、双击、拖拽等。
// 以下列出了常见的手势类型和它们的描述。

// 单击手势
// onTapDown: 当指针与屏幕接触在特定位置时触发
// onTapUp: 当指针停止与屏幕在特定位置接触时触发
// onTap: 当发生单击事件时触发
// onTapCancel: 当先前触发的onTapDown不会导致onTap时触发

// 双击手势
// onDoubleTap: 当用户在屏幕上的同一位置快速点击两次时触发

// 长按手势
// onLongPress: 当指针在屏幕上的同一位置长时间保持接触时触发

// 垂直拖拽手势
// onVerticalDragStart: 当指针可能开始垂直移动时与屏幕接触触发
// onVerticalDragUpdate: 当指针沿垂直方向移动时触发
// onVerticalDragEnd: 当指针停止与屏幕接触并在停止接触时以特定速度垂直移动时触发

// 水平拖拽手势
// onHorizontalDragStart: 当指针可能开始水平移动时与屏幕接触触发
// onHorizontalDragUpdate: 当指针沿水平方向移动时触发
// onHorizontalDragEnd: 当指针停止与屏幕接触并在停止接触时以特定速度水平移动时触发

Flutter 日期和时间戳处理

// 日期和时间是应用程序中常见的数据类型,下面是如何在Flutter中处理它们的示例。

// 1. 将日期转换为时间戳
var now = new DateTime.now();
print(now.millisecondsSinceEpoch); // 将当前日期转换为13位的毫秒时间戳

// 2. 将时间戳转换为日期
var a = now.millisecondsSinceEpoch;
print(DateTime.fromMillisecondsSinceEpoch(a)); // 使用时间戳创建DateTime对象

// 3. 创建指定的日期时间
DateTime assignDay = new DateTime(2020, 10, 10);
print(assignDay);

// ... [其余时间操作也可以按照类似方式列出]

带点击事件的容器示例

// InkWell是Flutter中的一个小部件,允许您为其子项添加点击事件。
InkWell(
  child: Text('时间'),
  onTap: _showTimePicker,
);

Flutter中的时间处理和格式化

// 时间的处理和格式化在Flutter应用程序中也非常常见。

// 例如,计算两个日期之间的时间差、转换字符串到日期、从日期中提取特定的部分(如年、月、日)等。

日期转化成时间戳:
var now = new DateTime.now();
print(now.millisecondsSinceEpoch);//单位毫秒,13 位时间戳
时间戳转化成日期:
var now = new DateTime.now();
var a=now.millisecondsSinceEpoch; //时间戳
print(DateTime.fromMillisecondsSinceEpoch(a));

自带时间格式转换
formatDate(DateTime ,[yyyy,'-',mm,'-',dd]);

自定义时间
var time = DateTime(DateTime.now().year, DateTime.now().month, 1, DateTime.now().hour, DateTime.now().minute, DateTime.now().second);
获取一个月多少天
var time = DateTime(DateTime.now().year, DateTime.now().month + 1 , 0).day;
var time = DateTime(DateTime.now().year, DateTime.now().month + 1 , 0);

时间与时区操作

1.日期转换成时间戳
var now=new DateTime.now();
print(now.millisecondsSinceEpoch); //单位毫秒,13位时间戳

2.时间戳转换成日期
var now=new DateTime.now();
var a=now.millisecondsSinceEpoch; // 时间戳
print(DateTime.fromMillisecondsSinceEpoch(a));

3.创建指定时间
DateTime assignDay = new DateTime(2020,10,10);
print(assignDay);   // 2020-10-10 00:00:00.000

4.计算时间跨度
// 例如计算1天14小时45分的跨度
Duration timeRemaining = new Duration(days:1, hours:14, minutes:45);
print(timeRemaining);  // 38:45:00.000000

5.字符串转DateTime
DateTime.parse('2019-11-08') 或者 DateTime.parse('2019-11-08 12:30:05')

6.在之前——时间比较
var today = DateTime.now();
var date = DateTime.parse("2019-06-20 15:32:41");
today.isBefore(date);

7.在之后——时间比较
var today = DateTime.now();
var date = DateTime.parse("2019-06-20 15:32:41");
today.isAfter(date);

8.相等——时间比较
var today = DateTime.now();
var date = DateTime.parse("2019-06-20 15:32:41");
today.isAtSameMomentAs(date);

9.时间增加
var today = DateTime.now();   // 2019-11-08 02:54:53.218443
var fiftyDaysFromNow = today.add(new Duration(days: 5));
print('today加5天:$fiftyDaysFromNow');  // today加5天:2019-11-13 02:54:53.218443

10.时间减少
var today = DateTime.now();   // 2019-11-08 02:54:53.218443
var fiftyDaysAgo = today.add(new Duration(days: 5));
print('today加5天:$fiftyDaysAgo ');  // today减5天:2019-11-03 02:54:53.218443

11.时间差(小时数)
var day1 = new DateTime(2019, 6, 20, 17, 30, 20);
var day2 = new DateTime(2019, 7, 21, 0,  0, 0);
print('比较两个时间 差 小时数:${day1.difference(day2)}');  //  比较两个时间 差 小时数:-726:29:40.000000

12.获取年、月、日、星期、时、分、秒、毫秒、微妙
year、month、day、weekday、hour、minute、second、millisecond、microsecond
var today = DateTime.now();
print(today.year);

13.获取本地时区简码
DateTime today = DateTime.now();
print('本地时区简码:${today.timeZoneName}');  //  本地时区简码:GMT

14.返回UTC与本地时差(小时数)
DateTime today = DateTime.now();

print('返回UTC与本地时差 小时数:${today.timeZoneOffset}');

DateTime常用属性介绍

// 使用DateTime类获取当前时间
DateTime time = DateTime.now();

// 获取当前日期是多少号
time.day
// 获取当前的月份
time.month 
// 获取当前的年份
time.year
// 获取当前的小时数
time.hour
// 获取当前的分钟数
time.minute
// 获取当前的秒数
time.second
// 获取当前的毫秒数
time.millisecond
// 获取自1970年1月1日以来的毫秒数
time.millisecondsSinceEpoch

DateTime常用方法

DateTime last = DateTime.now();

// 比较两个DateTime对象的时间差
print(time.difference(last) > Duration(seconds: 1));
// 向时间添加时长
time.add(Duration(seconds: 1));
// 比较两个DateTime对象的先后,如果time晚于last则返回1
print(time.compareTo(last));
// 判断time是否晚于last
print(time.isAfter(last));
// 判断time是否早于last
print(time.isBefore(last));
// 判断两个时间是否相同
print(time.isAtSameMomentAs(last));

Flutter 第三方库 date_format 的使用

// 这是date_format的文档链接
https://pub.dev/packages/date_format

// 在Flutter的pubspec.yaml文件中添加date_format库依赖
dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^0.1.2
  date_format: ^1.0.8

// 在需要使用date_format的地方导入该库
import 'package:date_format/date_format.dart';

DatePage组件的 代码实现

// 这是一个演示日期时间功能的Flutter页面

import 'package:flutter/material.dart';
import 'package:date_format/date_format.dart';

class DatePage extends StatefulWidget {
  DatePage({Key key});
  _DatePage createState() => _DatePage();
}

class _DatePage extends State<DatePage> {
  var date = new DateTime.now();

  @override
  Widget build(BuildContext context) {
    // 定义一个方法显示日期选择器
    _showDatePicker() async {
      var _getTime = await showDatePicker(
        context: context,
        initialDate: DateTime.now(),
        firstDate: DateTime(1990),
        lastDate: DateTime(2030)
      );
      if (_getTime == null) return;
      setState(() {
        date = _getTime;
      });
    };

    // 定义一个方法显示时间选择器
    var _time = TimeOfDay(hour: date.hour, minute: date.minute);
    _showTimePicker() async {
      var _getTime = await showTimePicker(
        context: context,
        initialTime: _time
      );
      if (_getTime == null) return;
      setState(() {
        _time = _getTime;
      });
    };

    return Scaffold(
      appBar: AppBar(
        title: Text('Date')
      ),
      body: ListView(
        children: <Widget>[
          Text('${date}'),
          Text('${date.millisecondsSinceEpoch}'),
          Text('${DateTime.fromMillisecondsSinceEpoch(date.millisecondsSinceEpoch)}'),
          RaisedButton(
            child: Text('日期${date}'),
            onPressed: _showDatePicker
          ),
          RaisedButton(
            child: Text('时间${_time.format(context)}'),
            onPressed: _showTimePicker
          ),
          InkWell(
            child: Text('日期${date}'),
            onTap: _showDatePicker
          ),
          InkWell(
            child: Text('时间${_time.format(context)}'),
            onTap: _showTimePicker
          ),
          Text('第三方时间${formatDate(date, [yyyy, '-', mm, '-', dd])}'),
          Text('第三方时间${formatDate(date, [yyyy, '年', mm, '月', dd, '日', hh, '时', mm, '分', ss, '秒'])}'),
        ],
      )
    );
  }
}

posted on 2020-02-24 12:13  完美前端  阅读(448)  评论(0)    收藏  举报

导航