Add accepted leg edit notification and class leaderboard
All checks were successful
Release / meta (push) Successful in 12s
Release / linux-build (push) Successful in 1m0s
Release / web-build (push) Successful in 2m6s
Release / android-build (push) Successful in 6m8s
Release / release-master (push) Successful in 16s
Release / release-dev (push) Successful in 19s

This commit is contained in:
2026-01-05 01:09:43 +00:00
parent 42ac7a97e1
commit 8ab3f53c0d
11 changed files with 1114 additions and 132 deletions

View File

@@ -22,6 +22,7 @@ import 'package:mileograph_flutter/components/pages/stats.dart';
import 'package:mileograph_flutter/components/pages/traction.dart';
import 'package:mileograph_flutter/components/pages/more/user_profile_page.dart';
import 'package:mileograph_flutter/components/widgets/friend_request_notification_card.dart';
import 'package:mileograph_flutter/components/widgets/leg_share_edit_notification_card.dart';
import 'package:mileograph_flutter/components/widgets/leg_share_notification_card.dart';
import 'package:mileograph_flutter/objects/objects.dart';
import 'package:mileograph_flutter/services/authservice.dart';
@@ -731,7 +732,8 @@ class _MyHomePageState extends State<MyHomePage> {
final item = notifications[index];
final isFriendRequest = _isFriendRequestNotification(item);
final isLegShare = _isLegShareNotification(item);
final isSpecial = isFriendRequest || isLegShare;
final isLegShareEdit = _isLegShareEditNotification(item);
final isSpecial = isFriendRequest || isLegShare || isLegShareEdit;
return Card(
child: Padding(
padding: const EdgeInsets.all(12.0),
@@ -754,10 +756,12 @@ class _MyHomePageState extends State<MyHomePage> {
),
const SizedBox(height: 4),
Text(
isFriendRequest || isLegShare
isSpecial
? isFriendRequest
? 'Accept to share entries'
: 'Shared entry details below.'
: isLegShareEdit
? 'Shared leg edits below.'
: 'Shared entry details below.'
: item.body,
style: Theme.of(context).textTheme.bodyMedium,
),
@@ -801,6 +805,13 @@ class _MyHomePageState extends State<MyHomePage> {
notification: item,
),
),
if (_isLegShareEditNotification(item))
Padding(
padding: const EdgeInsets.only(top: 8.0),
child: LegShareEditNotificationCard(
notification: item,
),
),
if (isLegShare)
Padding(
padding: const EdgeInsets.only(top: 8.0),
@@ -890,7 +901,22 @@ class _MyHomePageState extends State<MyHomePage> {
bool _isLegShareNotification(UserNotification notification) {
final channel = notification.channel.trim().toLowerCase();
final type = notification.type.trim().toLowerCase();
return channel.contains('leg_share') || type.contains('leg_share');
final isAcceptEdits =
_isLegShareAcceptEdits(channel) || _isLegShareAcceptEdits(type);
return (channel.contains('leg_share') || type.contains('leg_share')) &&
!isAcceptEdits;
}
bool _isLegShareEditNotification(UserNotification notification) {
final channel = notification.channel.trim().toLowerCase();
final type = notification.type.trim().toLowerCase();
return _isLegShareAcceptEdits(channel) || _isLegShareAcceptEdits(type);
}
bool _isLegShareAcceptEdits(String value) {
final normalized = value.trim().toLowerCase();
// Match both singular/plural: leg_share_accept_edit / leg_share_accept_edits
return normalized.contains('leg_share_accept_edit');
}
Widget _buildBadge(String label) {