slot_assignment.dart 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import 'package:flutter/foundation.dart';
  2. /// A persisted app choice for one shortcut slot.
  3. @immutable
  4. class SlotAssignment {
  5. const SlotAssignment({
  6. required this.packageName,
  7. required this.activityName,
  8. required this.label,
  9. this.iconAsset,
  10. });
  11. final String packageName;
  12. final String activityName;
  13. final String label;
  14. /// Optional stylized SVG icon for this Home button. Null means the pinned
  15. /// app's own icon (or the generic fallback for fixed slots).
  16. final String? iconAsset;
  17. bool get hasCustomIcon => iconAsset?.isNotEmpty ?? false;
  18. factory SlotAssignment.fromMap(Map<dynamic, dynamic> map) {
  19. return SlotAssignment(
  20. packageName: (map['package'] as String?) ?? '',
  21. activityName: (map['activity'] as String?) ?? '',
  22. label: (map['label'] as String?) ?? '',
  23. iconAsset: map['iconAsset'] as String?,
  24. );
  25. }
  26. Map<String, Object?> toMap() {
  27. return {
  28. 'package': packageName,
  29. 'activity': activityName,
  30. 'label': label,
  31. if (hasCustomIcon) 'iconAsset': iconAsset,
  32. };
  33. }
  34. @override
  35. bool operator ==(Object other) {
  36. return other is SlotAssignment &&
  37. other.packageName == packageName &&
  38. other.activityName == activityName;
  39. }
  40. @override
  41. int get hashCode => Object.hash(packageName, activityName);
  42. @override
  43. String toString() => label.isEmpty ? packageName : label;
  44. }