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>
60 lines
2.1 KiB
Dart
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),
|
|
],
|
|
);
|
|
}
|
|
}
|