dialog_finish.dart 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. import 'package:trackoffical_app/pb.dart' as pb;
  2. import 'package:flutter/material.dart';
  3. import 'package:get/get.dart';
  4. import 'package:trackoffical_app/screen.dart';
  5. import 'package:trackoffical_app/service/app.dart';
  6. import 'package:trackoffical_app/utils.dart';
  7. import '../../../generated/assets.dart';
  8. import '../../../route.dart';
  9. import '../dialog/dialog_base.dart';
  10. import '../dialog/dialog_button.dart';
  11. enum _State{
  12. success,
  13. ok,
  14. fail
  15. }
  16. void dialogFinishResult(pb.GameDetailReply data) {
  17. if(Get.isOverlaysOpen){
  18. Get.back();
  19. }
  20. var state = _State.success;
  21. var title = '恭喜!挑战成功';
  22. var titleColor = const Color(0xFFFF870D);
  23. Color? buttonColor = const Color(0xFF017DC7);
  24. var soundSrc = Assets.soundFinishSuccess;
  25. if(!data.isSuccess){
  26. state = _State.ok;
  27. }
  28. if(!data.isComplete){
  29. state=_State.fail;
  30. }
  31. switch(state){
  32. case _State.ok:
  33. title = '挑战完成';
  34. titleColor = Colors.red;
  35. buttonColor = null;
  36. soundSrc = Assets.soundFinishOk;
  37. break;
  38. case _State.fail:
  39. title = '挑战失败';
  40. titleColor = Colors.red;
  41. buttonColor = null;
  42. soundSrc = Assets.soundFinishFail;
  43. break;
  44. default:
  45. }
  46. App.to.soundPlayAsset(soundSrc);
  47. final minutes = data.duration.toDuration().inSeconds.toDouble() /
  48. Duration.secondsPerMinute;
  49. final distanceKm = data.distance.toDouble() / 1000;
  50. final kcal = data.calorie.toDouble() / 1000;
  51. Get.dialog(
  52. WillPopScope(
  53. onWillPop: () async{
  54. _goNext();
  55. return false;
  56. },
  57. child: dialogTitle(
  58. title,
  59. titleColor,
  60. Column(
  61. crossAxisAlignment: CrossAxisAlignment.center,
  62. children: [
  63. Card(
  64. child: Padding(
  65. padding: EdgeInsets.fromLTRB(
  66. 41.1.rpx,
  67. 10.1.rpx,
  68. 41.1.rpx,
  69. 10.1.rpx,
  70. ),
  71. child: Column(
  72. children: [
  73. _elem(Assets.imagesIcFinishTime, '总用时',
  74. minutes.toStringAsFixed(1), ' min '),
  75. _elem(Assets.imagesIcFinishTime, '总里程',
  76. distanceKm.toStringAsFixed(1), ' km '),
  77. _elem(Assets.imagesIcFinishTime, '消耗卡路里',
  78. kcal.toStringAsFixed(1), ' kcal'),
  79. _elem(Assets.imagesIcFinishTime, '脑力值',
  80. data.answerHistory.accuracy.toString(), ' % '),
  81. ],
  82. )),
  83. ),
  84. SizedBox(height: 30.0.rpx),
  85. Row(
  86. mainAxisSize: MainAxisSize.min,
  87. children: [
  88. Image.asset(Assets.imagesIcBean, height: 103.9.rpx),
  89. Column(
  90. mainAxisSize: MainAxisSize.min,
  91. children: [
  92. Text('X ${data.sysPoint}',
  93. style: TextStyle(fontSize: 53.44.rpx)),
  94. Text('共获得${data.sysPoint}个百味豆',
  95. style: TextStyle(
  96. fontSize: 22.9.rpx,
  97. color: const Color(0xFFaaaaaa))),
  98. ],
  99. )
  100. ],
  101. ),
  102. SizedBox(height: 30.0.rpx),
  103. dialogButton('确定', _goNext, color: buttonColor),
  104. SizedBox(height: 30.0.rpx),
  105. Text(
  106. '提示:可以在“成就”中查看详细数据',
  107. style: TextStyle(color: Colors.red, fontSize: 28.63.rpx),
  108. )
  109. ],
  110. )),),
  111. barrierDismissible: false
  112. );
  113. }
  114. void _goNext(){
  115. Get.offAllNamed(RouteName.home);
  116. }
  117. Widget _elem(String iconSrc, String title, String value, String unit) {
  118. final style = TextStyle(
  119. fontSize: 45.8.rpx,
  120. fontWeight: FontWeight.w500,
  121. color: const Color(0xff333333));
  122. return Padding(
  123. padding: EdgeInsets.only(top: 21.0.rpx, bottom: 21.0.rpx),
  124. child: Row(
  125. children: [
  126. Image.asset(iconSrc, height: 45.8.rpx),
  127. SizedBox(width: 9.5.rpx),
  128. Expanded(
  129. child: Text(
  130. title,
  131. style: style.copyWith(fontSize: 34.35.rpx),
  132. )),
  133. RichText(
  134. text: TextSpan(text: value, style: style, children: [
  135. TextSpan(
  136. text: unit,
  137. style: style.copyWith(
  138. fontSize: 19.1.rpx, color: const Color(0xff818181)),
  139. ),
  140. ]))
  141. ],
  142. ));
  143. }