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, '秒'])}'),
],
)
);
}
}