refactor threads

This commit is contained in:
zoe 2022-09-07 15:31:03 +02:00
parent 9d9d2d163c
commit 0bbb74332d
1 changed files with 55 additions and 70 deletions

View File

@ -17,66 +17,15 @@ class FullPostView extends StatefulWidget {
} }
class _FullPostViewState extends State<FullPostView> { class _FullPostViewState extends State<FullPostView> {
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<PostModel>? toBeDistributed;
@override
State<SingleFullPostDisplay> createState() => _SingleFullPostDisplayState();
}
class _SingleFullPostDisplayState extends State<SingleFullPostDisplay> {
bool loading = true;
List<PostModel> ancestors = []; List<PostModel> ancestors = [];
List<PostModel> descendants = []; List<PostModel> descendants = [];
@override bool loading = true;
void initState() {
if (widget.level == 0) {
loadPosts();
} else {
setState(() {
loading = false;
});
}
super.initState();
}
void loadPosts() async { void loadPosts() async {
final r = await getContextForPost(widget.model); final r = await getContextForPost(widget.originPostModel);
if (r.value != null) { if (r.value != null) {
setState(() { setState(() {
if (widget.level == 0) { ancestors = r.value!.ancestors;
ancestors = r.value!.ancestors;
}
descendants = r.value!.descendants; descendants = r.value!.descendants;
}); });
} }
@ -87,9 +36,49 @@ class _SingleFullPostDisplayState extends State<SingleFullPostDisplay> {
} }
} }
@override
void initState() {
loadPosts();
super.initState();
}
@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(
ancestors: ancestors,
descendants: descendants,
level: 0,
model: widget.originPostModel.reblog ?? widget.originPostModel,
),
),
)
],
);
}
}
class SingleFullPostDisplay extends StatelessWidget {
const SingleFullPostDisplay({
super.key,
required this.level,
required this.model,
required this.ancestors,
required this.descendants,
});
final int level;
final PostModel model;
final List<PostModel> ancestors;
final List<PostModel> descendants;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
List<PostModel> toBeDistributed = widget.toBeDistributed ?? [];
List<Post> ancestorWidgets = ancestors List<Post> ancestorWidgets = ancestors
.map( .map(
(e) => Post(model: e), (e) => Post(model: e),
@ -98,37 +87,33 @@ class _SingleFullPostDisplayState extends State<SingleFullPostDisplay> {
List<Widget> descendantsWidgets = []; List<Widget> descendantsWidgets = [];
if (widget.toBeDistributed == null) { // seems most efficient
for (var element in descendants) { // considering that lists aren't v long
toBeDistributed.add(element); for (var element in descendants) {
if (element.id == widget.model.id) {} if (element.inReplyTo == model.id) {
}
}
for (var element in toBeDistributed) {
if (element.inReplyTo == widget.model.id) {
descendantsWidgets.add(SingleFullPostDisplay( descendantsWidgets.add(SingleFullPostDisplay(
level: widget.level + 1, level: level + 1,
model: element, model: element,
toBeDistributed: toBeDistributed, ancestors: const [],
descendants: descendants,
)); ));
} }
} }
List<Widget> c = []; List<Widget> c = [];
c.addAll(ancestorWidgets); c.addAll(ancestorWidgets);
c.add(Post(model: widget.model)); c.add(Post(model: model));
c.addAll(descendantsWidgets); c.addAll(descendantsWidgets);
return Container( return Container(
padding: EdgeInsets.fromLTRB(widget.level == 0 ? 0 : 4, 0, 0, 0), padding: EdgeInsets.fromLTRB(level == 0 ? 0 : 4, 0, 0, 0),
decoration: BoxDecoration( decoration: BoxDecoration(
border: widget.level == 0 border: level == 0
? const Border() ? const Border()
: Border( : Border(
left: BorderSide( left: BorderSide(
width: 4, width: 4,
color: widget.level.isEven color: level.isEven
? Theme.of(context).colorScheme.secondary ? Theme.of(context).colorScheme.secondary
: Theme.of(context).colorScheme.primary, : Theme.of(context).colorScheme.primary,
), ),