Line data Source code
1 : import 'package:collection/collection.dart'; 2 : 3 : import 'package:widgetbook/src/models/organizers/organizer.dart'; 4 : import 'package:widgetbook/src/models/organizers/organizers.dart'; 5 : 6 : /// ExpandableOrganizer is an abstract model which can host 7 : /// WidgetElements and/or Folders 8 : abstract class ExpandableOrganizer extends Organizer { 9 : /// Used to implement collapsing and expanding of the folder tree. 10 : bool isExpanded; 11 : 12 : /// The folders of one level in the folder tree. 13 : /// Folders will be shown above widgets. 14 : final List<Folder> folders; 15 : 16 : /// The widgets of one level in the folder tree. 17 : /// Widgets will be shown below folders; 18 : final List<WidgetElement> widgets; 19 : 20 : /// Abstract class for organizer panel in the left. 21 1 : ExpandableOrganizer({ 22 : required String name, 23 : this.isExpanded = false, 24 : List<Folder>? folders, 25 : List<WidgetElement>? widgets, 26 1 : }) : folders = folders ?? List<Folder>.empty(), 27 1 : widgets = widgets ?? List<WidgetElement>.empty(), 28 1 : super( 29 : name, 30 : ); 31 : 32 1 : @override 33 : bool operator ==(Object other) { 34 : if (identical(this, other)) return true; 35 1 : final listEquals = const DeepCollectionEquality().equals; 36 : 37 1 : return other is ExpandableOrganizer && 38 3 : other.isExpanded == isExpanded && 39 2 : listEquals(other.folders, folders) && 40 2 : listEquals(other.widgets, widgets); 41 : } 42 : 43 0 : @override 44 0 : int get hashCode => isExpanded.hashCode ^ folders.hashCode ^ widgets.hashCode; 45 : }