| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- import 'package:get/get.dart';
- import 'package:get/get_core/src/get_main.dart';
- import 'package:location/base/base_controller.dart';
- import 'package:location/data/bean/track_daily_bean.dart';
- import 'package:location/data/repositories/track_repository.dart';
- import 'package:location/dialog/loading_dialog.dart';
- import 'package:location/handler/error_handler.dart';
- import 'package:location/module/track/track_controller.dart';
- import 'package:location/module/track/track_day_detail/time_proportion/pie_chat_data.dart';
- import 'package:location/resource/string.gen.dart';
- import 'package:location/utils/common_expand.dart';
- import 'package:location/utils/pair.dart';
- import '../../../data/bean/track_days.dart';
- import '../track_status.dart';
- class TrackDayDetailController extends BaseController {
- final TrackDays days;
- late TrackRepository trackRepository;
- final RxBool _trackNoData = RxBool(false);
- final RxList<TrackDailyBean> trackDailyList = RxList<TrackDailyBean>();
- final RxBool _isExpanded = RxBool(false);
- final RxBool _isRequested = RxBool(false);
- final RxBool _isHideExpand = RxBool(false);
- bool get isHideExpand => _isHideExpand.value;
- bool get isRequested => _isRequested.value;
- bool get isExpanded => _isExpanded.value;
- bool get trackNoData => _trackNoData.value;
- final Rxn<Pair<TrackExpandType, TrackDailyBean>> _expandSituation = Rxn();
- Pair<TrackExpandType, TrackDailyBean>? get expandSituation =>
- _expandSituation.value;
- final RxList<PieChatData> pieChatData = RxList<PieChatData>();
- int indexPieChatColor = 0;
- final TrackController trackController = Get.find<TrackController>();
- TrackDayDetailController(this.days, bool isExpand) {
- trackRepository = TrackRepository.getInstance();
- _isExpanded.value = isExpand;
- }
- @override
- void onInit() {
- super.onInit();
- _requestTrackDaily();
- }
- void _requestTrackDaily() {
- _isRequested.value = false;
- CustomLoadingDialog.show(loadingTxt: StringName.trackLoadingTxt);
- trackRepository
- .trackDailyQuery(
- startTime: days.start,
- endTime: days.end,
- userId: trackController.userInfo?.id)
- .then((list) {
- CustomLoadingDialog.hide();
- _isRequested.value = true;
- _trackNoData.value = (list == null || list.isEmpty == true);
- trackDailyList.assignAll(list ?? []);
- if (list != null && list.length == 1) {
- _isExpanded.value = true;
- _isHideExpand.value = true;
- }
- _dealPieChatData();
- _dealTrackExpandData();
- }).catchError((error) {
- CustomLoadingDialog.hide();
- _isRequested.value = false;
- ErrorHandler.toastError(error);
- });
- }
- void _dealPieChatData() {
- pieChatData.clear();
- final list = trackDailyList;
- if (list.isEmpty) {
- return;
- }
- indexPieChatColor = 0;
- int totalDuration = 0;
- final Map<String, PieChatData> addrMap = {};
- for (var bean in list) {
- if (bean.status == TrackStatus.error) {
- continue;
- }
- final addr = bean.addr;
- if (addr == null) {
- continue;
- }
- if (indexPieChatColor >= pieChatColors.length) {
- indexPieChatColor = 0;
- }
- totalDuration += bean.duration;
- if (addrMap.containsKey(addr)) {
- addrMap[addr]!.duration += bean.duration;
- } else {
- addrMap[addr] = PieChatData(
- address: addr,
- duration: bean.duration,
- color: pieChatColors[indexPieChatColor++],
- );
- }
- }
- for (var data in addrMap.values) {
- data.proportion =
- (data.duration / totalDuration * 100).toFormattedDouble(1);
- }
- pieChatData.addAll(addrMap.values.toList());
- }
- void _dealTrackExpandData() {
- final list = trackDailyList;
- if (list.isNotEmpty && list.length > 1) {
- TrackExpandType? expandType;
- TrackDailyBean? expandBean;
- for (var i = 0; i < list.length; i++) {
- final bean = list[i];
- if (bean.status == TrackStatus.error) {
- expandType = TrackExpandType.error;
- expandBean = bean;
- break;
- } else if (bean.status == TrackStatus.stay) {
- if (expandBean == null) {
- expandType = TrackExpandType.stay;
- expandBean = bean;
- }
- continue;
- }
- }
- if (expandType != null && expandBean != null) {
- if (expandType == TrackExpandType.error &&
- list.indexOf(expandBean) == list.length - 1) {
- expandType = TrackExpandType.errorNow;
- } else if (expandType == TrackExpandType.stay &&
- list.indexOf(expandBean) == list.length - 1) {
- expandType = TrackExpandType.stayNow;
- }
- _expandSituation.value = Pair(expandType, expandBean);
- }
- }
- }
- void onTrackDetailFoldClick() {
- _isExpanded.value = !_isExpanded.value;
- }
- }
|