import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/src/widgets/framework.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:get/get_core/src/get_main.dart'; import 'package:location/base/base_view.dart'; import 'package:location/data/bean/track_days.dart'; import 'package:location/module/track/track_day_detail/time_proportion/track_time_pie_chat.dart'; import 'package:location/module/track/track_day_detail/track_daily_item.dart'; import 'package:location/module/track/track_day_detail/track_day_detail_controller.dart'; import 'package:location/module/track/track_status.dart'; import 'package:location/resource/assets.gen.dart'; import 'package:location/resource/colors.gen.dart'; import 'package:location/resource/string.gen.dart'; import 'package:location/utils/common_expand.dart'; class TrackDayDetailView extends BaseView { late final String trackTag; TrackDayDetailView(TrackDays days, {super.key, bool isExpand = false}) { trackTag = days.day; Get.lazyPut(() => TrackDayDetailController(days, isExpand), tag: trackTag, fenix: true); } @override TrackDayDetailController get controller => Get.find(tag: trackTag); @override Widget buildBody(BuildContext context) { return Obx(() { return Visibility( visible: controller.isRequested, child: _buildTrackDetailView(), ); }); } Widget _buildTrackDetailView() { return Obx(() { if (controller.trackNoData) { return _buildTrackNoData(); } return _buildTrackListView(); }); } Widget _buildTrackListView() { return Stack( children: [ CustomScrollView( slivers: [ buildSliverHistoryTrack(), SliverToBoxAdapter( child: Container( height: 8.w, color: '#F8F5FF'.color, )), SliverToBoxAdapter( child: buildProportionDurationView(), ) ], ), _buildFoldBtn(), ], ); } Widget _buildFoldContentView() { return Obx(() { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Builder(builder: (context) { if (controller.expandSituation != null) { if (controller.expandSituation!.first == TrackExpandType.error || controller.expandSituation!.first == TrackExpandType.errorNow) { return buildErrorTrackDailyItem( controller.expandSituation!.second, contentPadding: EdgeInsets.only(top: 46.w, bottom: 12.w)); } else { return buildStayTrackDailyItem( controller.expandSituation!.second, contentPadding: EdgeInsets.only(top: 35.w)); } } else { return SizedBox.shrink(); } }), if (controller.expandSituation != null && (controller.expandSituation?.first == TrackExpandType.error || controller.expandSituation?.first == TrackExpandType.stay)) buildEndPoint(controller.expandSituation!.second) ], ); }); } Widget _buildTrackNoData() { return Column( children: [ SizedBox(height: 0.048.sh), Assets.images.imgTrackNoData.image(width: 78.5.w), SizedBox(height: 7.w), Text(StringName.trackDetailNoData, style: TextStyle(fontSize: 11.sp, color: ColorName.black60)) ], ); } Widget _buildFoldBtn() { return Obx(() { return Visibility( visible: !controller.trackNoData && !controller.isHideExpand, child: Positioned( top: 2.w, right: 5.w, child: GestureDetector( behavior: HitTestBehavior.translucent, onTap: controller.onTrackDetailFoldClick, child: Container( padding: EdgeInsets.symmetric(horizontal: 5.w, vertical: 8.w), child: Obx(() { return Row( crossAxisAlignment: controller.isExpanded ? CrossAxisAlignment.end : CrossAxisAlignment.center, children: [ Text( controller.isExpanded ? StringName.trackDetailExpand : StringName.trackDetailFold, style: TextStyle(fontSize: 10.sp, color: '#666666'.color), ), SizedBox(width: 1.w), Transform.rotate( angle: controller.isExpanded ? 3.1416 : 0, child: Assets.images.iconTrackDetailTimeBaseArrow .image(width: 10.w, height: 10.w), ) ], ); }), ), ), ), ); }); } Widget buildProportionDurationView() { return Column( children: [ Container( width: double.infinity, height: 293.w, padding: EdgeInsets.all(12.w), child: Stack( children: [ Text(StringName.trackDetailTimeProportion, style: TextStyle( fontSize: 13.sp, color: '#333333'.color, fontWeight: FontWeight.bold)), _buildPieChatView() ], ), ), Container( height: 8.w, width: double.infinity, color: '#F8F5FF'.color, ) ], ); } Widget _buildPieChatView() { return Obx(() { if (controller.pieChatData.isEmpty) { return SizedBox.shrink(); } return Align( alignment: Alignment.center, child: TrackTimePieChat(pieData: controller.pieChatData)); }); } Widget buildSliverHistoryTrack() { return Obx(() { if (controller.isExpanded) { return SliverPadding( padding: EdgeInsets.only(top: 20.w, bottom: 12.w), sliver: SliverList.builder( itemBuilder: buildHistoryTrackItem, itemCount: controller.trackDailyList.length), ); } else { return SliverPadding( padding: EdgeInsets.only( top: 20.w, bottom: 12.w, left: 12.w, right: 12.w), sliver: SliverToBoxAdapter( child: _buildFoldContentView(), )); } }); } Widget buildHistoryTrackItem(BuildContext context, int index) { return buildTrackDailyItem(controller.trackDailyList[index], index == controller.trackDailyList.length - 1); } }