kopia lustrzana https://gitlab.com/mysocialportal/relatica
80 wiersze
2.2 KiB
Dart
80 wiersze
2.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:logging/logging.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
import '../../models/entry_tree_item.dart';
|
|
import '../../models/timeline_entry.dart';
|
|
import '../../services/timeline_manager.dart';
|
|
import '../../utils/entry_tree_item_flattening.dart';
|
|
import 'flattened_tree_entry_control.dart';
|
|
|
|
class PostControl extends StatefulWidget {
|
|
final EntryTreeItem originalItem;
|
|
final bool openRemote;
|
|
final bool showStatusOpenButton;
|
|
|
|
const PostControl(
|
|
{super.key,
|
|
required this.originalItem,
|
|
required this.openRemote,
|
|
required this.showStatusOpenButton});
|
|
|
|
@override
|
|
State<PostControl> createState() => _PostControlState();
|
|
}
|
|
|
|
class _PostControlState extends State<PostControl> {
|
|
static final _logger = Logger('$PostControl');
|
|
|
|
var showContent = true;
|
|
|
|
var showComments = false;
|
|
|
|
EntryTreeItem get item => widget.originalItem;
|
|
|
|
TimelineEntry get entry => item.entry;
|
|
|
|
bool get isPublic => item.entry.isPublic;
|
|
|
|
bool get hasComments => entry.engagementSummary.repliesCount > 0;
|
|
|
|
@override
|
|
void initState() {
|
|
showContent = entry.spoilerText.isEmpty;
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final manager = context.watch<TimelineManager>();
|
|
_logger.finest('Building ${item.entry.toShortString()}');
|
|
final items = widget.originalItem.flatten(topLevelOnly: !showComments);
|
|
final widgets = <Widget>[];
|
|
for (var i = 0; i < items.length; i++) {
|
|
final itemWidget = FlattenedTreeEntryControl(
|
|
originalItem: items[i],
|
|
openRemote: widget.openRemote,
|
|
showStatusOpenButton: widget.showStatusOpenButton,
|
|
);
|
|
|
|
widgets.add(itemWidget);
|
|
if (i == 0 && hasComments) {
|
|
widgets.add(
|
|
TextButton(
|
|
onPressed: () async {
|
|
setState(() {
|
|
showComments = !showComments;
|
|
});
|
|
if (showComments) {
|
|
await manager.refreshStatusChain(entry.id);
|
|
}
|
|
},
|
|
child:
|
|
Text(showComments ? 'Hide Comments' : 'Load & Show Comments'),
|
|
),
|
|
);
|
|
}
|
|
}
|
|
return Column(children: widgets);
|
|
}
|
|
}
|