Вы можете использовать размеры текста темы по умолчанию:
Text('Hi There', style: Theme.of(context).textTheme.titleLarge)
Существуют различные textTheme
стили текста, например:
TextStyle? displayLarge,
TextStyle? displayMedium,
TextStyle? displaySmall,
TextStyle? headlineLarge,
TextStyle? headlineMedium,
TextStyle? headlineSmall,
TextStyle? titleLarge,
TextStyle? titleMedium,
TextStyle? titleSmall,
TextStyle? bodyLarge,
TextStyle? bodyMedium,
TextStyle? bodySmall,
TextStyle? labelLarge,
TextStyle? labelMedium,
TextStyle? labelSmall,
У каждого из вышеперечисленных Text Style
есть разные font size
.
Если textTheme
не применяется в вашем ThemeData
, будут применены значения по умолчанию.
Надеюсь, это вам поможет.
@eastwater ты wlcm.
Я думаю, вы не хотите задавать размер шрифта, жестко запрограммированный в TestStyle, вот так:
TextStyle(fontSize: 16)
вместо этого вы хотите сделать вот так,
TextStyle(fontSize: larger)
где big — переменная типа int, где установлено значение 16. Для достижения желаемой цели вы можете сделать следующее:
int xxxSmall = 1;
int xxSmall = 2;
int xSmall = 4;
int small = 8;
int medium = 12;
int large = 16;
int xLarge = 24;
int xxLarge = 40;
int xxxLarge = 65;
Затем вы можете использовать его в TextStyle. Но такой способ использования не является стандартным, поскольку глобально объявленные вещи не являются хорошей практикой. так что вы можете создать класс, в котором будут храниться все эти значения, и использовать эти значения через этот класс,
/// Default Spacing in App UI.
abstract class AppSpacing {
/// The default unit of spacing
static const double spaceUnit = 16;
/// xxxs spacing value (1pt)
static const double xxxs = 0.0625 * spaceUnit;
/// xxs spacing value (2pt)
static const double xxs = 0.125 * spaceUnit;
/// xs spacing value (4pt)
static const double xs = 0.25 * spaceUnit;
/// sm spacing value (8pt)
static const double sm = 0.5 * spaceUnit;
/// md spacing value (12pt)
static const double md = 0.75 * spaceUnit;
/// lg spacing value (16pt)
static const double lg = spaceUnit;
/// xlg spacing value (24pt)
static const double xlg = 1.5 * spaceUnit;
/// xxlg spacing value (40pt)
static const double xxlg = 2.5 * spaceUnit;
/// xxxlg pacing value (64pt)
static const double xxxlg = 4 * spaceUnit;
}
Теперь вы можете использовать этот экземпляр класса и указать размер шрифта TestStyle через этот класс:
TextStyle(fontSize: AppSpacing.lg)
Кроме того, вы можете создать предварительно определенный TestStyle для повторного использования.
abstract class AppTextStyle {
static const TextStyle xs = TextStyle(fontSize: AppSpacing.xs);
static const TextStyle sm = TextStyle(fontSize: AppSpacing.sm);
static const TextStyle md = TextStyle(fontSize: AppSpacing.md);
static const TextStyle lg = TextStyle(fontSize: AppSpacing.lg);
static const TextStyle xlg = TextStyle(fontSize: AppSpacing.xlg);
}
Опять же, вы можете создать какое-нибудь расширение, которое повысит удобство использования.
extension TextStyleHelpers on TextStyle {
TextStyle font(double value) => copyWith(fontSize: value);
}
тогда вы можете очень легко указать размер шрифта,
Theme.of(context).textTheme.headlineLarge?.font(AppSpacing.xs)
Теперь отсюда вы можете сделать гораздо больше. Вы можете создать еще одно расширение для BuildContext, где вы сможете получить доступ к этой теме и TextTheme для большего удобства использования.
extension ThemeX on BuildContext {
ThemeData get theme => Theme.of(this);
TextTheme get textTheme => theme.textTheme;
TextStyle get headlineLarge => textTheme.headlineLarge!;
}
После этого вы можете использовать его вот так:
Text(
"This is the text",
style: context.headlineLarge!.font(AppSpacing.lg),
)
Теперь у вас есть лучшее решение для общего стиля TestStyle, хотя есть еще много жестко запрограммированных вещей, которые вам нужно сделать, но это только одна пора заняться этим, и вы также можете использовать это для других своих проектов. Так что вы придется сделать это один раз и использовать каждый раз, что будет больше сохранение времени. А также ваш код станет более читабельным и организованным.
Для MaterialApp (заголовок: «Hello World», тема: ThemeData( useMaterial3: true, )) применяется textTheme по умолчанию? Спасибо