import 'package:flutter/material.dart'; import 'package:loris/business_logic/posts/posts.dart'; import 'package:loris/business_logic/timeline/timeline.dart'; import 'package:loris/global.dart' as global; import '../partials/post.dart'; class FullPostView extends StatefulWidget { const FullPostView({ super.key, required this.originPostModel, }); final PostModel originPostModel; @override State createState() => _FullPostViewState(); } class _FullPostViewState extends State { bool loading = false; @override Widget build(BuildContext context) { return SimpleDialog( contentPadding: const EdgeInsets.all(24), children: [ Container( constraints: global.getConstraints(context), width: global.getWidth(context), child: SingleChildScrollView( child: SingleFullPostDisplay( level: 0, model: widget.originPostModel.reblog ?? widget.originPostModel, ), ), ) ], ); } } class SingleFullPostDisplay extends StatefulWidget { const SingleFullPostDisplay({ super.key, required this.level, required this.model, this.toBeDistributed, }); final int level; final PostModel model; final List? toBeDistributed; @override State createState() => _SingleFullPostDisplayState(); } class _SingleFullPostDisplayState extends State { bool loading = true; List ancestors = []; List descendants = []; @override void initState() { if (widget.level == 0) { loadPosts(); } else { setState(() { loading = false; }); } super.initState(); } void loadPosts() async { final r = await getContextForPost(widget.model); if (r.value != null) { setState(() { if (widget.level == 0) { ancestors = r.value!.ancestors; } descendants = r.value!.descendants; }); } if (mounted) { setState(() { loading = false; }); } } @override Widget build(BuildContext context) { List toBeDistributed = widget.toBeDistributed ?? []; List ancestorWidgets = ancestors .map( (e) => Post(model: e), ) .toList(); List descendantsWidgets = []; if (widget.toBeDistributed == null) { for (var element in descendants) { toBeDistributed.add(element); if (element.id == widget.model.id) {} } } for (var element in toBeDistributed) { if (element.inReplyTo == widget.model.id) { descendantsWidgets.add(SingleFullPostDisplay( level: widget.level + 1, model: element, toBeDistributed: toBeDistributed, )); } } List c = []; c.addAll(ancestorWidgets); c.add(Post(model: widget.model)); c.addAll(descendantsWidgets); return Container( padding: EdgeInsets.fromLTRB(widget.level == 0 ? 0 : 4, 0, 0, 0), decoration: BoxDecoration( border: widget.level == 0 ? const Border() : Border( left: BorderSide( width: 4, color: widget.level.isEven ? Theme.of(context).colorScheme.secondary : Theme.of(context).colorScheme.primary, ), ), ), child: Column(children: c)); } }