wallpaper_view.dart 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. import 'package:cached_network_image/cached_network_image.dart';
  2. import 'package:clean/base/base_page.dart';
  3. import 'package:clean/module/wallpaper/wallpaper_controller.dart';
  4. import 'package:clean/resource/assets.gen.dart';
  5. import 'package:clean/router/app_pages.dart';
  6. import 'package:flutter/Material.dart';
  7. import 'package:flutter/src/widgets/framework.dart';
  8. import 'package:flutter_screenutil/flutter_screenutil.dart';
  9. import 'package:get/get.dart';
  10. class WallPaperPage extends BasePage<WallPaperController> {
  11. const WallPaperPage({Key? key}) : super(key: key);
  12. static void start() {
  13. Get.toNamed(RoutePath.wallpaper);
  14. }
  15. @override
  16. bool immersive() {
  17. // TODO: implement immersive
  18. return true;
  19. }
  20. @override
  21. bool statusBarDarkFont() {
  22. return false;
  23. }
  24. @override
  25. @override
  26. Widget buildBody(BuildContext context) {
  27. return Stack(
  28. children: [
  29. PopScope(
  30. canPop: false,
  31. onPopInvokedWithResult: (didPop, result) {
  32. if (didPop) {
  33. return;
  34. }
  35. controller.clickBack();
  36. },
  37. child: SafeArea(
  38. child: SizedBox(
  39. width: double.infinity,
  40. height: double.infinity,
  41. child: Column(
  42. children: [
  43. _titleCard(),
  44. Expanded(
  45. child: SingleChildScrollView(
  46. child: Column(
  47. crossAxisAlignment: CrossAxisAlignment.start,
  48. children: [
  49. Container(
  50. padding: EdgeInsets.symmetric(horizontal: 16.w),
  51. child: Text(
  52. "Wallpaper",
  53. style: TextStyle(
  54. color: Colors.white,
  55. fontSize: 24.sp,
  56. fontWeight: FontWeight.w700,
  57. ),
  58. ),
  59. ),
  60. SizedBox(height: 6.h),
  61. Container(
  62. padding: EdgeInsets.symmetric(horizontal: 16.w),
  63. child: Obx(() {
  64. return GridView.builder(
  65. gridDelegate:
  66. SliverGridDelegateWithFixedCrossAxisCount(
  67. crossAxisCount: 2,
  68. childAspectRatio: 9 / 16,
  69. crossAxisSpacing: 16.w,
  70. mainAxisSpacing: 16.w,
  71. ),
  72. itemCount: controller.wallpapersList.length,
  73. physics: NeverScrollableScrollPhysics(),
  74. shrinkWrap: true,
  75. itemBuilder: (context, index) {
  76. return GestureDetector(
  77. onTap: () {
  78. controller.clickWallpaper(
  79. controller.wallpapersList[index]);
  80. },
  81. child: ClipRRect(
  82. borderRadius:
  83. BorderRadius.circular(12.r),
  84. child: CachedNetworkImage(
  85. width: 156.w,
  86. height: 277.w,
  87. placeholder: (context, url) =>
  88. Assets.images.iconHomeNoPhoto
  89. .image(
  90. width: 156.w,
  91. height: 156 .w,
  92. ),
  93. imageUrl: controller
  94. .wallpapersList[index]
  95. .thumbUrl ??
  96. "",
  97. errorWidget: (context, url, error) =>
  98. Icon(Icons.error),
  99. fit: BoxFit.cover,
  100. ),
  101. ));
  102. },
  103. );
  104. }),
  105. ),
  106. SizedBox(height: 16.h),
  107. ],
  108. ),
  109. ),
  110. ),
  111. ],
  112. ),
  113. ),
  114. ),
  115. ),
  116. IgnorePointer(
  117. child: Assets.images.bgHome.image(
  118. width: 360.w,
  119. ),
  120. )
  121. ],
  122. );
  123. }
  124. Widget _titleCard() {
  125. return Container(
  126. alignment: Alignment.centerLeft,
  127. padding:
  128. EdgeInsets.only(left: 16.w, top: 14.h, right: 16.w, bottom: 20.h),
  129. child: Column(
  130. crossAxisAlignment: CrossAxisAlignment.start,
  131. children: [
  132. GestureDetector(
  133. onTap: () => controller.clickBack(),
  134. child: Assets.images.iconBackArrow.image(
  135. width: 28.w,
  136. height: 28.h,
  137. ),
  138. ),
  139. ],
  140. ),
  141. );
  142. }
  143. }