import 'package:flutter/material.dart'; import 'package:localization/localization.dart'; import 'package:loris/partials/post.dart'; import '../business_logic/timeline/timeline.dart' as logic; import '../global.dart' as global; class Thread extends StatefulWidget { const Thread({ required this.model, Key? key, this.constrained = true, }) : super(key: key); final logic.ThreadModel model; final bool constrained; @override State createState() => _ThreadState(); } class _ThreadState extends State { Set contentWarnings = {}; int sensitivePosts = 0; bool showSensitive = false; @override Widget build(BuildContext context) { List c = []; for (var element in widget.model.posts) { c.add(Post( model: element, hideSensitive: !showSensitive, )); if (element.sensitive) { sensitivePosts += 1; contentWarnings.add(element.spoilerText); } } contentWarnings.map( (e) => e.trim(), ); contentWarnings.removeWhere((element) => element == ""); if (sensitivePosts > 1 && c.length > 1) { String s = ""; int i = 0; for (var element in contentWarnings) { if (i == 0 && i < contentWarnings.length - 1) { s = "$element;"; } else if (i < contentWarnings.length - 1) { s = "$s $element;"; } else { s = "$s $element"; } i++; } c.insert( 0, Row( mainAxisAlignment: MainAxisAlignment.end, children: [ Expanded( child: SelectableText(s), ), ElevatedButton.icon( onPressed: () { setState(() { showSensitive = !showSensitive; }); }, icon: Icon(showSensitive ? Icons.visibility_off : Icons.visibility), label: Text(showSensitive ? "hide".i18n() : "show".i18n()), ), ], ), ); } if (!widget.constrained) { return Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( color: Theme.of(context).colorScheme.surface, border: Border.all( color: Theme.of(context).colorScheme.secondary, width: 2, ), borderRadius: BorderRadius.circular(8), ), child: Column( children: c, ), ); } return Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Container( clipBehavior: Clip.none, foregroundDecoration: BoxDecoration( borderRadius: const BorderRadius.all(Radius.circular(8)), border: Border.all( width: 2, color: Theme.of(context).colorScheme.secondary, ), ), width: global.getWidth(context), constraints: global.getConstraints(context), child: Material( borderRadius: const BorderRadius.all(Radius.circular(8)), child: Padding( padding: const EdgeInsets.all(24), child: Column( children: c, ), ), ), ), ], ); } }