show_update_version_dialog.dart 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. import 'dart:io';
  2. import 'dart:ui';
  3. import 'package:electronic_assistant/data/bean/version_update_bean.dart';
  4. import 'package:electronic_assistant/data/consts/constants.dart';
  5. import 'package:electronic_assistant/resource/assets.gen.dart';
  6. import 'package:electronic_assistant/resource/colors.gen.dart';
  7. import 'package:electronic_assistant/utils/common_style.dart';
  8. import 'package:electronic_assistant/utils/expand.dart';
  9. import 'package:electronic_assistant/utils/mmkv_util.dart';
  10. import 'package:flutter/cupertino.dart';
  11. import 'package:flutter/material.dart';
  12. import 'package:flutter_screenutil/flutter_screenutil.dart';
  13. import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
  14. import '../utils/launcher_url_util.dart';
  15. class UpdateVersionDialog {
  16. static const String tag = 'showUpdateVersionDialog';
  17. static void dismiss() {
  18. SmartDialog.dismiss(tag: tag);
  19. }
  20. static Widget _buildVersionView(String version) {
  21. return Container(
  22. decoration: BoxDecoration(
  23. gradient: LinearGradient(
  24. colors: [
  25. '#D0C5FF'.toColor(),
  26. ColorName.white,
  27. '#647FFF'.toColor()
  28. ],
  29. begin: Alignment.topLeft,
  30. end: Alignment.bottomRight,
  31. ),
  32. borderRadius: BorderRadius.all(Radius.circular(11.w))),
  33. padding: EdgeInsets.all(0.5.w),
  34. height: 22.h,
  35. child: Container(
  36. decoration: getPrimaryBtnDecoration(11.w),
  37. padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 2.w),
  38. child: Text(
  39. version,
  40. style: TextStyle(
  41. fontSize: 13.sp,
  42. color: ColorName.white,
  43. fontWeight: FontWeight.bold,
  44. height: 0),
  45. ),
  46. ));
  47. }
  48. static Widget _buildUpdateBtn({VoidCallback? onUpdateClick}) {
  49. return GestureDetector(
  50. onTap: onUpdateClick,
  51. child: Container(
  52. width: 148.w,
  53. height: 48.w,
  54. decoration: BoxDecoration(
  55. gradient: LinearGradient(
  56. colors: ['#25262A'.toColor(), '#3F424D'.toColor()],
  57. stops: const [0.3, 1.0],
  58. begin: Alignment.topLeft,
  59. end: Alignment.bottomRight,
  60. ),
  61. borderRadius: BorderRadius.circular(100.w),
  62. ),
  63. child: Center(
  64. child: Text(
  65. '立即更新',
  66. style: TextStyle(
  67. fontSize: 14.sp,
  68. color: ColorName.white,
  69. fontWeight: FontWeight.bold),
  70. ),
  71. )),
  72. );
  73. }
  74. static void show(VersionUpdateBean bean) {
  75. if (SmartDialog.checkExist(tag: tag)) {
  76. return;
  77. }
  78. SmartDialog.show(
  79. tag: tag,
  80. backType: SmartBackType.block,
  81. clickMaskDismiss: false,
  82. maskColor: ColorName.black55,
  83. builder: (_) {
  84. return SizedBox(
  85. width: 304.w,
  86. child: IntrinsicHeight(
  87. child: Column(
  88. children: [
  89. Container(
  90. width: 304.w,
  91. decoration: BoxDecoration(
  92. image: DecorationImage(
  93. image: Assets.images.bgUpdateVersion.provider(),
  94. fit: BoxFit.cover,
  95. ),
  96. ),
  97. child: AspectRatio(
  98. aspectRatio: 960 / 1110,
  99. child: Container(
  100. padding: EdgeInsets.symmetric(horizontal: 42.w),
  101. child: Column(
  102. crossAxisAlignment: CrossAxisAlignment.start,
  103. children: [
  104. SizedBox(height: 57.h),
  105. Assets.images.iconUpdateNewVersionTitle
  106. .image(height: 29.h),
  107. SizedBox(height: 8.h),
  108. _buildVersionView(bean.version),
  109. SizedBox(height: 20.h),
  110. Expanded(
  111. child:
  112. _buildUpdateView(bean.title, bean.desc)),
  113. SizedBox(height: 20.h),
  114. _buildUpdateBtn(onUpdateClick: () {
  115. onUpdate(bean.url);
  116. }),
  117. SizedBox(height: 48.h),
  118. ],
  119. ),
  120. )),
  121. ),
  122. SizedBox(height: 12.h),
  123. Visibility(
  124. visible: !bean.force,
  125. child: GestureDetector(
  126. onTap: () {
  127. KVUtil.putString(
  128. Constants.recordServerVersion, bean.version);
  129. SmartDialog.dismiss(tag: tag);
  130. },
  131. child: Assets.images.iconUpdateAppClose
  132. .image(width: 40.w, height: 40.w)),
  133. )
  134. ],
  135. ),
  136. ),
  137. );
  138. });
  139. }
  140. static Widget _buildUpdateView(String? title, String? desc) {
  141. return SingleChildScrollView(
  142. child: Column(
  143. crossAxisAlignment: CrossAxisAlignment.start,
  144. children: [
  145. Text(
  146. title ?? '',
  147. style: TextStyle(fontSize: 14.sp, color: '#202A4D'.toColor()),
  148. ),
  149. Visibility(
  150. visible: title != null && title.isNotEmpty,
  151. child: SizedBox(
  152. height: 6.h,
  153. )),
  154. Text(
  155. desc ?? '',
  156. style: TextStyle(fontSize: 14.sp, color: '#202A4D'.toColor()),
  157. ),
  158. ],
  159. ),
  160. );
  161. }
  162. static void onUpdate(String? url) {
  163. if (Platform.isAndroid) {
  164. if (url == null) {
  165. return;
  166. }
  167. LauncherUrlUtil.launchHttpUrl(url);
  168. } else if (Platform.isIOS) {
  169. //TODO ios 跳转苹果商店下载
  170. }
  171. }
  172. }