forked from eatvio/eatvio_app
87 lines
2.7 KiB
Dart
87 lines
2.7 KiB
Dart
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<ExpandableText> {
|
|
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: [
|
|
Text(
|
|
widget.text,
|
|
style: TextStyles.textMMediumAuto.copyWith(color: appTheme.black),
|
|
// 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)),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
}
|