mirror of
https://gitlab.com/mysocialportal/relatica
synced 2024-10-19 08:13:34 +00:00
60 lines
1.9 KiB
Dart
60 lines
1.9 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:logging/logging.dart';
|
|
|
|
import '../../globals.dart';
|
|
import '../../models/timeline_entry.dart';
|
|
import '../../services/timeline_manager.dart';
|
|
import '../../utils/snackbar_builder.dart';
|
|
|
|
class InteractionsBarControl extends StatefulWidget {
|
|
final TimelineEntry entry;
|
|
|
|
const InteractionsBarControl({super.key, required this.entry});
|
|
|
|
@override
|
|
State<InteractionsBarControl> createState() => _InteractionsBarControlState();
|
|
}
|
|
|
|
class _InteractionsBarControlState extends State<InteractionsBarControl> {
|
|
static final _logger = Logger('$InteractionsBarControl');
|
|
|
|
bool get isFavorited => widget.entry.isFavorited;
|
|
|
|
int get reshares => widget.entry.engagementSummary.rebloggedCount;
|
|
|
|
int get comments => widget.entry.engagementSummary.repliesCount;
|
|
|
|
int get likes => widget.entry.engagementSummary.favoritesCount;
|
|
|
|
Future<void> toggleFavorited() async {
|
|
final newState = !isFavorited;
|
|
_logger.finest('Trying to toggle favorite from $isFavorited to $newState');
|
|
final result = await getIt<TimelineManager>()
|
|
.toggleFavorited(widget.entry.id, newState);
|
|
result.match(onSuccess: (update) {
|
|
setState(() {
|
|
_logger.finest(
|
|
'Success toggling! $isFavorited -> ${update.entry.isFavorited}');
|
|
});
|
|
}, onError: (error) {
|
|
buildSnackbar(context, 'Error toggling like status: $error');
|
|
});
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
_logger.finest('Building: ${widget.entry.toShortString()}');
|
|
return Column(
|
|
mainAxisAlignment: MainAxisAlignment.start,
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Text('$likes likes, $reshares reshares, $comments comments'),
|
|
IconButton(
|
|
onPressed: () async => await toggleFavorited(),
|
|
icon: isFavorited
|
|
? Icon(Icons.thumb_up)
|
|
: Icon(Icons.thumb_up_outlined)),
|
|
],
|
|
);
|
|
}
|
|
}
|