slot_assignment.dart 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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.iconPackageName,
  10. this.iconActivityName,
  11. });
  12. final String packageName;
  13. final String activityName;
  14. final String label;
  15. /// Optional app whose icon should be used for this Home button. Only pinned
  16. /// apps use this; slot assignments leave both fields null.
  17. final String? iconPackageName;
  18. final String? iconActivityName;
  19. bool get hasCustomIcon =>
  20. (iconPackageName?.isNotEmpty ?? false) &&
  21. (iconActivityName?.isNotEmpty ?? false);
  22. factory SlotAssignment.fromMap(Map<dynamic, dynamic> map) {
  23. return SlotAssignment(
  24. packageName: (map['package'] as String?) ?? '',
  25. activityName: (map['activity'] as String?) ?? '',
  26. label: (map['label'] as String?) ?? '',
  27. iconPackageName: map['iconPackage'] as String?,
  28. iconActivityName: map['iconActivity'] as String?,
  29. );
  30. }
  31. Map<String, Object?> toMap() {
  32. return {
  33. 'package': packageName,
  34. 'activity': activityName,
  35. 'label': label,
  36. if (hasCustomIcon) 'iconPackage': iconPackageName,
  37. if (hasCustomIcon) 'iconActivity': iconActivityName,
  38. };
  39. }
  40. @override
  41. bool operator ==(Object other) {
  42. return other is SlotAssignment &&
  43. other.packageName == packageName &&
  44. other.activityName == activityName;
  45. }
  46. @override
  47. int get hashCode => Object.hash(packageName, activityName);
  48. @override
  49. String toString() => label.isEmpty ? packageName : label;
  50. }