Files
Immich/mobile/lib/presentation/widgets/memory/memory_title.widget.dart
T
762748f9ea fix(mobile): show the memories date in every app language (#32262)
fix(mobile): show the memories date in every app language (#32259)

(cherry picked from commit 116a9436ad1f8164d9dee904551e5067d724be99)

Co-authored-by: Santo Shakil <santoshakil@users.noreply.github.com>
2026-10-09 09:04:03 +00:00

60 lines
2.1 KiB
Dart

import 'package:flutter/material.dart';
import 'package:immich_mobile/domain/models/asset/base_asset.model.dart';
import 'package:immich_mobile/domain/models/memory.model.dart';
import 'package:immich_mobile/extensions/datetime_extensions.dart';
import 'package:immich_mobile/extensions/object_extensions.dart';
import 'package:immich_mobile/generated/translations.g.dart';
import 'package:intl/intl.dart';
/// [asset] adds the age at that asset to birthday titles
String getMemoryTitle(Translations t, Memory memory, {RemoteAsset? asset, bool preferDate = false}) =>
switch (memory.type) {
MemoryTypeEnum.onThisDay =>
preferDate
? DateFormat.yMMMMd(resolvedDateTimeLocale()).format(memory.memoryAt)
: t.years_ago(years: DateTime.now().year - memory.data.year),
MemoryTypeEnum.birthday => _getBirthdayTitle(t, memory.data, asset),
};
String _getBirthdayTitle(Translations t, MemoryData data, RemoteAsset? asset) {
final name = data.personName;
if (name == null || name.isEmpty) {
return t.unknown;
}
final age = asset?.let((asset) => asset.createdAt.toLocal().year - data.year);
if (age == null || age < 1) {
return t.birthday_memory_title(name: name);
}
return t.birthday_memory_title_with_age(name: name, age: age);
}
class MemoryTitle extends StatelessWidget {
final Memory memory;
final TextStyle? style;
/// If true, the title will prefer to display a full date, if that is an option (onThisDay)
final bool preferDate;
const MemoryTitle({super.key, required this.memory, this.style, this.preferDate = false});
@override
Widget build(BuildContext context) {
final title = getMemoryTitle(context.t, memory, preferDate: preferDate);
if (memory.type != MemoryTypeEnum.birthday) {
return Text(title, style: style);
}
return Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Icon(Icons.cake_rounded, color: style?.color, size: 20),
const SizedBox(height: 4),
Text(title, style: style, maxLines: 2, overflow: TextOverflow.ellipsis),
],
);
}
}