app_header_item.dart 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import 'package:flutter/material.dart';
  2. /// App Header 数据模型 — 来自 /admin/cms/app-header/active-list 接口
  3. class AppHeaderItem {
  4. final int id;
  5. final String title;
  6. final String mediaType; // "image" | "video"
  7. final int displayType; // 0=通用(用mediaUrl), 1=日夜分离(用dayMediaUrl/nightMediaUrl)
  8. final String mediaUrl; // 通用媒体地址 (displayType=0 时使用)
  9. final String dayMediaUrl; // 日间媒体地址 (displayType=1 时使用)
  10. final String nightMediaUrl; // 夜间媒体地址 (displayType=1 时使用)
  11. final String linkType; // "internal" | "external"
  12. final String linkUrl;
  13. final int sort;
  14. const AppHeaderItem({
  15. required this.id,
  16. required this.title,
  17. required this.mediaType,
  18. required this.displayType,
  19. this.mediaUrl = '',
  20. this.dayMediaUrl = '',
  21. this.nightMediaUrl = '',
  22. this.linkType = 'internal',
  23. this.linkUrl = '',
  24. this.sort = 0,
  25. });
  26. /// 根据 Brightness 返回正确的媒体 URL
  27. String resolveUrl(Brightness brightness) {
  28. if (displayType == 0) return mediaUrl;
  29. return brightness == Brightness.dark ? nightMediaUrl : dayMediaUrl;
  30. }
  31. bool get isVideo => mediaType == 'video';
  32. bool get isImage => mediaType == 'image';
  33. bool get isExternal => linkType == 'external';
  34. bool get isInternal => linkType == 'internal';
  35. factory AppHeaderItem.fromJson(Map<String, dynamic> json) {
  36. return AppHeaderItem(
  37. id: json['id'] as int? ?? 0,
  38. title: json['title'] as String? ?? '',
  39. mediaType: json['mediaType'] as String? ?? 'image',
  40. displayType: json['displayType'] as int? ?? 0,
  41. mediaUrl: json['mediaUrl'] as String? ?? '',
  42. dayMediaUrl: json['dayMediaUrl'] as String? ?? '',
  43. nightMediaUrl: json['nightMediaUrl'] as String? ?? '',
  44. linkType: json['linkType'] as String? ?? 'internal',
  45. linkUrl: json['linkUrl'] as String? ?? '',
  46. sort: json['sort'] as int? ?? 0,
  47. );
  48. }
  49. }