Files
MWClash/lib/common/measure.dart
chen08209 31de2e51bc Fix windows some issues
Optimize overwrite handle

Optimize access control page

Optimize some details
2025-12-09 16:28:10 +08:00

94 lines
2.4 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 titleSmallHeight {
return _measureMap.updateCacheValue(
'titleSmallHeight',
() => computeTextSize(
Text('X', style: context.textTheme.titleSmall),
).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,
);
}
}