activity_video_item_widget.dart 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_screenutil/flutter_screenutil.dart';
  3. import 'package:go_router/go_router.dart';
  4. import 'package:news_app/ui/video/video_detail_page.dart';
  5. import 'package:news_app/widget/load_image.dart';
  6. import '../../constant/color_res.dart';
  7. import '../../gen/assets.gen.dart';
  8. import '../../model/activity_model.dart';
  9. import '../../widget/my_txt.dart';
  10. /// @author: bo.zeng
  11. /// @email: cnhbwds@gmail.com
  12. /// @date: 2025 2025/4/9 16:00
  13. /// @description:
  14. class ActivityVideoItemWidget extends StatelessWidget {
  15. final ActivityModelRecord newData;
  16. const ActivityVideoItemWidget({super.key, required this.newData});
  17. @override
  18. Widget build(BuildContext context) {
  19. return GestureDetector(
  20. onTap: () {
  21. context.push(
  22. '/video/detail',
  23. extra: VideoParam(id: newData.contentId ?? ""),
  24. );
  25. },
  26. child: Column(
  27. children: [
  28. Flexible(
  29. flex: 9,
  30. child: Stack(
  31. alignment: Alignment.center,
  32. children: [
  33. ClipRRect(
  34. borderRadius: BorderRadius.only(
  35. topLeft: Radius.circular(8.r),
  36. topRight: Radius.circular(8.r),
  37. ),
  38. child: LoadImage(
  39. newData.image ?? '',
  40. fit: BoxFit.cover,
  41. width: 170.w,
  42. height: 276.h,
  43. holderImg: 'none',
  44. ),
  45. ),
  46. Image.asset(
  47. Assets.images.playIcon.path,
  48. width: 40.w,
  49. height: 40.w,
  50. ),
  51. ],
  52. ),
  53. ),
  54. Flexible(
  55. flex: 1,
  56. child: Container(
  57. decoration: BoxDecoration(
  58. borderRadius: BorderRadius.only(
  59. bottomLeft: Radius.circular(8.r),
  60. bottomRight: Radius.circular(8.r),
  61. ),
  62. color: Colors.white,
  63. ),
  64. padding: EdgeInsets.symmetric(vertical: 6.h),
  65. child: Row(
  66. crossAxisAlignment: CrossAxisAlignment.center,
  67. children: [
  68. SizedBox(width: 5.w),
  69. Expanded(
  70. child: myTxt(
  71. text: newData.title ?? "",
  72. color: Colors.black,
  73. maxLines: 1,
  74. fontSize: 10.sp,
  75. ),
  76. ),
  77. SizedBox(width: 2.w),
  78. Icon(
  79. newData.isLiked == true
  80. ? Icons.favorite
  81. : Icons.favorite_border,
  82. size: 12.w,
  83. ),
  84. myTxt(
  85. text: newData.status ?? "0",
  86. color: newData.isLiked == true ? Colors.red : color666666,
  87. fontSize: 10.sp,
  88. ),
  89. SizedBox(width: 5.w),
  90. ],
  91. ),
  92. ),
  93. ),
  94. ],
  95. ),
  96. );
  97. }
  98. }