import 'dart:math' as math; import 'package:eatvio_app/generated/l10n.dart'; import 'package:eatvio_app/core/theme/custom_text_style.dart'; import 'package:eatvio_app/core/theme/theme_helper.dart'; import 'package:flutter/material.dart'; import 'package:flutter_html/flutter_html.dart'; import 'package:flutter_svg/svg.dart'; class ExpandableText extends StatefulWidget { final String text; final int maxLines; ExpandableText({required this.text, this.maxLines = 3}); @override _ExpandableTextState createState() => _ExpandableTextState(); } class _ExpandableTextState extends State { bool isExpanded = false; void toggleExpansion() { setState(() { isExpanded = !isExpanded; }); } @override Widget build(BuildContext context) { final s = S.of(context); return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.symmetric(horizontal: 16), child: Stack( children: [ Html( data: widget.text, style: { "*": Style( margin: Margins.all(0), color: Colors.black87, maxLines: isExpanded ? null : widget.maxLines, textOverflow: TextOverflow.clip, ), }, ), if (!isExpanded) Positioned.fill( child: Align( alignment: Alignment.bottomCenter, child: Container( height: 35, decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: [ Colors.white.withValues(alpha: 0.0), Colors.white.withValues(alpha: 0.6), Colors.white, ], ), ), ), ), ), ], ), ), Align( alignment: Alignment.bottomCenter, child: GestureDetector( onTap: toggleExpansion, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( isExpanded ? s.hide : s.expand, style: TextStyles.textMMedium.copyWith(color: appTheme.blueA400), ), Transform.rotate(angle: isExpanded ? math.pi : 0, child: SvgPicture.asset('assets/icons/arrow_down.svg', width: 12, height: 12)), ], ), ), ), ], ); } }