track_day_detail_view.dart 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import 'package:flutter/cupertino.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter/src/widgets/framework.dart';
  4. import 'package:flutter_screenutil/flutter_screenutil.dart';
  5. import 'package:get/get.dart';
  6. import 'package:get/get_core/src/get_main.dart';
  7. import 'package:location/base/base_view.dart';
  8. import 'package:location/data/bean/track_days.dart';
  9. import 'package:location/module/track/track_day_detail/time_proportion/time_proportion_view.dart';
  10. import 'package:location/module/track/track_day_detail/track_daily_item.dart';
  11. import 'package:location/module/track/track_day_detail/track_day_detail_controller.dart';
  12. import 'package:location/resource/assets.gen.dart';
  13. import 'package:location/resource/string.gen.dart';
  14. import 'package:location/utils/common_expand.dart';
  15. class TrackDayDetailView extends BaseView<TrackDayDetailController> {
  16. late final String trackTag;
  17. TrackDayDetailView(TrackDays days, {super.key, bool isExpand = false}) {
  18. trackTag = days.day;
  19. Get.lazyPut(() => TrackDayDetailController(days, isExpand),
  20. tag: trackTag, fenix: true);
  21. }
  22. @override
  23. TrackDayDetailController get controller =>
  24. Get.find<TrackDayDetailController>(tag: trackTag);
  25. @override
  26. Widget buildBody(BuildContext context) {
  27. return Obx(() {
  28. return Visibility(
  29. visible: controller.isRequested,
  30. child: _buildTrackDetailView(),
  31. );
  32. });
  33. }
  34. Widget _buildTrackDetailView() {
  35. return Obx(() {
  36. if (controller.trackNoData) {
  37. return _buildTrackNoData();
  38. }
  39. return _buildTrackListView();
  40. });
  41. }
  42. Widget _buildTrackListView() {
  43. return Stack(
  44. children: [
  45. CustomScrollView(
  46. slivers: [
  47. buildSliverHistoryTrack(),
  48. SliverToBoxAdapter(
  49. child: Container(
  50. height: 8.w,
  51. color: '#F8F5FF'.color,
  52. )),
  53. SliverToBoxAdapter(
  54. child: buildProportionDurationView(),
  55. )
  56. ],
  57. ),
  58. buildFoldView(),
  59. ],
  60. );
  61. }
  62. Widget _buildTrackNoData() {
  63. return Container(
  64. child: Text('无数据'),
  65. );
  66. }
  67. Widget buildFoldView() {
  68. return Obx(() {
  69. return Visibility(
  70. visible: !controller.trackNoData,
  71. child: Positioned(
  72. top: 2.w,
  73. right: 5.w,
  74. child: GestureDetector(
  75. behavior: HitTestBehavior.translucent,
  76. onTap: controller.onTrackDetailFoldClick,
  77. child: Container(
  78. padding: EdgeInsets.symmetric(horizontal: 5.w, vertical: 8.w),
  79. child: Obx(() {
  80. return Row(
  81. crossAxisAlignment: controller.isExpanded
  82. ? CrossAxisAlignment.end
  83. : CrossAxisAlignment.center,
  84. children: [
  85. Text(
  86. controller.isExpanded
  87. ? StringName.trackDetailExpand
  88. : StringName.trackDetailFold,
  89. style: TextStyle(fontSize: 10.sp, color: '#666666'.color),
  90. ),
  91. SizedBox(width: 1.w),
  92. Transform.rotate(
  93. angle: controller.isExpanded ? 3.1416 : 0,
  94. child: Assets.images.iconTrackDetailTimeBaseArrow
  95. .image(width: 10.w, height: 10.w),
  96. )
  97. ],
  98. );
  99. }),
  100. ),
  101. ),
  102. ),
  103. );
  104. });
  105. }
  106. Widget buildProportionDurationView() {
  107. return TimeProportionView();
  108. }
  109. Widget buildSliverHistoryTrack() {
  110. return Obx(() {
  111. return SliverPadding(
  112. padding: EdgeInsets.only(top: 20.w, bottom: 12.w),
  113. sliver: SliverList.builder(
  114. itemBuilder: buildHistoryTrackItem,
  115. itemCount: controller.trackDailyList.length),
  116. );
  117. });
  118. }
  119. Widget buildHistoryTrackItem(BuildContext context, int index) {
  120. return buildTrackDailyItem(controller.trackDailyList[index],
  121. index == controller.trackDailyList.length - 1);
  122. }
  123. }