This commit is contained in:
2024-01-27 18:59:15 +08:00
parent 2b34f75056
commit 6608c0b94e

View File

@@ -1,6 +1,6 @@
import "package:flutter/material.dart";
class FitText extends StatefulWidget {
class FitText extends StatelessWidget {
const FitText({
Key? key,
required this.texts,
@@ -11,14 +11,6 @@ class FitText extends StatefulWidget {
final TextStyle? style;
final String separator;
@override
State<FitText> createState() => _FitText();
}
class _FitText extends State<FitText> {
late List<String> texts;
late List<double> sizes;
Size _textSize(String text, TextStyle? style) {
final TextPainter textPainter = TextPainter(
text: TextSpan(text: text, style: style),
@@ -28,34 +20,27 @@ class _FitText extends State<FitText> {
return textPainter.size;
}
@override
void initState() {
super.initState();
final tmp = widget.texts.map((e) => e.$2).toSet().toList()
..sort((b, a) => a.compareTo(b));
sizes = [];
texts = [];
for (final i in tmp) {
final text = widget.texts
.where((e) => e.$2 >= i)
.map((e) => e.$1)
.join(widget.separator);
texts.add(text);
sizes.add(_textSize(text, widget.style).width);
}
}
@override
Widget build(BuildContext context) {
final tmp = this.texts.map((e) => e.$2).toSet().toList()
..sort((b, a) => a.compareTo(b));
final List<double> sizes = [];
final List<String> texts = [];
for (final i in tmp) {
final text =
this.texts.where((e) => e.$2 >= i).map((e) => e.$1).join(separator);
texts.add(text);
sizes.add(_textSize(text, style).width);
}
if (texts.isEmpty) return Container();
return LayoutBuilder(builder: (context, constraints) {
final double maxWidth = constraints.maxWidth;
for (int i = sizes.length - 1; i >= 0; i--) {
if (sizes[i] <= maxWidth) {
return Text(texts[i], style: widget.style);
return Text(texts[i], style: style);
}
}
return Text(texts[0], style: widget.style);
return Text(texts[0], style: style);
});
}
}