Add linux deb dependencies Add backup recovery strategy select Support custom text scaling Optimize the display of different text scale Optimize windows setup experience Optimize startTun performance Optimize android tv experience Optimize default option Optimize computed text size Optimize hyperOS freeform window Add developer mode Update core Optimize more details
118 lines
2.5 KiB
Dart
118 lines
2.5 KiB
Dart
import 'package:fl_clash/common/common.dart';
|
|
import 'package:flutter/cupertino.dart';
|
|
import 'package:flutter/material.dart';
|
|
|
|
class Measure {
|
|
final TextScaler _textScaler;
|
|
final BuildContext context;
|
|
final Map<String, dynamic> _measureMap;
|
|
|
|
Measure.of(this.context, double textScaleFactor)
|
|
: _measureMap = {},
|
|
_textScaler = TextScaler.linear(
|
|
textScaleFactor,
|
|
);
|
|
|
|
Size computeTextSize(
|
|
Text text, {
|
|
double maxWidth = double.infinity,
|
|
}) {
|
|
final textPainter = TextPainter(
|
|
text: TextSpan(
|
|
text: text.data,
|
|
style: text.style,
|
|
),
|
|
maxLines: text.maxLines,
|
|
textScaler: _textScaler,
|
|
textDirection: text.textDirection ?? TextDirection.ltr,
|
|
)..layout(
|
|
maxWidth: maxWidth,
|
|
);
|
|
return textPainter.size;
|
|
}
|
|
|
|
double get bodyMediumHeight {
|
|
return _measureMap.updateCacheValue(
|
|
"bodyMediumHeight",
|
|
() => computeTextSize(
|
|
Text(
|
|
"X",
|
|
style: context.textTheme.bodyMedium,
|
|
),
|
|
).height,
|
|
);
|
|
}
|
|
|
|
double get bodyLargeHeight {
|
|
return _measureMap.updateCacheValue(
|
|
"bodyLargeHeight",
|
|
() => computeTextSize(
|
|
Text(
|
|
"X",
|
|
style: context.textTheme.bodyLarge,
|
|
),
|
|
).height,
|
|
);
|
|
}
|
|
|
|
double get bodySmallHeight {
|
|
return _measureMap.updateCacheValue(
|
|
"bodySmallHeight",
|
|
() => computeTextSize(
|
|
Text(
|
|
"X",
|
|
style: context.textTheme.bodySmall,
|
|
),
|
|
).height,
|
|
);
|
|
}
|
|
|
|
double get labelSmallHeight {
|
|
return _measureMap.updateCacheValue(
|
|
"labelSmallHeight",
|
|
() => computeTextSize(
|
|
Text(
|
|
"X",
|
|
style: context.textTheme.labelSmall,
|
|
),
|
|
).height,
|
|
);
|
|
}
|
|
|
|
double get labelMediumHeight {
|
|
return _measureMap.updateCacheValue(
|
|
"labelMediumHeight",
|
|
() => computeTextSize(
|
|
Text(
|
|
"X",
|
|
style: context.textTheme.labelMedium,
|
|
),
|
|
).height,
|
|
);
|
|
}
|
|
|
|
double get titleLargeHeight {
|
|
return _measureMap.updateCacheValue(
|
|
"titleLargeHeight",
|
|
() => computeTextSize(
|
|
Text(
|
|
"X",
|
|
style: context.textTheme.titleLarge,
|
|
),
|
|
).height,
|
|
);
|
|
}
|
|
|
|
double get titleMediumHeight {
|
|
return _measureMap.updateCacheValue(
|
|
"titleMediumHeight",
|
|
() => computeTextSize(
|
|
Text(
|
|
"X",
|
|
style: context.textTheme.titleMedium,
|
|
),
|
|
).height,
|
|
);
|
|
}
|
|
}
|