// 思路: 获取最大行数的尾部的偏移量。
// 2. 在偏移量的尾部截图 展开或者收起的文字的大小
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:merchant/config.dart';
class OtherExpandableText extends StatefulWidget {
final String? text;
final TextStyle? style;
final int? maxLines;
final String expandText;
final String collapseText;
const OtherExpandableText(
{Key? key,
this.text,
this.style,
this.maxLines,
required this.collapseText,
required this.expandText})
: super(key: key);
@override
State<OtherExpandableText> createState() => _OtherExpandableTextState();
}
class _OtherExpandableTextState extends State<OtherExpandableText> {
bool expand = false;
String linkText = "";
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (BuildContext context, BoxConstraints constraints) {
// 思路: 获取最大行数的尾部的偏移量。
// 2. 在偏移量的尾部截图 展开或者收起的文字的大小
//第二种:
var span = TextSpan(text: widget.text, style: widget.style);
var textPainer = TextPainter(
text: span,
maxLines: widget.maxLines,
textDirection: TextDirection.ltr);
textPainer.layout(maxWidth: constraints.maxWidth);
final textSize = textPainer.size;
var position = textPainer.getPositionForOffset(Offset(
textSize.width,
textSize.height,
));
final endOffset = textPainer.getOffsetBefore(position.offset);
// if (textPainter.didExceedMaxLines) {
//超出
return RichText(
// maxLines: expand ? null : widget.maxLines,
text: TextSpan(
text: expand
? widget.text
: widget.text!.substring(
0,
// endOffset
(endOffset! -
(expand
? widget.collapseText.length - 1
: widget.expandText.length - 1))),
style: TextStyle(
overflow: TextOverflow.ellipsis,
color: Config.secondTextColor,
fontWeight: FontWeight.w500,
),
children: [
TextSpan(
text: expand ? widget.collapseText : widget.expandText,
style: TextStyle(
color: Config.primaryTextColor,
fontWeight: FontWeight.w500,
fontSize: 28.rpx,
),
recognizer: TapGestureRecognizer()
..onTap = () {
print("展开");
setState(() {
expand = !expand;
});
}),
]),
);
// } else {
// return Text(widget.text ?? "");
// }
});
}
}