|
|
|
// Flutter imports:
|
|
|
|
import 'package:common_utils/common_utils.dart';
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
|
|
|
// Package imports:
|
|
|
|
import 'package:amap_flutter_location/amap_flutter_location.dart';
|
|
|
|
import 'package:amap_flutter_location/amap_location_option.dart';
|
|
|
|
|
|
|
|
// Project imports:
|
|
|
|
import 'package:aku_community_manager/ui/home/application/applications_page.dart';
|
|
|
|
|
|
|
|
enum WORKCLOCK {
|
|
|
|
///未上班打卡状态
|
|
|
|
NOTIN,
|
|
|
|
|
|
|
|
///已上班打卡
|
|
|
|
IN,
|
|
|
|
|
|
|
|
///已下班打卡
|
|
|
|
OUT,
|
|
|
|
}
|
|
|
|
|
|
|
|
class AppProvider extends ChangeNotifier {
|
|
|
|
List<AppApplication> _recentUsedApp = [];
|
|
|
|
List<AppApplication> get recentUsedApp => _recentUsedApp;
|
|
|
|
|
|
|
|
///添加最近使用的应用
|
|
|
|
addRecentApp(AppApplication app) {
|
|
|
|
if (_recentUsedApp.indexWhere((element) => element.name == app.name) ==
|
|
|
|
-1) {
|
|
|
|
if (_recentUsedApp.length >= 4) _recentUsedApp.removeLast();
|
|
|
|
_recentUsedApp.insert(0, app);
|
|
|
|
} else {
|
|
|
|
_recentUsedApp.removeWhere((element) => element.name == app.name);
|
|
|
|
_recentUsedApp.insert(0, app);
|
|
|
|
}
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
|
|
|
///清除最近使用应用
|
|
|
|
clearRecentApp() {
|
|
|
|
_recentUsedApp.clear();
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
|
|
|
Map<String, Object>? _location;
|
|
|
|
Map<String, Object>? get location => _location;
|
|
|
|
late AMapFlutterLocation _flutterLocation;
|
|
|
|
|
|
|
|
startLocation() {
|
|
|
|
_flutterLocation = AMapFlutterLocation();
|
|
|
|
_flutterLocation.onLocationChanged().listen((event) {
|
|
|
|
_location = event;
|
|
|
|
if (_location != null) {
|
|
|
|
stopLocation();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
_flutterLocation.setLocationOption(
|
|
|
|
AMapLocationOption(onceLocation: true, needAddress: true));
|
|
|
|
_flutterLocation.startLocation();
|
|
|
|
}
|
|
|
|
|
|
|
|
stopLocation() {
|
|
|
|
_flutterLocation.stopLocation();
|
|
|
|
_flutterLocation.destroy();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WORKCLOCK _clockStatus = WORKCLOCK.NOTIN;
|
|
|
|
DateTime? _clockInTime;
|
|
|
|
DateTime? _clockOutTime;
|
|
|
|
DateTime? _dateRecord;
|
|
|
|
WORKCLOCK get clockStatus => _clockStatus;
|
|
|
|
DateTime? get clockInTime => _clockInTime;
|
|
|
|
DateTime? get clockOutTime => _clockOutTime;
|
|
|
|
|
|
|
|
initClock() {
|
|
|
|
if (_dateRecord == null ||
|
|
|
|
(DateUtil.isToday(_dateRecord!.millisecondsSinceEpoch.abs()))) {
|
|
|
|
resetClock();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (_dateRecord == null ||
|
|
|
|
(!DateUtils.isSameDay(_dateRecord, DateTime.now()))) {
|
|
|
|
resetClock();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
setClockInTime(DateTime dateTime) {
|
|
|
|
if (_clockStatus == WORKCLOCK.NOTIN) {
|
|
|
|
_dateRecord = dateTime;
|
|
|
|
_clockInTime = dateTime;
|
|
|
|
_clockStatus = WORKCLOCK.IN;
|
|
|
|
}
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
|
|
|
setClockOutTime(DateTime dateTime) {
|
|
|
|
// if (_dateRecord != null &&
|
|
|
|
// (_dateRecord !=
|
|
|
|
// DateTime.utc(DateTime.now().year, DateTime.now().month,
|
|
|
|
// DateTime.now().day))) {
|
|
|
|
// resetClock();
|
|
|
|
// }
|
|
|
|
if (_dateRecord != null &&
|
|
|
|
(!DateUtils.isSameDay(_dateRecord, DateTime.now()))) {
|
|
|
|
resetClock();
|
|
|
|
}
|
|
|
|
if (_clockStatus == WORKCLOCK.IN) {
|
|
|
|
_dateRecord = dateTime;
|
|
|
|
_clockOutTime = dateTime;
|
|
|
|
_clockStatus = WORKCLOCK.OUT;
|
|
|
|
}
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
|
|
|
|
resetClock() {
|
|
|
|
_clockInTime = null;
|
|
|
|
_clockOutTime = null;
|
|
|
|
_clockStatus = WORKCLOCK.NOTIN;
|
|
|
|
notifyListeners();
|
|
|
|
}
|
|
|
|
}
|