track_detail_controller.dart 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import 'package:flutter/cupertino.dart';
  2. import 'package:get/get.dart';
  3. import 'package:get/get_core/src/get_main.dart';
  4. import 'package:injectable/injectable.dart';
  5. import 'package:location/base/base_controller.dart';
  6. import 'package:location/utils/date_util.dart';
  7. import '../../../data/bean/atmob_track_point.dart';
  8. @injectable
  9. class TrackDetailController extends BaseController {
  10. static const int lineStart = 1;
  11. static const int lineEnd = 2;
  12. final List<AtmobTrackPoint> originPoints = [];
  13. final RxList<AtmobTrackPoint> pointList = RxList();
  14. final TextEditingController searchController = TextEditingController();
  15. final RxString _searchTxt = ''.obs;
  16. String get searchTxt => _searchTxt.value;
  17. @override
  18. void onInit() {
  19. super.onInit();
  20. final argument = Get.arguments;
  21. if (argument != null && argument is List<AtmobTrackPoint>) {
  22. dealRepeatPoints(argument);
  23. }
  24. }
  25. @override
  26. void onReady() {
  27. super.onReady();
  28. _dealSearchList();
  29. }
  30. void dealRepeatPoints(List<AtmobTrackPoint> argument) {
  31. List<AtmobTrackPoint> newList = [];
  32. AtmobTrackPoint? last;
  33. for (int i = 0; i < argument.length; i++) {
  34. AtmobTrackPoint point = argument[i];
  35. if (i == 0 || i == argument.length - 1) {
  36. newList.add(point);
  37. continue;
  38. }
  39. if (last == null) {
  40. last = point;
  41. newList.add(point);
  42. } else if (last.latitude != point.latitude ||
  43. last.longitude != point.longitude ||
  44. last.addr != point.addr ||
  45. DateUtil.isTimeIntRangeExceed(
  46. point.time, last.time, Duration(seconds: 60))) {
  47. last = point;
  48. newList.add(point);
  49. }
  50. }
  51. if (newList.length >= 2) {
  52. newList.first.traceType = lineStart;
  53. newList.last.traceType = lineEnd;
  54. }
  55. originPoints.assignAll(newList);
  56. }
  57. void back() {
  58. Get.back();
  59. }
  60. @override
  61. void onClose() {
  62. super.onClose();
  63. searchController.dispose();
  64. }
  65. void onSearch(String txt) {
  66. _searchTxt.value = txt;
  67. _dealSearchList();
  68. }
  69. void _dealSearchList() {
  70. if (_searchTxt.value.isEmpty) {
  71. pointList.clear();
  72. pointList.addAll(originPoints);
  73. } else {
  74. pointList.clear();
  75. pointList.addAll(originPoints.where((element) {
  76. return element.addr?.contains(_searchTxt.value) == true;
  77. }));
  78. }
  79. }
  80. void onClearSearchTxt() {
  81. searchController.clear();
  82. _searchTxt.value = '';
  83. _dealSearchList();
  84. }
  85. }