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 createState() => _PostControlState(); } class _PostControlState extends State { 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(); _logger.finest('Building ${item.entry.toShortString()}'); final items = widget.originalItem.flatten(topLevelOnly: !showComments); final widgets = []; 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); } }