wallpaper_detail_dialog.dart 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import 'package:cached_network_image/cached_network_image.dart';
  2. import 'package:clean/data/bean/wallpapers_bean.dart';
  3. import 'package:clean/handler/event_handler.dart';
  4. import 'package:clean/resource/assets.gen.dart';
  5. import 'package:clean/resource/colors.gen.dart';
  6. import 'package:clean/utils/toast_util.dart';
  7. import 'package:flutter/Material.dart';
  8. import 'package:flutter_cache_manager/flutter_cache_manager.dart';
  9. import 'package:flutter_screenutil/flutter_screenutil.dart';
  10. import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
  11. import 'package:image_gallery_saver/image_gallery_saver.dart';
  12. import '../data/consts/event_report_id.dart';
  13. const tag = 'wallpaperDetailDialog';
  14. void wallpaperDetailDialog(
  15. {WallpapersBean? wallpapersBean}) {
  16. SmartDialog.show(
  17. tag: tag,
  18. backType: SmartBackType.normal,
  19. clickMaskDismiss: false,
  20. maskColor: ColorName.black,
  21. builder: (_) {
  22. return Container(
  23. height: double.infinity,
  24. width: double.infinity,
  25. child: Container(
  26. child: Stack(
  27. children: [
  28. Container(
  29. child: SafeArea(
  30. child: Column(
  31. crossAxisAlignment: CrossAxisAlignment.center,
  32. children: [
  33. _titleCard(),
  34. Container(
  35. width: 322.w,
  36. height: 572.h,
  37. decoration: ShapeDecoration(
  38. shape: RoundedRectangleBorder(
  39. borderRadius: BorderRadius.circular(20.r),
  40. ),
  41. ),
  42. child: AspectRatio(
  43. aspectRatio: 9 / 16, // 设置9:16的宽高比
  44. child: ClipRRect(
  45. borderRadius: BorderRadius.circular(16.r),
  46. child: CachedNetworkImage(
  47. imageUrl: wallpapersBean?.thumbUrl ?? "",
  48. fit: BoxFit.cover,
  49. placeholder: (context, url) =>
  50. CircularProgressIndicator(),
  51. // 加载时显示一个指示器
  52. errorWidget: (context, url, error) =>
  53. Icon(Icons.error),
  54. ),
  55. ),
  56. )),
  57. Spacer(
  58. flex: 1,
  59. ),
  60. GestureDetector(
  61. onTap: () {
  62. downloadWallpaper(wallpapersBean?.imageUrl);
  63. EventHandler.report(EventId.event_06002);
  64. },
  65. child: Container(
  66. width: 328.w,
  67. height: 48.h,
  68. decoration: ShapeDecoration(
  69. color: Color(0xFF0279FB),
  70. shape: RoundedRectangleBorder(
  71. borderRadius: BorderRadius.circular(10.r),
  72. ),
  73. ),
  74. child: Center(
  75. child: Text(
  76. 'Download',
  77. style: TextStyle(
  78. color: Colors.white,
  79. fontSize: 16,
  80. fontFamily: 'Source Han Sans CN',
  81. fontWeight: FontWeight.w500,
  82. ),
  83. ),
  84. ),
  85. )),
  86. Spacer(
  87. flex: 1,
  88. ),
  89. ],
  90. ))),
  91. IgnorePointer(
  92. child: Assets.images.bgHome.image(
  93. width: 360.w,
  94. ),
  95. ),
  96. ],
  97. ),
  98. ));
  99. });
  100. }
  101. void downloadWallpaper(String? imageUrl) async {
  102. try {
  103. ToastUtil.show("Downloading...");
  104. final saveFile = await DefaultCacheManager().getSingleFile(imageUrl ?? "");
  105. await ImageGallerySaver.saveFile(saveFile.path);
  106. ToastUtil.show("Download success");
  107. } catch (e) {
  108. ToastUtil.show("Download failed");
  109. }
  110. }
  111. Widget _titleCard() {
  112. return Container(
  113. alignment: Alignment.centerLeft,
  114. padding: EdgeInsets.only(left: 16.w, top: 14.h, right: 16.w, bottom: 20.h),
  115. child: Column(
  116. crossAxisAlignment: CrossAxisAlignment.start,
  117. children: [
  118. GestureDetector(
  119. onTap: () => SmartDialog.dismiss(tag: tag),
  120. child: Assets.images.iconBackArrow.image(
  121. width: 28.w,
  122. height: 28.h,
  123. ),
  124. ),
  125. ],
  126. ),
  127. );
  128. }