wallpaper_detail_dialog.dart 4.8 KB

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