import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:logging/logging.dart'; import '../../globals.dart'; import '../../models/connection.dart'; import '../../models/timeline_entry.dart'; import '../../models/visibility.dart'; import '../../routes.dart'; import '../../services/auth_service.dart'; import '../../services/connections_manager.dart'; import '../../services/reshared_via_service.dart'; import '../../utils/active_profile_selector.dart'; import '../../utils/dateutils.dart'; import '../image_control.dart'; import '../padding.dart'; class StatusHeaderControl extends StatelessWidget { static final _logger = Logger('$StatusHeaderControl'); final TimelineEntry entry; final bool showIsCommentText; const StatusHeaderControl({ super.key, required this.entry, this.showIsCommentText = false, }); void goToProfile(BuildContext context, String id) { context.pushNamed(ScreenPaths.userProfile, pathParameters: {'id': id}); } @override Widget build(BuildContext context) { late final Connection author; late final Connection reshareAuthor; final activeProfile = getIt().currentProfile; final reshareId = getIt>() .getForProfile(activeProfile) .transform((s) => s.getForPost(entry.id)?.resharers.firstOrNull) .getValueOrElse(() => null); getIt>() .getForProfile(activeProfile) .match( onSuccess: (manager) { author = manager.getById(entry.authorId).getValueOrElse(() => Connection()); reshareAuthor = reshareId == null ? Connection() : manager.getById(reshareId).getValueOrElse(() => Connection()); }, onError: (error) { _logger.severe('Error getting connections manageR: $error'); author = Connection(); reshareAuthor = Connection(); }, ); return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Wrap( crossAxisAlignment: WrapCrossAlignment.end, runSpacing: 5.0, children: [ ImageControl( imageUrl: author.avatarUrl.toString(), iconOverride: const Icon(Icons.person), width: 32.0, onTap: () => goToProfile(context, author.id), ), const HorizontalPadding(), Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, crossAxisAlignment: CrossAxisAlignment.start, children: [ GestureDetector( onTap: () => goToProfile(context, author.id), child: Text( author.name, style: Theme.of(context).textTheme.bodyLarge, ), ), ], ), if (reshareAuthor.isNotEmpty && author.id != activeProfile.userId) ...[ const HorizontalPadding(width: 3.0), const Text('reshared by '), const HorizontalPadding(width: 3.0), Row( mainAxisSize: MainAxisSize.min, children: [ ImageControl( imageUrl: reshareAuthor.avatarUrl.toString(), iconOverride: const Icon(Icons.person), width: 32.0, onTap: () => goToProfile(context, reshareAuthor.id), ), const HorizontalPadding(width: 3.0), GestureDetector( onTap: () => goToProfile(context, reshareAuthor.id), child: Text( reshareAuthor.name, style: Theme.of(context).textTheme.bodyLarge, ), ), ], ), ], if (showIsCommentText && entry.parentId.isNotEmpty) Text( ' ...made a comment:', style: Theme.of(context).textTheme.bodyLarge, ), ], ), Row( children: [ Text( ElapsedDateUtils.epochSecondsToString(entry.backdatedTimestamp), style: Theme.of(context).textTheme.bodySmall, ), const HorizontalPadding(), Icon( entry.visibility.type == VisibilityType.public ? Icons.public : Icons.lock, color: Theme.of(context).hintColor, size: Theme.of(context).textTheme.bodySmall?.fontSize, ), ], ), ], ); } }