Extract group building code to a function for better readability

This commit is contained in:
ashilkn
2025-07-03 10:37:59 +05:30
parent 6d576adce0
commit b1386b8f57

View File

@@ -38,61 +38,36 @@ class GallerySections {
init();
}
final List<String> _groupIDs = [];
final Map<String, List<EnteFile>> _groupIDToFilesMap = {};
final Map<String, GroupHeaderData> _groupIdToheaderDataMap = {};
final List<String> _groupIds = [];
final Map<String, List<EnteFile>> _groupIdToFilesMap = {};
final Map<String, GroupHeaderData> _groupIdToHeaderDataMap = {};
late final int crossAxisCount;
final currentUserID = Configuration.instance.getUserID();
static const double spacing = 2.0;
List<String> get groupIDs => _groupIDs;
Map<String, List<EnteFile>> get groupIDToFilesMap => _groupIDToFilesMap;
List<String> get groupIDs => _groupIds;
Map<String, List<EnteFile>> get groupIDToFilesMap => _groupIdToFilesMap;
Map<String, GroupHeaderData> get groupIdToheaderDataMap =>
_groupIdToheaderDataMap;
_groupIdToHeaderDataMap;
final _uuid = const Uuid();
void init() {
List<EnteFile> dailyFiles = [];
for (int index = 0; index < allFiles.length; index++) {
if (index > 0 &&
!groupType.areFromSameGroup(allFiles[index - 1], allFiles[index])) {
_createNewGroup(dailyFiles);
dailyFiles = [];
}
dailyFiles.add(allFiles[index]);
}
if (dailyFiles.isNotEmpty) {
_createNewGroup(dailyFiles);
}
_buildGroups();
crossAxisCount = localSettings.getPhotoGridSize();
}
void _createNewGroup(
List<EnteFile> dailyFiles,
) {
final uuid = _uuid.v1();
_groupIDs.add(uuid);
_groupIDToFilesMap[uuid] = dailyFiles;
_groupIdToheaderDataMap[uuid] = GroupHeaderData(
title: groupType.getTitle(
context,
dailyFiles.first,
lastFile: dailyFiles.last,
),
groupType: groupType,
);
}
List<FixedExtentSectionLayout> getSectionLayouts() {
int currentIndex = 0;
double currentOffset = 0.0;
final tileHeight = widthAvailable / crossAxisCount;
final sectionLayouts = <FixedExtentSectionLayout>[];
final groupIDs = _groupIdToFilesMap.keys;
// TODO: spacing
for (final key in _groupIDToFilesMap.keys) {
final filesInGroup = _groupIDToFilesMap[key]!;
for (final groupID in groupIDs) {
final filesInGroup = _groupIdToFilesMap[groupID]!;
final numberOfGridRows = (filesInGroup.length / crossAxisCount).ceil();
final firstIndex = currentIndex == 0 ? currentIndex : currentIndex + 1;
final lastIndex = firstIndex + numberOfGridRows;
@@ -109,11 +84,11 @@ class GallerySections {
maxOffset: maxOffset,
headerExtent: headerExtent,
tileHeight: tileHeight,
spacing: 0,
spacing: spacing,
builder: (context, index) {
if (index == firstIndex) {
return GroupHeaderWidget(
title: _groupIdToheaderDataMap[key]!.title,
title: _groupIdToHeaderDataMap[groupID]!.title,
gridSize: crossAxisCount,
);
} else {
@@ -138,8 +113,7 @@ class GallerySections {
return FixedExtentGridRow(
width: tileHeight,
height: tileHeight,
//TODO: spacing
spacing: 0,
spacing: spacing,
textDirection: TextDirection.ltr,
children: gridRowChildren,
);
@@ -148,11 +122,49 @@ class GallerySections {
),
);
currentIndex = lastIndex;
// Adding this crashes the app??????
// if (groupID != groupIDs.last) {
// // lastIndex - (firstIndex + 1) - 1
// currentOffset = maxOffset + (lastIndex - firstIndex) * spacing;
// }
currentOffset = maxOffset;
}
return sectionLayouts;
}
void _buildGroups() {
List<EnteFile> dailyFiles = [];
for (int index = 0; index < allFiles.length; index++) {
if (index > 0 &&
!groupType.areFromSameGroup(allFiles[index - 1], allFiles[index])) {
_createNewGroup(dailyFiles);
dailyFiles = [];
}
dailyFiles.add(allFiles[index]);
}
if (dailyFiles.isNotEmpty) {
_createNewGroup(dailyFiles);
}
}
void _createNewGroup(
List<EnteFile> dailyFiles,
) {
final uuid = _uuid.v1();
_groupIds.add(uuid);
_groupIdToFilesMap[uuid] = dailyFiles;
_groupIdToHeaderDataMap[uuid] = GroupHeaderData(
title: groupType.getTitle(
context,
dailyFiles.first,
lastFile: dailyFiles.last,
),
groupType: groupType,
);
}
}
class GroupHeaderData {