mirror of
https://gitlab.com/mysocialportal/relatica
synced 2024-10-19 18:43:32 +00:00
128 lines
4.2 KiB
Dart
128 lines
4.2 KiB
Dart
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/connections_manager.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, params: {'id': id});
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
late final Connection author;
|
|
late final Connection reshareAuthor;
|
|
|
|
getIt<ActiveProfileSelector<ConnectionsManager>>().activeEntry.match(
|
|
onSuccess: (manager) {
|
|
author =
|
|
manager.getById(entry.authorId).getValueOrElse(() => Connection());
|
|
reshareAuthor = manager
|
|
.getById(entry.reshareAuthorId)
|
|
.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: 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.bodyText1,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
if (reshareAuthor.isNotEmpty) ...[
|
|
const HorizontalPadding(width: 3.0),
|
|
const Text('reshared post by: '),
|
|
const HorizontalPadding(width: 3.0),
|
|
Row(
|
|
mainAxisSize: MainAxisSize.min,
|
|
children: [
|
|
ImageControl(
|
|
imageUrl: reshareAuthor.avatarUrl.toString(),
|
|
iconOverride: 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.bodyText1,
|
|
),
|
|
),
|
|
],
|
|
),
|
|
],
|
|
if (showIsCommentText && entry.parentId.isNotEmpty)
|
|
Text(
|
|
' ...made a comment:',
|
|
style: Theme.of(context).textTheme.bodyText1,
|
|
),
|
|
],
|
|
),
|
|
Row(
|
|
children: [
|
|
Text(
|
|
ElapsedDateUtils.epochSecondsToString(entry.backdatedTimestamp),
|
|
style: Theme.of(context).textTheme.caption,
|
|
),
|
|
const HorizontalPadding(),
|
|
Icon(
|
|
entry.visibility.type == VisibilityType.public
|
|
? Icons.public
|
|
: Icons.lock,
|
|
color: Theme.of(context).hintColor,
|
|
size: Theme.of(context).textTheme.caption?.fontSize,
|
|
),
|
|
],
|
|
),
|
|
],
|
|
);
|
|
}
|
|
}
|