From da5da10b1693cd38e5f7b9411bfae94a3a851884 Mon Sep 17 00:00:00 2001 From: Mo Date: Sun, 20 Jun 2021 00:19:02 -0700 Subject: [PATCH] feat: add ExpandableText widget --- .../widgets/components/expandable_text.dart | 63 +++++++++++++++++++ client/lib/widgets/detail/abstract.dart | 17 +---- 2 files changed, 65 insertions(+), 15 deletions(-) create mode 100644 client/lib/widgets/components/expandable_text.dart diff --git a/client/lib/widgets/components/expandable_text.dart b/client/lib/widgets/components/expandable_text.dart new file mode 100644 index 00000000..22280c9e --- /dev/null +++ b/client/lib/widgets/components/expandable_text.dart @@ -0,0 +1,63 @@ +import 'package:flutter/material.dart'; + +class ExpandableText extends StatefulWidget { + const ExpandableText({ + Key? key, + required this.text, + }) : super(key: key); + + final String text; + + @override + _ExpandableTextState createState() => _ExpandableTextState(); +} + +class _ExpandableTextState extends State { + bool _isExpanded = false; + + @override + Widget build(BuildContext context) { + if (_isExpanded) { + return Card( + child: Padding( + padding: const EdgeInsets.all(15.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + widget.text, + softWrap: true, + ), + IconButton( + onPressed: onPressed, + icon: const Icon(Icons.keyboard_arrow_up, size: 50)), + ], + ), + )); + } + + return Stack(alignment: Alignment.bottomCenter, children: [ + Card( + child: Container( + padding: const EdgeInsets.only(top: 15, left: 15, right: 15), + height: 100, + child: Text( + widget.text, + overflow: TextOverflow.fade, + maxLines: 3, + softWrap: true, + ))), + Positioned( + bottom: 10, + child: IconButton( + onPressed: onPressed, + icon: const Icon(Icons.keyboard_arrow_down, size: 50))) + ]); + } + + void onPressed() { + setState(() { + _isExpanded = !_isExpanded; + }); + } +} \ No newline at end of file diff --git a/client/lib/widgets/detail/abstract.dart b/client/lib/widgets/detail/abstract.dart index 3d6a8942..72970243 100644 --- a/client/lib/widgets/detail/abstract.dart +++ b/client/lib/widgets/detail/abstract.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:pr12er/protos/pkg/pr12er/messages.pb.dart'; +import 'package:pr12er/widgets/components/expandable_text.dart'; // ignore: must_be_immutable class PaperAbstractWidget extends StatelessWidget { @@ -18,21 +19,7 @@ class PaperAbstractWidget extends StatelessWidget { "Abstract", style: Theme.of(context).textTheme.headline1, ), - Stack(alignment: Alignment.bottomCenter, children: [ - // ignore: sized_box_for_whitespace - Card( - child: Container( - padding: - const EdgeInsets.only(top: 15, left: 15, right: 15), - height: 150, - child: Text( - paper.abstract, - overflow: TextOverflow.fade, - softWrap: true, - ))), - const Positioned( - bottom: -10, child: Icon(Icons.keyboard_arrow_down, size: 50)) - ]) + ExpandableText(text: paper.abstract) ], )); }