check_point_record.dart 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import 'package:flutter/material.dart';
  2. import 'package:trackoffical_app/model/settlement.dart';
  3. import 'package:trackoffical_app/pb.dart' as pb;
  4. import 'package:trackoffical_app/utils.dart';
  5. class CheckPointRecord extends StatelessWidget{
  6. const CheckPointRecord({
  7. super.key,
  8. required this.data
  9. });
  10. final Settlement data;
  11. @override
  12. Widget build(BuildContext context) {
  13. final checkedSortedList = data.save.checkedSortedList;
  14. return ListView.builder(
  15. itemCount: checkedSortedList.length,
  16. itemBuilder: (BuildContext context, int index){
  17. final backColor = index % 2 == 0 ? const Color(0xfff8f8f8) : Colors.white;
  18. final data = checkedSortedList[index];
  19. pb.GameSaveControlPoint? preData;
  20. if(index > 0){
  21. preData = checkedSortedList[index-1];
  22. }
  23. var icResName =
  24. data.isCheckSuccess ? 'ic_point_ok.png' : 'ic_point_fail.png';
  25. final beginTime =
  26. checkedSortedList.first.checkAfterStart.toDuration();
  27. var checkTime = data.checkAfterStart.toDuration()
  28. - (preData?.checkAfterStart.toDuration()??beginTime);
  29. var checkTimeStr = '+${checkTime.toAppString()}';
  30. if (isPointStart(this.data.data, data) && data.isCheckSuccess) {
  31. icResName = 'ic_point_start.png';
  32. checkTimeStr = this.data.save.startAt.toDateTime(toLocal: true)
  33. .add(data.checkAfterStart.toDuration()).toAppStringNoDate();
  34. }
  35. if (isPointFinish(this.data.data, data)) {
  36. icResName = 'ic_point_finish.png';
  37. checkTimeStr = this.data.save.startAt.toDateTime(toLocal: true)
  38. .add(data.checkAfterStart.toDuration()).toAppStringNoDate();
  39. }
  40. return Container(
  41. width: double.infinity,
  42. color: backColor,
  43. padding: const EdgeInsets.fromLTRB(13, 5, 26, 5),
  44. child: Row(
  45. children: [
  46. Image.asset(
  47. 'assets/images/$icResName',
  48. height: 18,
  49. width: 18,
  50. ),
  51. const SizedBox(width: 20,),
  52. Expanded(child: Text(gameSaveControlPointFindInProject(this.data.data, data).sn)),
  53. Text(checkTimeStr)
  54. ],
  55. ));
  56. });
  57. }
  58. }